简介

tripwire是一个基于主机的入侵检测系统,主要手段是在系统初始化后生成一个指纹库,通过定期检查校验文件,如果发生变化,则会触发邮件报警。

tripwire 运行方式并不是服务,而是crontab脚本,详见/etc/cron.daliy/tripwire-check,默认每天运行一次。

 

安装tripwire

安装tripwire十分容易,它已经包含在了EPEL仓库中。

 

 
   
  1. yum install tripwire  --enablerepo=epel 

 

配置详解

安装tripwire后会在/etc/tripwire/下生成两个文件,一个是程序配置文件,一个是入侵检测策略文件,twcfg.txt (tripwire configure)和 twpol.txt(tripwire policy)。

为了防止自身遭篡改,tripwire两个管理密码,一个叫站点密钥(site key),用于更新配置文件和入侵检测策略。另一个叫本地密钥(local key),用于更新本地数据库。

因此在运行tripwire之前必须创建key文件,运行命令:

 
   
  1. tripwire-setup-keyfiles 

(除了分别要求输入两次密码外,还要求用站点密码来给配置文件签名)

 

接下来初始化tripwire,运行命令

 
   
  1. tripwire --init 

(输入站点密码,开始扫描并建立数据库,扫描期间会报错,主要是twpol.txt文件里定义了一些不存在的文件,请根据需要调整twpol文件。)

检查方法,运行命令:

 
   
  1. tripwire --check 

 

这样会有大量输出,可以直接用管道过滤,找到系统中不存在而策略里却存在的文件

 
   
  1. tripwire --check |grep -w "Filename:" 

 

根据上文过滤结果,删除其在策略文件里的定义,修改twpol.txt文件后,需要更新策略,运行命令:

 
   
  1. tripwire -m p  /etc/tripwire/twpol.txt 

 

默认的twpol.txt 实际上是个使用手册,又臭又长,建议读一读,理解下原理。

根据twpol.txt,tripwire 把文件定义成如下类型:

 

 
   
  1. SEC_CRIT      = $(IgnoreNone)-SHa ;  # 重要文件,写死了但又不应改被修改,比如bashrc  
  2.  
  3. SEC_SUID      = $(IgnoreNone)-SHa ;  # 设置了SUID和SGID的二进制文件,比如/usr/sbin/里的文件  
  4.  
  5. SEC_BIN       = $(ReadOnly) ;        # 普通的二进制文件,比如/usr/bin/里的文件  
  6.  
  7. SEC_CONFIG    = $(Dynamic) ;         # 读多写少的配置,比如httpd.conf  
  8.  
  9. SEC_LOG       = $(Growing) ;         # 日志文件,经常写,但是属性应该是固定的,比如/var/log/message  
  10.  
  11. SEC_INVARIANT = +tpug ;              # 固定属性的重要目录,比如用户家目录  
  12.  
  13. SIG_LOW       = 33 ;                 # 安全等级较低的文件  
  14.  
  15. SIG_MED       = 66 ;                 # 安全等级中等的文件  
  16.  
  17. SIG_HI        = 100 ;                # 安全等级最高的重要文件  

 

以上是默认文件定义的类型,可以根据需要自定义。

 

规则格式(配置文件中摘取的实例)

 

 
   
  1. (  
  2.  
  3.   rulename = "Kernel Administration Programs",  这里是规则名称 
  4.  
  5.   severity = $(SIG_HI) ,   这里是安全级别 
  6.  
  7.   emailto=root@localhost  邮件支持 
  8.  
  9. (这里比较坑爹,因为加上了emailto,所以severity后面必须加上逗号,需要注意) 
  10.  
  11. )  
  12.  
  13. {  
  14.  
  15.   /sbin/adjtimex            -> $(SEC_CRIT) ;  文件 ->级别 
  16.  

 

twpol.txt默认的规则很多很多,我们修改twpol.txt 应该只要替换自己想要的规则即可,不需要大动作。

 

按照我们通用的要求,监视/etc和/usr/bin、/usr/sbin、/sbin里的文件即可。

逐个列出那些目录的文件有些困难,需要借助find命令。

 

 
   
  1. find /usr/bin -type f -exec ls {} \; |sed 's/$/\t\t\t->\$(SYSBIN);/g;s/^/\t/g'  
  2.  
  3. find /bin -type f -exec ls {} \; |sed 's/$/\t\t\t->\$(SYSBIN);/g;s/^/\t/g'  
  4.  
  5. find /usr/sbin -type f -exec ls {} \; |sed 's/$/\t\t\t->\$(SYSBIN);/g;s/^/\t/g'  
  6.  
  7. find /sbin -type f -exec ls {} \; |sed 's/$/\t\t\t->\$(SYSBIN);/g;s/^/\t/g'  

 

 

简单的命令行使用方法

 

 
   
  1. tripwire -m i  等效于  tripwire –-init   初始化 
  2.  
  3. tripwire -m c 等效于  tripwire –-check  测试 
  4.  
  5. tripwire -m p  等效于  tripwire --update-policy  更新策略 
  6.  
  7. tripwire -m u  等效于 tripwire --update  更新数据库 

 

 

跟rkhunter的区别,

rkhunter的功能比较单一,可配置性比较差,只检查校验/usr/sbin之类的可执行文件的md5,防止篡改。

而tripwire除了rkhunter的功能外,还可以监控目录,新产生的文件等,有专门的配置文件可供修改。