tripwire简单介绍tripwire通过配置可以调整范围只审查文件系统中的指定部分,这样可以为文件系统的不同部分指定不同的扫描级别,或者为tripwire数据库分别单独增加文件或者将某部分排除在外。这种功能在生产应用环境中tripwire的使用,或者在不那么随便的情况下使用tripwire功能时将会非常有用。
当大部分系统管理员考虑系统安全时,往往想到防火墙、网络配置、服务器管理以及用户政策等。他们很少有人会考虑到相对主动的防御手段,如rootkit检查等。尽管如此,对于真正具有安全意识的系统管理员来说文件系统完整性审查是非常重要的工作。这种完整性审查的工作包括追踪系统文件系统状态,定期检查未经过授权的变化等。当发现可以变化时,就应该马上判断这种变化是否由入侵引起,如果需要,要采取损失控制措施。尽管损失控制措施可能需要时间甚至成本很高,但是总要比事态严重到无法控制要好得多。
目前所知Linux和UNIX系统下文件系统完整性最好的是Tripwire。市场上有商业版本的Tripwire软件,不过这里要讨论的是如何使用开放源代码的版本(一般称为tripwire,字头不大写,以区别商业版)。开源tripwire工具是一款功能强大的工具,是安全系统管理的重要部分。很少有与互联网相连接的Linux系统没有安装tripwire。如果你不知道是否该装tripwire ,那么请你安装它。
Tripwire工具的内容其实非常简单。它通过对文件系统中需要对非法改动做检查的部分进行定义,生成文件系统“镜像”,并保存在数据库中。Tripwire政策不仅仅对快照做出定义,还会提供一套确定未经授权或者可改变的标准。当tripwire对文件系统进行审查时,会使用政策来审查文件系统当前状态并与快照进行比对,然后对所发现的情况生成报告。一般常见情况下,tripwire会每天运行一次,通常会在夜间进行,以避免有人使用系统干扰审查的进行。
使用tripwire第一次生成镜像应该是在系统刚刚安装完毕,还没有与网络连接,也没有任何用户或者其他不能完全信任的数据资源接触之前进行。如果使用tripwire恢复系统,应该确信所使用的tripwire数据是在系统运行第一天所得到的资料,以保证不会误用已经遭到入侵的系统的资料。
提醒tripwire也存在几个问题需要注意。问题主要集中在两个部分:方便性和缺陷。所谓方便性问题是基于tripwire报告长,很难阅读和分析这个事实,以及如果tripwire所审查的文件系统需要经常修改的话,就需要经常升级tripwire数据库。你需要仔细考虑如何根据自己的情况减少这方面的工作负担。
缺陷这个问题则主要是由于文件系统完整性审查是定期而非实时进行所导致。由于实时文件系统审查需要占用系统资源,明显降低系统性能,所以无法实时进行。这种周期性的检查就可能出现一种情况,在某次审查之后,你对文件系统进行了修改,然后在进行下次审查之前,有入侵者修改了文件系统,无论你使用什么完整性审查工具,当生成报告时,你很可能会将入侵报告误以为是自己行为导致的结果,而没有发现已经发生了不幸的事情。你应该认识到,tripwire和任何其他工具一样,不会永远正确。但是有tripwire确实是一种进步,要比不使用tripwire好得多。
除了这些问题,tripwire依然是一款非常出色的提高系统安全性的工具。市面上其他文件系统完整性审查工具还有Samhain和Aide。由于tripwire是行业标准,也是这些工具中最常用的。可以选择最适合需求的一款或者几款软件。尽管没有证据表明几个系统完整性审查工具一起使用可以带来额外的好处,但是您可以根据自己的情况进行选择。
tripwire设置在系统中安装tripwire的方法决定权在您。主要的Linux发行版的软件知识库中一般都带有tripwire,你可以用软件管理器下载和安装tripwire 。例如,在Debian中,可以输入apt-get安装tripwire。另外也可以在SourceForge的开放源代码Tripwire项目页面上得到SourceForge。
安装方法也不尽相同。有的安装过程中就自动完成了对tripwire的设置。有些Linux发行版则为tripwire的设置脚本提供了前端系统配置工具。如果不是这种情况,或者你决定不使用系统指定的前端,也可以自己配置tripwire。
首先,需要以超级用户身份登录并进入/etc/tripwire目录,然后运行twinstall.sh脚本,然后使用--init启动数据库初始化模式下的tripwire。最后,删除/etc/tripwire目录下的twcfg.txt和 twpol.txt。这些命令前面都有#,如下所式:
# cd /etc/tripwire
# ./twinstall.sh
# tripwire --init
# rm twcfg.txt
# rm twpol.txt
也有可能你找不到twinstall.sh脚本。这种情况下,twinstall.sh所应该实现的功能就需要由你来完成。包括创建地址和本地密钥,以确保政策和tripwire的配置文件的集成。首先在/etc/tripwire目录下创建地址和本地密钥。然后使用site密钥签署配置和政策文件,最后改变文件许可。最后,使用安装和配置有tripwire的本地系统名称替换“主机”名称。
# twadmin --generate-keys --site-keyfilesite.key
# twadmin --generate-keys --local-keyfile host-local.key
# twadmin --create-cfgfile --cfgfiletw.cfg --site-keyfilesite.key twcfg.txt
# twadmin --create-polfile --cfgfiletw.cfg --site-keyfilesite.key twpol.txt
# chownroot:rootsite.key host-local.keytw.cfgtw.pol
# chmod 600 site.key host-local.keytw.cfgtw.pol
完成以后,再进行以下三步:
# tripwire .init
# rm twcfg.txt
# rm twpol.txt
最后删除twcfg.txt和twpol.txt文件是出于对安全的考虑。tw.cfg和tw.pol文件具有实际功能,而两个.txt文件则只是前面两个文件的文本复件。在完成以上步骤以后,应该按自己的需要编辑twcfg.txt和twpol.txt。
tripwire的使用设置完毕,当然就要开始使用tripwire 。最好的使用方法是一个非常简单的命令:# tripwire --check
输入--help,进入下一界面,再输入--check,就能够在manpage旁边看到一小段关于使用tripwire的说明:# tripwire --check --help
使用tripwire时如果希望自动进行检查程序,可以创建工作时间表来定期进行系统检查。你需要在/etc目录下编辑指挥系统定时完成任务的crontab文件,或者在/etc/cron.daily目录下增加相应的执行脚本,而且应该符合所用发行版以及系统配置的政策。如果需要编辑crontab文件,请在文本编辑器中打开/etc/crontab文件,然后增加关于tripwire执行检查的语句。例如,如果需要每天夜里2点进行,可以输入:
0 2 * * * /usr/sbin/tripwire --check
还有一个更好的自动定时方法就是从网络上的另外一台设备发出命令,这样入侵者的行为无法影响tripwire对系统对本地网络的定时完整性审查。在另外一台设备上,可以增加以下语句,其中“target-host”应该是目标系统的主机名称:
0 2 * * * ssh -n -l root target-host /usr/sbin/tripwire .check
在这两种情况都存在使用已经被破坏的程序的可能。因此,最好将tripwire二进制文件以及密钥文件刻在CD-R上,应从CD-R上运行程序。你需要在签署之前按这个方法编辑twcfg.txt。如果CDROM在/mnt/cdrom目录下,应该对/etc/twcfg.txt文件做如下修改:
ROOT=/mnt/cdrom
SITEKEYFILE=/mnt/cdrom/site.key
LOCALKEYFILE=/mnt/cdrom/host-local.key
签署修改完毕的文件,然后生成tripwire数据库,然后取出CD-R。唯一的不同就是指明的site密钥的存储位置不一样(以下命令假设你正处于/etc/tripwire目录下):
# twadmin --create-cfgfile --cfgfiletw.cfg --site-keyfile/mnt/cdrom/site.key twcfg.txt
当操作完成,放入刻有tripwire二进制文件的光盘,并从光盘运行tripwire进行检查,检查完毕再取出光盘,然后另外保存。如果系统会定期自动检查,可以将光盘留在光驱中,并将执行文件路径/usr/sbin/tripwire.修改为/mnt/cdrom/tripwire。
只有密钥文件(site密钥和本地密钥)以及可以自己运行的二进制文件需要刻在不可写介质中进行保存。因为对配置和政策文件的修改无需使用site密钥 和本地密钥签署,会被检查发现,所以保存在光盘中更为安全。
升级tripwire数据库
文件系统中的文件会改变,而tripwire会发现这种变化。有些变化是必需进行的。如果你修改某个文件,tripwire会象发现入侵者一样进行报告。关键在于了解那些改变是应该发生的,那些不是,并及时更新数据库,这样tripwire就不会对应该进行的修改进行持续的汇报。当指出那些是经过授权的变化,tripwire就可以用来确保除经过授权的变化以外,没有其他修改发生。如果不升级数据库,这样下次执行审查任务时就不会在对这些变化进行报告。以下命令可以更新tripwire的数据库:
# LASTREPORT=`ls -1t /var/lib/tripwire/report/host-*.twr |head -1`
# tripwire --update --twrfile "LASTREPORT"
Tripwire可以对全网进行集中文件系统完整性审查,也可以用于审查Windows VFAT文件系统(FAT16和FAT32文件系统)的完整性。如果你的本地系统不是极端的需要经常改变文件系统,至少你应该在使用一种tripwire这样的工具,来帮助你遭受恶意入侵时能够及时得知消息。(责任编辑:王叶)
查看本文的国际来源