如何设置和使用 Tripwire

作者:Marco Fioretti

Tripwire 是一种入侵检测系统 (IDS),它可以持续自动地监控您的关键系统文件和报告,以防它们被黑客破坏或修改(或因失误)。它允许系统管理员立即知道哪些内容被破坏并进行修复。

Tripwire 首次运行时,它会将所有选定文件的校验和、确切大小和其他数据存储在数据库中。后续运行会检查每个文件是否仍然与数据库中的信息匹配,并报告所有更改。Tripwire 最初于 1992 年发布。如今,有几个程序共享这个名称,其中一个是 GPL 许可的,两个是专有的。本文的其余部分仅讨论 GPL 版本 2.3.1。

何时是开始使用 Tripwire 的正确时机?

IDS 工具是特殊的工具,Tripwire 也不例外。即使您不需要成为编程专家才能使用此软件包,但实际上充分利用它需要一些耐心、注意力和手动工作。

首先,使用 Tripwire 是盲目地在每个提示符下按 Enter 键绝对不是明智之举的情况之一。帮自己一个忙,至少查看 Tripwire 程序随附的良好文档的相关部分(稍后会详细介绍)。

其次,真正使用 Tripwire 只有在全新安装系统后的首次启动时安装、完全配置和初始化 Tripwire,并在连接到互联网或进行任何其他操作之前,才有意义。一次攻击就足以安装后门。如果在发生此类事件后安装和使用 Tripwire,您所能做的就是保证后门像黑客安装它的那天一样敞开!当然,即使您现在不想或不能重新安装所有内容,也没有什么能阻止您下载软件包并熟悉它。

以下是如何向 Tripwire 解释什么对您重要。Tripwire 发行版包括几个二进制文件、相应的 man 页面和两个控制程序行为的文件,为了简洁起见,我们将它们称为 Tripwire 系统文件。第一个文件 (/etc/tripwire/twcfg.txt) 定义了几个变量,用于通用配置,甚至对于同一 LAN 上的所有计算机可能都是相同的。其内容包括 Tripwire 数据库的位置,以及关于最小化口令在内存中保留的时间或冗余报告数量的指令。

其他重要参数包括交互式使用时的编辑器(默认为 vi)以及应如何通过电子邮件发送报告。twconfig man 页面中描述了所有可能的变量的完整语法和含义。

另一个系统文件 (/etc/tripwire/twpol.txt) 包含策略,该策略声明了所有必须监控的对象以及当其中一个对象丢失或更改时该怎么做。与配置文件不同,策略可能(并且几乎肯定会)因同一网络上的几台计算机而异。例如,防火墙上安装的软件包将与开发工作站或办公室笔记本电脑上的软件包不同,即使使用相同的 GNU/Linux 发行版也是如此。

创建良好的 Tripwire 策略(以及通常为了减轻系统管理员的生活压力)的第一件事是在启动之前尽可能删除不需要的程序。接下来,为了使您尽可能快速有效地使用 Tripwire,您的策略必须涵盖您真正需要监控的所有内容,而不是其他内容。这至少包括所有系统二进制文件和库目录(即 /bin、/sbin、/usr/bin、/lib 等的内容)以及 /etc/ 中的相应配置文件。与 Tripwire 一起分发的示例 twpol.txt 文件包含 任何 可能在 UNIX 系统上的内容,因此它保证会抱怨您从未安装或放置在不同位置的程序。这是一个您可能会看到的示例

### Warning: File system error.
### Filename: /dev/cua0
### No such file or directory
### Continuing...

有一种安全简便的方法,即使可能很漫长且乏味,可以消除此类虚假警告。只需多次运行下面描述的初始配置过程。每次扫描报告,并注释掉生成误报的检查,直到它们全部消失。当然,在开始之前,先执行配置任何新软件包之前应该执行的操作——即制作原始文件的副本

cp -p twcfg.txt twcfg.txt.orig
cp -p twpol.txt twpol.txt.orig

Tripwire 策略是两种规则的序列。普通规则定义了必须检查文件或目录树的哪些属性,格式如下

object_name    ->    property_mask (rule attribute = value);

property_mask 指定了必须检查或忽略哪些属性。属性提供了额外的特定于规则的信息,例如规则严重性或如果违反该规则应通知谁。另一种规则是停止点,它告诉 Tripwire 不要扫描特定的文件或目录。Tripwire 还理解几个用于策略的条件解释、诊断和调试的指令。要了解所有详细信息,请打印并学习 twpolicy man 页面。

初始配置

