作为一个系统管理员,你需要保护自己的系统不被攻击者的侵入,但是系统非常庞大,这对你来说恐怕有些勉为其难了。Tripwire能够为你提供帮助,它不是为了抵御攻击者设计的,然而它能够帮助你判断系统的一些重要文件是否被攻击者修改。1992年,还在Purdue大学COAST实验室的 Gene H.Kim和Eugene H. Spafford开发了Tripwire。它们的目的是建立一个工具,通过这个工具监视一些重要的文件和目录发生的任何改变。1997年,Gene Kim和W.Wyatt Starnes发起成立了Tripwire公司。他们成立这个公司的目的之一是发布一个能够用于更多平台的商业升级版本。Tripwire3的商业版本非常昂贵(这客观上促使aide的诞生)。
但是,到了2001年3月,情况发生了变化。Tripwire公司发布了Linux下的开放源码版本Tripwire-2.3.1,这个版本使用GPL作为许可证,代码是基于商业版的Tripwire-2.x。这无疑是一个好消息,最新的Redhat 7.x就包含了Tripwire-2.3.1的RPM软件包。
在1992年,Tripwire开发之初,只有很少的UNIX安全工具。
COPS (Computer Oracle and Password System)是一个能够支持很多UNIX平台的安全工具集。自从1989年,就开始自由分发,它使用CRC(循环冗余校验)监视系统的文件。但是,COPS有很多不足,例如:它不能监视文件索引节点(inode)结构所有的域。
TAMU是一个脚本集,以和COPS相同的方式扫描UNIX系统的安全问题。TAMU通过一个操作系统的特征码数据库来判断文件是否被修改。不过,它不能扫描整个文件系统,而且每当操作系统升级和修补之后,需要升级自己的特征码数据库。
Hobgoblin使用一个模板来检验文件系统,Hobgoblin运行时,会把系统文件和自己的数据库进行对比,以此来判断系统文件是否被修改。然而,如果文件系统改变,却没有办法对它的数据库进行升级。
ATP能够做一个系统快照并建立一个文件属性的数据库。它使用32位CRC和MD校验文件,而且每当检测到文件被修改,它会自动把这个文件的所有权改为root。和COPS、TAMU以及Hobgoblin相比,这个特征是独一无二的。
但是,以上这些工具,都不能提供足够的能力和移植性用于完整性检查。
Tripwire配置
Tripwire从一个配置文件中读取你想要监视的文件和目录。其自由版本和商业版本的配置文件是不同的。旧版本的自由版配置文件叫作tw.conf;而商业版和新版自由版(2.3.1)的配置文件是twpol.txt。不过,不要依赖其原始的配置文件,因为它的原始配置文件适用于所有Tripwire支持的操作系统,不一定能够满足的的安全要求。例如,其默认的配置就不能监视系统中的SUID和SGID文件,而这对于你的系统安全是非常重要的,因此,你需要自己修改配置加入对这个项目的监视。使用如下命令可以找出系统中的所有SUID文件:
find / -type f -perm -4000 -print
以下命令可以找出系统中的所有SGID文件:
find / -type f -perm -2000 -print
现在,你需要把以上命令找出的SUID和SGID文件加入到Tripwire的配置文件(自由版)/策略文件(商业版)。除此之外,最好把所有用户home目录下的初始文件也纳入监视的范畴。主要包括以下文件(这里是以笔者的Redhat Linux7.2为例):
.bashrc、.profile、.bash_profile、.cshrc、kshrc、.login等
bash、csh以及ksh登录之后的初始化命令或者脚本,根据自己的情况灵活决定。:)
.forward
告诉/usr/lib/sendmail把邮件转发到某些地址。
.netrc
FTP初始化命令和宏,可能保存明文口令。
.rhosts
可以使用rsh登录到本帐户的远程主机名。
.xinitrc、.Xauthority、Xdefault等
X窗口系统的一些重要文件。
例如,你可以使用下面的命令找出系统中所有的.bashrc文件:
find / -name `.bashrc -print
在找出所有帐户的重要文件之后,你就可以把它们加入到Tripwire的配置文件或者策略文件了(下面我们将以开放源码的Tripwire-2.3.1进行讨论)。在创建Tripwire的特征码数据库之前,还有一件事情要做,就是检查某些重要文件的权限是否恰当,比如:.netrc和.rhosts的权限应该是600,这样可以禁止其它用户对这些文件的访问。
下面在创建Tripwire特征码数据库之前,我们大体了解一下Tripwire支持的特征码函数。所谓特征码函数就是使用任意的文件作为输入,产生一个固定大小的数据(特征码)的函数。入侵者如果对文件进行了修改,即使文件大小不变,也会破坏文件的特征码。因此,这些函数可以用于数据完整性检测。而且这些特征码函数一般是单向的。Tripwire-2.3.1版本支持如下特征码例程:
MD5
RSA Data Security公司提出,产生128位特征码的消息(message)算法。
Snefru
Xerox安全散列函数
MD4
RSA Data Security公司提出。利用32位RISC架构的消息算法。
MD2
RSA Data Security公司提出。产生128位特征码的消息算法。
SHA
安全散列算法(Secure Hash Algorithm)
Haval
128位message-digest算法。
CRC-16
16位循环冗余校验码
CRC32
32为循环冗余校验码
在Redhat7.2中包含了Tripwire-2.3.1的RPM包,其默认的策略文件是针对Redhat的缺省安装的。如果你使用的其它发布或者非缺省设置,就需要修改Tripwire的默认策略文件(/etc/tripwire/twpol.txt)。一个策略文件大体可以分为:全局变量定义和规则定义两个部分。Redhat7.2中默认的策略文件还把策略规则分成了更小的部分:文件系统和磁盘管理程序(File System and Disk Administration Programs)、内核管理程序(Kernel Administration Programs)、网络程序(Networking Programs)、系统管理程序(System Administration Programs)、硬件设备控制程序( Hardware and Device Control Programs)、系统信息程序(System Information Programs)、应用程序信息程序(Application Information Programs)、shell相关程序(Shell Related Programs)、操作系统工具(OS Utilities )、工具符号连接(Critical Utility Sym-Links)、临时目录(Temporary directories)、局部文件(Local files)、系统启动文件(Critical System Boot Files)、配置文件(Critical configuration files)和设备(Critical devices)。用户可以根据自己实际情况进行适当的剪辑。下面我们使用一个简单的策略文件,来介绍Tripwire的配置:
# Critical configuration files
(
# rulename = "Critical configuration files",
severity = 100
)
{
/etc - $(ReadOnly) (rulename="/etc - critical config files") ;
/etc/default - $(ReadOnly) (rulename="/etc/default - critical config files") ;
/etc/inittab - $(ReadOnly) (rulename="/etc/inittab - critical config files") ;
/etc/hosts - $(ReadOnly) (rulename="/etc/hosts - critical config files") ;
/etc/xinetd.conf - $(ReadOnly) (rulename="/etc/xinetd.conf - critical config files");
/etc/protocols - $(ReadOnly) (rulename="/etc/protocols - critical config files") ;
/etc/services - $(ReadOnly) (rulename="/etc/services - critical config files") ;
/etc/xinet.d - $(ReadOnly) (rulename="/etc/xinet.d - critical config files") ;
下面详细解释一下第一条规则。ReadOnly变量是这个软件的一个预定义变量。这个变量会向Tripwire传达以下信息:
检查文件(这里的文件是广义的)的如下属性
权限、索引节点号、连接数、拥有者的用户ID、拥有者的组ID、大小、类型、修改时间戳、索引节点的设备号、分配的块数、CRC-32特征码、MD5特征码。
忽略文件的如下属性
设备的设备号、访问时间戳、索引节点的创建/修改时间戳、文件的增长、SHA特征码、Haval特征码、
rulename(规则名)关键词定义的是本规则的的名字,每条规则的名字都是唯一的。这个关键词定义的信息会在报告文件中作为描述显示出来。
使用
初始化
了解了上面的知识,下面你可以根据自己的系统情况编辑/etc/tripwire/twpol.txt文件。然后运行/etc/tripwire/twinstall.sh(这个脚本是RedHat7.2,Tripwire-2.3.1RPM包自带的一个安装脚本)进行第一步的设置:
#cd /etc/tripwire/
#./twinstall.sh
....
Creating key files...
Enter the site keyfile passphrase:
Verify the site keyfile passphrase:
Enter the local keyfile passphrase:
Verify the local keyfile passphrase:
这两个密码被加密后,保存在/etc/tripwire/localhost-local.key和/etc/tripwire/site.key文件中。这两个密码分别用来限制用户对tripwire配置文件读取以及改写特征码数据库文件。注意:Tripwire的配置文件、策略文件和特征码数据库文件是以二进制方式保存的无法阅读。如果要改