Chinaunix首页 | 论坛 | 博客
  • 博客访问: 77000
  • 博文数量: 7
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 380
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-14 10:39
文章分类
文章存档

2011年(1)

2010年(1)

2009年(1)

2008年(4)

我的朋友

分类: LINUX

2008-04-09 10:53:08

Tripwire
  当Tripwire运行在数据库生成模式时,会根据管理员设置的一个配置文件对指定要监控的文件进行读取,对每个文件生成相应数字签名,并将这些结果保存在自己的数据库中,在缺省状态下,MD5和SNCFRN (Xerox的安全哈希函数)加密手段被结合用来生成文件的数字签名。当怀疑系统被入侵时,可由Tripwire根据先前生成的,数据库文件来做一次数字签名的对照,如果文件被替换,则与Tripwire数据库内相应数字签名不匹配,这时Tripwire会报告相应文件被更动,管理员就很清楚了。这样如果数据库是不可靠的,则一切工作都丧失意义。除了妥善保管数据库外,用PGP等工具对上述关键文件进行签名也是一个很好的选择。

  当管理员对某些文件更动时,Tripwire的数据库必然是需要随之更新的,Tripwire考虑到了这一点,它有四种工作模式:数据库生成,完整性检查,数据库更新,交互更新。当管理员更动文件后,可运行数据库更新模式来产生新的数据库文件。

###编译安装之后配置
# cd /etc/tripwire
# ./twinstall.sh 脚本的作用有:
1,创建site和local密钥,这时会要求输入口令,site密钥为site.key,local密钥为$HOSTNAME-local.key
2,利用site.key对配置twcfg.txt,twpol.txt进行签名,并分别存放于tw.cfg tw.pol中.
如果没有 twinstall.sh 脚本就的手工修改以上两个txt文件,设置常见的变量:
        ROOT                   =/usr/sbin
        POLFILE                =/etc/tripwire/tw.pol
        DBFILE                 =/etc/tripwire/db/$(HOSTNAME).twd
        REPORTFILE             =/etc/tripwire/report/$(HOSTNAME)-$(DATE).twr
        SITEKEYFILE            =/etc/tripwire/site.key
        LOCALKEYFILE           =/etc/tripwire/$(HOSTNAME)-local.key
        EDITOR                 =/bin/vi
修改 twpol.txt 去掉系统中并不曾在的文件或目录;然后:
创建site密钥
        # twadmin --generate-keys --site-keyfile $SITE_KEY

生成local密钥
        # twadmin --generate-keys --local-keyfile $LOCAL_KEY

为配置文件签名
        # twadmin --create-cfgfile --cfgfile $DIR/tw.cfg \
                  --site-keyfile $SITE_KEY $DIR/twcfg.txt

为策略文件签名
        # twadmin --create-polfile --cfgfile $DIR/tw.pol \
                  --site-keyfile $SITE_KEY $DIR/twpol.txt

设置权限
        # cd $DIR
        # chown root:root $SITE_KEY $LOCAL_KEY tw.cfg tw.pol
        # chmod 600 $SITE_KEY $LOCAL_KEY tw.cfg tw.pol

# tripwire --init
为tripwire建立数据库并用local进行签名.
# rm twcfg.txt twpol.txt
为安全起见,需删除明文形式的策略和配置文件.

维护策略文件和配置文件

如何查看策略和配置
    如果您想浏览一下Tripwire的策略和配置情况,但他们是以二进制的形式加密后存放的,可请用下列命令生成有效配置文件
        #twadmin --print-cfgfile
        #twadmin --print-polfile

###修改策略文件和配置文件
    当系统新安装了软件或者添加了配置文件,就需要改变Tripwire所检查文件,或者想改变Tripwire的默认行为,需要按如下所示来进行:首先,提取出明文的策略和配置、修改之后,对他们重新签名:
        # twadmin --create-cfgfile --cfgfile /etc/tripwire/tw.cfg \
                  --site-keyfile /etc/tripwire site.key /etc/tripwire/twcfg.txt
        # twadmin --create-polfile --cfgfile /etc/tripwire/tw.pol \
                  --site-keyfile site.key /etc/tripwire/twpol.txt

然后,需重新初始化数据库,删除明文的配置文件:

###基本的完整性检测配置
    完整性检验的目的在于检查一下自从上次Tripwire对文件作了快照以后,我们的文件是否发生了变动,我们可以简单通过以下命令来达到此目的:# tripwire -check
    这是一条基本的命令,它能告诉我们系统是否被修改了。它根据在策略文件中规定的规则,利用Tripwire数据库跟文件系统当前状态加以对比,之后将比较结果写入标准输出,并将其加盖时间戳、签名,然后作为一份Tripwire报告存放起来。另外,我们还可以针对数据库中的单个或多个文件进行完整性检查。在Tripwire的策略中包括以下规则:
(
  rulename = "My funky files",
  severity = 50
)
{
  /sbin/e2fsck                         -> $(SEC_CRIT) ;
  /bin/cp                              -> $(SEC_CRIT) ;
  /usr/tmp                             -> $(SEC_INVARIANT) ;
  /etc/csh.cshrc                       -> $(SEC_CONFIG) ;
}


那么您就可以用以下命令来检查选中的文件和目录:
        # tripwire --check /bin/cp /usr/tmp

若要查看一条规则所对应的所有文件,用以下命令:
        # tripwire --check --rule-name "My funky files"

也可以查看严重性大于等于特定值的所有规则,如下所示:
        # tripwire --check --severity 40

关于策略文件的有关语法,请参阅有关手册或查看联机帮助:
        $ tripwire --check --help


###生成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"

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

向数据库中添加文件

向有效策略文件中添加指定的文件,如/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所提供的默认策略进行适当的剪裁,从而满足我们的要求。

从数据库中删减文件

我们不仅根据需要向数据库中添加文件,有时我们还需要对数据库中的文件加以删减。具体操作如下所示:
例如首先向数据库中添加一个目录:
/etc -> rule

然后排除掉其中的一些文件:
!/etc/not.me
!/etc/not.me.either

如果我们想去掉一个子目录的话:
!/etc/dirname

这里,感叹号!的作用在于将给定的文件或子目录排除掉。

    Tripwire是现实中最为常见的一种开源完整性检测工具,如果想更深入的了解软件,请参阅其使用手册。

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