在从二进制软件包或编译源代码将所有内容放置在正确的目录中之后,作为 root 用户要采取的第一个操作是生成两个健壮的——即难以猜测的——口令。第一个口令(站点口令)用于加密和签名 Tripwire 系统文件。第二个口令(本地口令)是启动 Tripwire 二进制文件所必需的。

理论上,Tripwire 发行版应包含一个 /etc/tripwire/twinstall.sh 脚本,该脚本应提示用户输入口令和其他信息,然后执行以下所有步骤。在撰写本文时,本文测试的 Fedora Core 4 的 Tripwire 2.3.1 RPM 软件包和几个在线教程仍然说要使用该脚本,但安装后它只是不存在。无论如何,执行这些任务的实用程序是 twadmin。因为它有一个完整的 man 页面,并且如果您想在安装后更改密钥,无论如何都应该使用它,所以我们只展示它的工作原理。上述操作使用以下命令执行

twadmin --generate-keys --site-keyfile my_home_key
 ↪--site-passphrase 'Hello LJ readers'
twadmin --generate-keys --local-keyfile my_local_key
 ↪--local-passphrase 'Penguins are cool'

这会将两个密钥分别编码在 my_home_key 和 my_local_key 文件中。记住在运行 twadmin 之前 将这两个名称复制到 twcfg.txt 文件中

SITEKEYFILE	=/etc/tripwire/my_home_key
LOCALKEYFILE	=/etc/tripwire/my_local_key

存储口令后,必须按以下方式加密配置文件

twadmin --create-cfgfile --cfgfile twcfg.enc
 ↪--site-keyfile my_home_key twcfg.txt
Please enter your site passphrase:
Wrote configuration file: /etc/tripwire/twcfg.enc

创建策略的二进制版本的步骤类似

twadmin --create-polfile --cfgfile twcfg.enc --polfile
 ↪twpol.enc --site-keyfile my_home_key twpol.txt

与前一个命令相比,不同之处在于现在必须将加密的配置文件传递给 twadmin。这两个文件必须加密的原因是,与纯文本格式相比,Tripwire 可以更容易地发现它们是否已损坏。为了直接读取此类文件,您需要(除了口令之外,显然)twadmin 的 -print-cfgfile 或 --print-polfile 选项。

数据库创建

一旦口令和系统文件都设置好,就该进入文档中所谓的数据库初始化模式了

tripwire --init --cfgfile twcfg.enc --polfile tw.pol
 ↪--site-keyfile my_home_key --local-keyfile my_local_key

默认情况下,结果存储在 /var/lib/tripwire/YOURHOSTNAME.twd 中。路径和名称可以在 twcfg.txt 中更改,也可以作为命令行选项给出。最终,如果一切顺利,您将看到此消息

Wrote database file: /var/lib/tripwire/YOURHOSTNAME.twd
The database was successfully generated
定期检查

一旦加密的系统文件、口令和系统完整快照可用,Tripwire 终于可以执行我们真正关心的唯一一件事——即定期检查我们计算机的完整性。这通常通过使用此开关将程序作为 cron 作业运行来完成

tripwire --check

请注意,只是为了允许安全、自动使用,程序在这种方式启动时不需要口令。因此,无需在任何地方以纯文本形式写入它们。完整性报告既打印到 STDOUT(因此可以通过电子邮件发送给系统管理员),也保存在配置文件中 REPORTFILE 变量指定的位置。此操作应执行的频率取决于系统的关键程度以及它暴露于外部攻击的频率。虽然公司防火墙应每天检查,但对于其后面的部门打印服务器或常规桌面,每周检查可能就足够了。

图 1 显示了 Tripwire 报告的示例。它告诉您,对于策略中定义的每个规则,哪些相应的文件被添加、更改或修改。命令行选项可用于仅检查策略文件的特定部分,或仅检查某些文件。例如,当系统中没有修改任何内容,但怀疑某些特定磁盘或分区已损坏时,这可能很有用。

How to Set Up and Use Tripwire

图 1. Tripwire 报告示例

完整性检查过程也可以是交互式的。添加 -interactive 开关会导致 Tripwire 在检查后打开编辑器,以允许用户声明应在 Tripwire 数据库中永久更新哪些文件。这是下面描述的更新模式的手动替代方案。

更新策略

在任何系统更改之后,无论是由于软件或配置文件的安装、更新或删除,都必须更新纯文本策略文件并重新生成二进制数据库。否则,任何后续的 Tripwire 检查都将毫无意义。因此,在必要时运行此命令

tripwire -update-policy -twrfile
 ↪a_previous_integrity_report.twr

