使用 Tripwire 绊倒入侵者

作者:Kevin Fenzi

您运行最新的 Linux 内核,阅读 Linux-security-alert 邮件列表,并在安全补丁发布后立即安装。您的 Linux 机器是安全的。对吗?

唉,情况并非如此乐观。即使您安装了最新的补丁,可能已经有人在您不知情的情况下入侵了您的机器并替换了您的系统二进制文件。在这种情况下,修复让他们入侵的漏洞只是您问题的一部分。即使 Linux 社区在发现安全漏洞和有人提出修复方案方面反应迅速(毕竟我们有源代码),但总会存在有人入侵您机器的机会窗口。

您还能做些什么来关闭这个窗口? 您如何知道何时有入侵者闯入? Tripwire 登场了。 Tripwire 的概念非常简单。 它获取所有重要文件的校验和; 然后稍后,您可以对照 Tripwire 数据库检查您的文件,并确定是否发生了任何更改或篡改。 当前版本的 Tripwire (1.2.2) 自 94 年 8 月以来就未更新过,因此它是一个非常稳定的程序。 它不太可能出现问题。

一些破解工具被设计用于修改或替换系统二进制文件(login、telnetd、vmlinuz、ps、ls 等),然后使它们看起来与以前相同。 通常,这些方法都很粗糙,仅包括修改文件的日期和大小(恢复到其原始值)。 粗略一看,一切都很好。 一些入侵者工具甚至试图使修改或替换后的二进制文件与简单的校验和匹配。 例如,更改二进制文件,使其通过简单的测试,例如

cmp /bin/login /cdrom/untouched/bin/login

为了确保这种情况不会发生,Tripwire 能够使用各种校验和算法。 Tripwire 自带:RSA Data Security, Inc. MD5、MD4 和 MD2 消息摘要算法、Snefru(Xerox 安全哈希函数)、SHA(安全哈希算法)和 Haval 代码。 Tripwire 的作者建议 MD5 对于大多数校验和来说已经足够,关键文件也可以使用 Snefru 进行检查。 使用像 MD5 这样的一个校验和进行检查已经相当不错了,但是想象一下创建一个可以通过 2 或 3 个(或更多)不同校验和的二进制文件或文件的难度。 很少有系统入侵者有时间和资源来进行尝试。

使用 Tripwire 数据库,您可以检查所有关键文件是否被篡改。 现在,您如何知道是否有人篡改了您的 Tripwire 二进制文件或 Tripwire 数据库? 毕竟,如果入侵者可以修改您的 Tripwire 数据库,您就又回到了原点。

存在几种不同的方法。 最简单,我认为对于大多数有安全意识的 Linux 用户来说最好的方法,是将 Tripwire 和 Tripwire 数据库放在只读软盘上。 由于大多数 Linux 机器都有软盘驱动器,并且很少一直使用,因此这是一个很好的选择。 Tripwire 的作者还建议,如果您非常担心,可以打印出 Tripwire 数据库。 很难想象入侵者能够修改他们在闯入之前打印的文件。 其他可能的方案包括:从另一台更安全的机器只读远程挂载 Tripwire 二进制文件和数据库,将其放在写保护的 Zip 磁盘上,甚至获得一个旧的、小型硬盘驱动器,该驱动器已跳线为硬件启用只读,并将其放在该驱动器上。 想法是将它放在一些您可以在硬件上设置为只读的介质上。 将 Tripwire 放在入侵者可以搞乱它的地方对您没有任何好处。 如果您要检查的机器位于许多人可以访问的地方,请将您的 Tripwire 软盘放在安全的位置,并在您想要检查文件时才将其带到机器上。 您也可以从远程、更安全的机器上通过 NFS 挂载它,该机器带有软盘。

好的,您已决定安装它。 您如何进行安装? 好吧,获取最新的 Tripwire 源代码(Tripwire 1.2 补丁级别 2)。 它应该可以在大多数 Linux 发行版下正常编译。 我在 Red Hat 4.0 系统上开箱即用编译它时没有遇到任何问题。 阅读 README 文件以快速了解概况,如果您想要更多详细信息,请查看 PostScript 设计文档。 还有一个 Tripwire RPM 可用,但我建议不要使用它,因为您无法指定应将其安装在何处。

