Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2520955
  • 博文数量: 867
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 9800
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-27 14:44
文章分类

全部博文(867)

文章存档

2007年(6)

2006年(861)

我的朋友

分类: LINUX

2006-08-20 21:38:54

 

六、完整性检测的自动化

如果您想让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/sh
DIR=/var/lib/tripwire/report
HOST=`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`.twd
Tripwire(R) 4.0 Database
Database generated by:        root
Database generated on:        Mon Jan  1 22:33:55 2004
Database last updated on:     Never
... contents follow ...


八、Tripwire数据库的维护

对于Tripwire数据库的维护工作,主要包括数据库的更新、添加和删除操作,下面我们将分别介绍。

更新数据库

有时候,我们会对程序作一些正常的修改,这些改动也会反映在最新的Tripwire报告中,但问题是,我们使用Tripwire很大程度上只想让它报告那些"非法的"修改。那么,这时我们就需要利用最新的报告来更新一下我们的Tripwier数据库,具体操作如下所示:

#!/bin/sh
DIR=/var/lib/tripwire/report
HOST=`hostname -s`
LAST_REPORT=`ls -1t $DIR/$HOST-*.twr | head -1`
tripwire --update --twrfile "$LAST_REPORT"


这里有一点必须注意,那就是如果你已经修改了某些文件的话,您不能只是简单的运行更新就算了事:您必须在此之前首先进行完整性检验。进行更新的好处是它比初始化数据库要快得多!

向数据库中添加文件

为了向Tripwire的数据库中添加文件和目录,请执行以下操作:

向有效策略文件中添加指定的文件,如/bin/ls:

/bin/ls  -->  $(SEC_BIN) ;


向有效策略文件中添加整个目录树,比如/etc:

/etc     -->  $(SEC_BIN) ;


向有效策略文件中添加目录如/etc及其下的文件,但不包括其子目录:

/etc     -->  $(SEC_BIN) (recurse=1) ;


向有效策略文件中添加目录如/etc,但不包括其下的文件以及其子目录:

/etc     -->  $(SEC_BIN) (recurse=0);


然后初始化数据库。

策略实际上就是存放在策略文件中的规则表,规则的一般形式如下所示:

filename -> rule ;


它的基本含义就是,如果给定的规则被违反的话,那么对应的文件或目录就被认为是到了安全侵害。例如:

/bin/login -> +pisug ;


上面这条规则的含义是:如果自从上次快照之后,如果/bin/login的文件权限(p)、inode号(i)、 尺寸 (s),、用户(u)或组 (g)发生了变化的话,那么就应当引起我们的关注。如果想全面深入的了解Tripwire语法的话,请参阅Tripwire手册。在这里,我们使用了一个预定义的全局变量SEC_BIN来指出二进制文件不得修改。recurse= n的作用在于通知Tripwire在文件系统中的递归深度;当n为零时,其含义为只测试到目录文件本身这一层次。

很多时候我们需要修改默认策略文件,因为它们所提供的策略未必完全适合我们的系统,所以我们需要针对不同的Linux类型和版本,对Tripwire所提供的默认策略进行适当的剪裁,从而满足我们的要求。

阅读(1606) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~