利用Tripwire检测系统完整性(3)
发表于:2007-07-04来源:作者:点击数:
标签:
六、完整性检测的自动化 如果您想让Tripwire在特定的时刻或每隔一段时间就自动进行检测的话,可以按照下列提示来完成。例如我们要他每天的下午2点进行一次检测,那该如何做呢?我们可以利用cron来来协助我们完成此项任务。我们可以在root用户的 crontab文件
六、完整性检测的自动化
如果您想让Tripwire在特定的时刻或每隔一段时间就自动进行检测的话,可以按照下列提示来完成。例如我们要他每天的下午2点进行一次检测,那该如何做呢?我们可以利用cron来来协助我们完成此项任务。我们可以在root用户的 crontab文件中添加以下一项:
0 2 * * * /usr/sbin/tripwire --check |
需要注意的是,cron本身也可能受到攻击,因而可能出现不执行等意外情况。所以我们最好在一个可信的远程机器上来执行cron任务。在trusty上的crontab中添加如下一个远程检测项:
0 2 * * * ssh -n -l root untrusty /usr/sbin/tripwire --check |
但是如果入侵者攻破了untrusty上的sshd的话,那么覆巢之下,焉有完卵--您的安全性也必将受到威胁!此外,某些rootkits能够颠覆对Tripwire的远程exec调用。为了获取最大的安全性,只是执行cron任务是远远不够的,还得在可信机器上进行完整性检验。
Red Hat Linux预配置情况下,会在每晚通过cron任务/etc/cron.daily/tripwire-check来运行Tripwire程序。但是,Tripwire数据库不是由操作系统来提供的,而是由用户自己来提供一个原件,否则,cron只是定时向超级用户发送一封Tripwire调用失败的的电子邮件。
七、生成Tripwire报告
上面介绍了如何配置Tripwire来进行完整性检测。但这并不是使用Tripwire的目的所在,我们需要的是完整性检测的结果,换句话说还得要Tripwire将结果以报告的形式提交给管理人员,这样我们才能以此判断系统是否遭到破。具体操作如下所示:
#!/bin/shDIR=/var/lib/tripwire/reportHOST=`hostname -s`LAST_REPORT=`ls -1t $DIR/$HOST-*.twr | head -1`twprint --print-report --twrfile "$LAST_REPORT" |
一般情况下,Tripwire报告存放在什么地方是由Tripwire配置文件中的REPORTFILE变量来决定,其常见值为:
REPORTFILE = /var/lib/tripwire/report/$(HOSTNAME)-$(DATE).twr
变量HOSTNAME存放的是机器的主机名,变量DATE存放的是时间戳,如。所以,主机untrusty的报告文件名应当为:
/var/lib/tripwire/report/untrusty-20040130-030518.twr
虽然tripwire可以通过电子邮件发送报告,但不要太信赖电子邮件,因为它很可能被截获并被篡改后重发。所以,最好由您直接检查报告为上,要Twprin打印报告,可以按如下操作进行:
# twprint --print-dbfile --dbfile /var/lib/tripwire/`hostname -s`.twdTripwire(R) 4.0 DatabaseDatabase generated by: rootDatabase generated on: Mon Jan 1 22:33:55 2004Database last updated on: Never... contents follow ... |
八、Tripwire数据库的维护
对于Tripwire数据库的维护工作,主要包括数据库的更新、添加和删除操作,下面我们将分别介绍。
更新数据库
有时候,我们会对程序作一些正常的修改,这些改动也会反映在最新的Tripwire报告中,但问题是,我们使用Tripwire很大程度上只想让它报告那些"非法的"修改。那么,这时我们就需要利用最新的报告来更新一下我们的Tripwier数据库,具体操作如下所示:
#!/bin/shDIR=/var/lib/tripwire/reportHOST=`hostname -s`LAST_REPORT=`ls -1t $DIR/$HOST-*.twr | head -1`tripwire --update --twrfile "$LAST_REPORT" |
这里有一点必须注意,那就是如果你已经修改了某些文件的话,您不能只是简单的运行更新就算了事:您必须在此之前首先进行完整性检验。进行更新的好处是它比初始化数据库要快得多!
向数据库中添加文件
为了向Tripwire的数据库中添加文件和目录,请执行以下操作:
向有效策略文件中添加指定的文件,如/bin/ls:
向有效策略文件中添加整个目录树,比如/etc:
向有效策略文件中添加目录如/etc及其下的文件,但不包括其子目录:
/etc --> $(SEC_BIN) (recurse=1) ; |
向有效策略文件中添加目录如/etc,但不包括其下的文件以及其子目录:
/etc --> $(SEC_BIN) (recurse=0); |
然后初始化数据库。
策略实际上就是存放在策略文件中的规则表,规则的一般形式如下所示:
它的基本含义就是,如果给定的规则被违反的话,那么对应的文件或目录就被认为是到了安全侵害。例如:
上面这条规则的含义是:如果自从上次快照之后,如果/bin/login的文件权限(p)、inode号(i)、 尺寸 (s),、用户(u)或组 (g)发生了变化的话,那么就应当引起我们的关注。如果想全面深入的了解Tripwire语法的话,请参阅Tripwire手册。在这里,我们使用了一个预定义的全局变量SEC_BIN来指出二进制文件不得修改。recurse= n的作用在于通知Tripwire在文件系统中的递归深度;当n为零时,其含义为只测试到目录文件本身这一层次。
很多时候我们需要修改默认策略文件,因为它们所提供的策略未必完全适合我们的系统,所以我们需要针对不同的Linux类型和版本,对Tripwire所提供的默认策略进行适当的剪裁,从而满足我们的要求。