来源:Isblog.cn
完整性是安全要求的基本要求之一,本文将向读者详细介绍如何利用开源完整性检测工具Tripwire来检查系统的完整性。 一、系统的完整性我们知道,系统的正常运行要靠系统程序的正常运转,而程序的运行又与其可执行文件休戚相关。所以,维护系统完整性是确保系统安全的一项基本工作。我们这里的系统完整性是指系统中可执行文件的完整性,也就是说系统中的程序文件没被非法修改。 如果可执行文件被恶意修改的话,如改变、插入或删除等,将直接威胁到系统的安全性。大多数情况下,黑客渗入到系统后会立即修改某些系统文件以创建后门,如用准备好的替代物换掉系统中原有的/bin/login文件以便使其不用口令便能登陆系统;然后再修改某些文件,例如/bin/ls等,以便隐藏其行径。如果我们没能发现这些改变的话,那无异于身处险境却还以为很安全,这就为黑客的长期入侵提供了非常有利的条件,同时也意味着我们的损失将更大!为了改变这种被动的局面,我们需要一种文件完整性检查工具,使得当系统文件被恶意修改后能及时发现,从而为进一步处理创造条件。 二、Tripwire概述Tripwire的运行机理Tripwire是一款最为常用的开放源码的完整性检查工具,它生成目标文件的校验和并周期性的检查文件是否被更改。下面我们简单介绍一下Tripwire的运行机理。与大多数完整性检查程序相同,对于需要监视的文件,Tripwire会使用校验和来为文件的某个状态生成唯一的标识(又称为"快照"),并将其存放起来以备后用。当Tripwire程序运行时,它先计算新的标识,并于存放的原标识加以比较,如果发现不匹配的话,它就报告系统管理人员文件已经被修改。接下来,系统管理员就可以利用这个不匹配来判断系统是否遭到了入侵。例如,如果Tripwire已经为/bin/login和/bin/ls存放了快照,那么对它们的尺寸、inode号、权限以及其他属性的任何修改,都逃不过Tripwire的火眼金睛。尤其是对于文件内容的修改,即使只改变了一个字节,Tripwire也能察觉得到,因为校验和是针对文件整体的。 通过对以上运行机制的了解我们不难发现,完整性检查工具的安装时机非常重要,最好是在交付用户使用和连入网络之前的Linux系统初装时进行。因为完整性检查工具只有保留了系统文件的初始状态(快照),才能确保系统文件的完整性;如果在系统使用一段时间后再取其快照的话,它很可能已经不再是原系统文件的映象(如已经遭到破坏),所以这时的完整性检测的可靠性已经打了折扣。 Tripwire的组成Tripwire主要由策略和数据库组成。策略不仅指出Tripwire应检测的对象即文件和目录,而且还规定了用于鉴定违规行为的规则。一般情况下,对于/root、/bin和/lib目录及其中文件的任何修改都应视为违规行为。数据库则用来存放策略中规定的检测对象的快照。只要建立了策略和数据库,我们就可以随时用快照来比较当前的文件系统,然后生成一个完整性检测报告,从而判断系统的完整性是否受到攻击。除了策略和数据库外,Tripwire还有一个配置文件,用以控制数据库、策略文件和Tripwire可执行程序的位置等。 为了防止被篡改,Tripwire对其自身的一些重要文件进行了加密和签名处理。这里涉及到两个密钥:site密钥和local密钥。其中,前者用于保护策略文件和配置文件,如果多台机器具有相同的策略和配置的话,那么它们就可以使用相同的site密钥;后者用于保护数据库和报告,因此不同的机器必须使用不同的local密钥。 三、Tripwire的安装和设置Tipwire的安装Tripwire的下载地址为http://www.tripwire.org。如果您使用的是Red Hat Linux的话,可以下载该站点上的RPM格式的程序(当前最新版本为rpm4-tripwire-2.3-47.i386.tar.gz),假设将其下载到/A目录的话,安装过程如下所示:
rpm -ivh /A/rpm4-tripwire-2.3-47.i386.tar.gz如果从源代码中进行软件安装,先下载tar格式源程序并解包。接下来在相应目录中执行如下操作:
./configure make make install安装后的设置在安装Tripwire之后,可以进行如下的设置:
# cd /etc/tripwire # ./twinstall.sh # tripwire --init # rm twcfg.txt twpol.txt这里,脚本twinstall.sh的作用在于执行下列任务: 1) 创建site和local密钥,这时会要求输入口令;如果这两个密钥业已存在,则可以跳过此步骤。其中,site密钥存放在site.key文件中,而local密钥则存放在hostname-local.key(这里的hostname是指该机器的主机名)文件之中。 2) 利用site密钥对默认配置文件twcfg.txt进行签名,并将签名(而非被签名的文件twcfg.txt)存放于文件tw.cfg之中。 3) 利用site密钥对默认策略文件twcfg.txt进行签名,并将签名(而非被签名的文件twcfg.txt)存放于文件tw.pol之中。 此外,您还可以手工方式来安装,尤其是在由于某种原因,您的系统没带twinstall.sh文件等情况下则必须手工完成这项工作: 设置常见的变量:
DIR=/etc/tripwire SITE_KEY=$DIR/site.key LOCAL_KEY=$DIR/`hostname`-local.key创建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.cfg \ --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需要说明的是,上述配置是以您的默认配置和策略文件已经存在并分别为twcfg.txt 和 twpol.txt为前提的。一般情况下,为了使这两个文件能更好的满足我们的系统要求,还必须对其进行相应的修改(见下文)。此外,策略和配置文件的名称必须为twcfg.txt 和 twpol.txt,因为脚本代码就是用的这两个名称。 然后,为tripwire建立数据库并用local进行签名,命令如下所示:
# tripwire -init需要说明的是,完成此项操作,需要输入local密钥的口令;如果tripwire出现类似"Warning: File System Error"之类的错误消息的话,那么可能是由于默认策略引用了并不存在的文件所引起的。 为了安全起见,我们还需要删除明文形式的策略和配置文件,命令如下所示:
# rm twcfg.txt twpol.txt 更多内容请看系统安全设置 系统安装手册 系统备份专题专题,或
(出处:http://www.sheup.com)