在编译之前,选择您的 Tripwire 二进制文件和 Tripwire 数据库将驻留的目录。 Tripwire 硬编码这些路径以防止篡改。

Tripwire 编译完成后,将您的机器切换到单用户模式。 我知道,您不想失去那么多个月的正常运行时间,但您必须确保您是系统上唯一的用户,并且没有人可以远程连接到您的机器以进行篡改。 如果您特别担心,您可能会考虑在安装 Tripwire 之前全新安装您的系统,以确保所有二进制文件都是干净的。 在单用户模式下,挂载要放置 Tripwire 和 Tripwire 数据库的介质。 (这次以读/写方式挂载它,以便您可以将 Tripwire 复制到它上面。)

安装 Tripwire。 接下来,确定哪些二进制文件对于 Tripwire 检查很重要。 检查经常更改的文件(用户文件)几乎没有用处。 Tripwire 主要用于您的重要系统二进制文件。 我的 Tripwire 配置检查:/etc、/sbin、/bin、/usr/bin、/lib/vmlinuz; 它还检查 /dev 中的一些文件。 即使这些文件也会比您想象的更频繁地更改。 如果您选择太多,您的 Tripwire 报告将充满命中,以至于您无法注意到真正的入侵。

在您为要更改的目录设置好 tw.config 文件后,就该创建新的、干净的 Tripwire 数据库了。 输入

tripwire -init

放松一会儿。 Tripwire 需要相当长的时间来生成所有校验和。 仅在上面提到的所有目录上使用默认的 MD5 校验和就需要我的双 166MHz Pentium 大约 5 分钟(更快的磁盘会有所帮助)。

在 Tripwire 完成创建数据库后,移除您的 Tripwire 介质并将其设置为只读(跳线、写保护槽口等)。 然后,将您的机器恢复到完全多用户模式并挂载您的 Tripwire 介质。

现在,为了确保一切正常,请尝试更改 Tripwire 数据库中列出的目录中的一个文件。 运行 Tripwire 并确保它捕获到它。 它将输出一个非常好的、详细的报告,显示哪些文件已更改以及它们以何种方式更改(修改时间、校验和等)。

我已将我的 Tripwire 设置为每晚在 cron 作业中运行并将结果邮寄给我。 您可以让您的也这样做,或者仅在您怀疑出现问题时运行它。 我建议您经常运行它。 您永远无法知道自己何时可能受到威胁。 每天检查一份简短的 Tripwire 报告是对安全的一小笔投资,但可以带来真正的回报。 当您认为可能有理由时,您仍然可以重新运行 Tripwire。 (请记住,入侵者可能会修改来自 cron 作业的邮件,使其看起来好像什么都没发生。) 因此,当我没事做时(例如,在那些漫长的技术支持电话中“等待”时),我也会定期运行 Tripwire。

您会发现,随着您更新软件包和配置文件,您的 Tripwire 数据库会标记越来越多的文件; 定期地,您需要将您的机器重新切换回单用户模式,以读/写方式重新挂载您的 Tripwire 介质,并使用不同的命令更新您的数据库

tripwire -interactive

确保您知道现在每个文件不同的原因。 如果您有任何不确定,请不要更新数据库中的该文件; 而是用您发行站点或 CD-ROM 上的新副本替换它,然后重新运行 Tripwire。

就这么简单。 现在您有了一个很好的检测器,能够告诉您何时有人篡改了您的文件,并且当您知道您的 Linux 机器是网络上最安全的一台时,您会感到安心。

Kevin Fenzi 自从看到他的第一个破解程序以来,就对 Unix 安全性着迷。 他目前从事多种 Unix 版本的编程和咨询工作,但他最喜欢的是家里的 Linux 机器。 可以通过电子邮件 kevin@scrye.com 与他联系。

加载 Disqus 评论