由于它非常关键,因此此操作需要您的本地和站点口令。以这种方式启动时,Tripwire 会将指定完整性检查后发生的任何更改检测为违规。在这种情况下,只有当用户明确告知程序以低安全模式运行时,才可能对策略进行实际更新,从而忽略此类违规。相应的选项是 -Z low,并在 Tripwire man 页面中详细解释。

其他技巧和窍门

强烈建议在开始安装之前阅读 twfiles 和 twintro man 页面,其中包含 Tripwire 套件的所有文件和程序的简短且最新的概述。如果使用 -help 选项调用实际的 Tripwire 二进制文件,它会列出所有可用选项。与许多 FOSS 程序一样,此软件包的所有实用程序都接受其命令行选项的短格式和长格式。

例如,tripwire -check也可以写成tripwire -m c。当一个人已经了解 Tripwire 并且必须以交互方式使用它时,第二种形式更快,但在脚本、文档或教学目的中建议使用显式命令。-v 选项将任何 Tripwire 命令置于详细模式。普遍的看法还表明,Tripwire 系统文件的二进制和文本版本都应存储在单独的计算机、写保护软盘或 USB 驱动器上。

请记住,坚定的黑客要做的第一件事之一就是用她自己的副本替换 那些 文件,以隐藏任何攻击痕迹。Tripwire 定期放置在 /var/lib/tripwire 中的报告采用二进制、可选签名格式。因此,它们无法直接从提示符读取,甚至无法通过 shell 脚本直接处理以进行自动比较或其他目的。解决方案是使用 twprint 命令,该命令附带自己的完整 man 页面,如下例所示(请注意,您必须传递二进制配置文件才能使其工作)

twprint --print-report --cfgfile twcfg.enc --twrfile
 ↪/var/lib/tripwire/report/my_tripwire_report

可以使用 siggen 实用程序直接检查每个二进制文件的数字签名,该实用程序也有自己的 man 页面

/usr/sbin/siggen /etc/tripwire/twcfg.enc
---------------------------------------------
Signatures for file: /etc/tripwire/twcfg.enc

CRC32               Dmjk1z
MD5                 DTn311w6Wx3+7TXv7SHPjA
SHA                 D5N1Pv4biCnd14igf/anGM3pvVH
HAVAL               BEJmfzpcA/Txq5nf9kgsVb

Tripwire 竞争对手

Tripwire 当然不是 GNU/Linux 系统的唯一 IDS 解决方案。下面简要介绍了其更受欢迎的竞争对手。珀杜大学网页上列出了同一类别中的其他类似软件包(请参阅在线资源)。

AIDE:高级入侵检测环境被提议作为 Tripwire 所做的一切以及其他一些事情的免费软件替代品。完整性数据库是通过在配置文件中编写正则表达式来定义的。除了 MD5 之外,还可以添加几种其他算法来验证文件完整性。如今,AIDE 已经支持 sha1、tormd160、tiger、haval 和其他一些算法。

Tripwire for Servers:这是 Tripwire, Inc. 的专有产品,该公司由最初的 Tripwire 开发人员创建。它面向 Linux、UNIX 或 Windows 服务器组的集中监控。

Tripwire Enterprise:Tripwire, Inc. 的旗舰产品,用于自动监控多达数千台服务器、桌面、目录服务器和网络设备的混合网络。从 5.2 版本开始,Tripwire Enterprise 包括通过 Web 界面的集中管理,以及可自定义的报告和控制。

致谢和展望

开源 Tripwire 项目已经沉寂了一段时间。幸运的是,就在本文截稿日期前几天,2.4.0.1 版本在 SourceForge 上发布,您很可能会在阅读本文时找到为您发行版打包的版本。除了源代码 tarball 之外,还可以下载在 Gentoo 2005 发行版上构建的 x86 静态二进制文件。功能上没有明显的更改,因此本文中解释的所有内容仍然适用。另一个好消息是,这是第一个发布版本,其中旧的构建系统已被标准的 autoconf/configure 环境取代。不幸的是,由于 Fedora Core 4 上的一些 gcc 4 兼容性问题,无法及时测试此版本。但是,一旦完成此移植,应该更容易添加新功能并为所有现代 GNU/Linux 发行版打包开源 Tripwire。欢迎您加入这项工作,并在开发人员邮件列表中报告错误(请参阅资源)。感谢 Paul Herman 和 Ron Forrester 发布这个新版本以及他们花时间回答我的问题。

本文资源: /article/8950

Marco Fioretti 是一位硬件系统工程师,对自由软件作为 EDA 平台以及作为 RULE 项目的现任领导者,作为高效桌面感兴趣。Marco 与家人住在意大利罗马。

加载 Disqus 评论