利用Tripwire检测系统完整性(1)

发表于:2007-07-04来源:作者:点击数: 标签:
完整性是安全要求的基本要求之一,本文将向读者详细介绍如何利用 开源 完整性检测工具Tripwire来检查系统的完整性。 一、系统的完整性 我们知道,系统的正常运行要靠系统程序的正常运转,而程序的运行又与其可执行文件休戚相关。所以,维护系统完整性是确保

完整性是安全要求的基本要求之一,本文将向读者详细介绍如何利用开源完整性检测工具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.ltesting.net