熟练使用 Tripwire

使用 Tripwire 监视文件更改

Tripwire® 是一种入侵检测系统,它根据系统管理员提供的策略来监视文件或目录更改。

David Tansley, 系统管理员, Ace Europe

//ibm.com/developerworks/i/p-dtansley.jpgDavid Tansley 是一位自由作家。他有 15 年 UNIX 系统管理经验,最近 8 年使用 AIX。他喜欢打羽毛球和观赏一级方程式赛车,但是最喜欢与妻子一起开着 GSA 摩托车旅行。



2012 年 3 月 15 日

简介

开源的 Tripwire® 是一种文件完整性检查器软件包,已经面世很多年了,我在 Linux® 中多次使用过它,但是直到最近才在 AIX® 中使用。主要原因如下:

  • 使用 gcc AIX 版本进行编译很麻烦。
  • 我喜欢使用 AIX 内置的审计服务。

但是,由于现在有一个 Tripwire rpm 用于 AIX,所以我将它用于我们的一些 AIX 机器。Tripwire 并不为基于文件更改的入侵检测提供完整的解决方案,但是若同时运行 AIX 审计的话,它可以提供坚实的安全策略。根据您在主策略文件中提供的对象,Tripwire 监视系统中文件和目录的更改。这些更改可能是(但不限于)改变了以下方面:

  • inode
  • 时间戳
  • 文件大小
  • 文件权限和所有权属性
  • 哈希值
  • 文件类型

Tripwire 报告自它上次运行以来发生的更改,您可以将之与以前的运行报告进行比较。如果文件已更改、删除或添加,那么需要系统管理员的进一步调查,判断是正当更改还是一些应用程序或用户的强迫更改。

与其他入侵检测系统 (IDS) 相比,Tripwire 确实有其自身的缺点。但是,由于它是开源的,这些缺点很快会被忘记。也存在一种商业 Tripwire 产品,但是本文中我只关注这个开源版本。我也在对 AIX 7.1 使用 Tripwire 版本 2.4.1。参见 参考资料 部分,查看到哪里下载 Tripwire rpm。下载之后,请确保安装了下面的 rpm:

libgcc-4.6.1-1.aix7.1.ppc.rpm  
libstdc++-4.6.1-1.aix7.1.ppc.rpm
(openssl-1.0.0d-1.aix5.1.ppc.rpm)

Tripwire 也需要 openssl;大多数 AIX 机器应该已经安装了 openssl。如果您使用的是 SSH,请确保其版本至少是 0.9.8。利用下面的命令检查版本:

# openssl
OpenSSL> version
OpenSSL 0.9.8m 25 Feb 2010
OpenSSL> quit

接下来,安装 Tripwire:

#  rpm -ivh tripwire-2.4.2-1-1.aix5.1.ppc.rpm
tripwire                    ##################################################

安装之后,Tripwire 二进制文件就位于 /opt/freeware/sbin 中。

tripwire-check           
atcadmin
tripwire                 
tripwire-setup-keyfiles  
reprint

策略文件位于 /etc/tripwire 中。twcfg.txt 文件确定 Tripwire 使用的变量(例如 tripwire 报告文件的位置、e-mail 地址、报告级别)。twpol.txt 策略文件告诉 Tripwire 监视什么样的文件。

第一步是调整策略文件,确定监视什么样的文件。随同 Tripwire 发布的 twpol.txt 文件是为 Linux 发行版准备的,而您想要确保它包括您想要监视的文件。如果忘了调整这个策略文件,就会报告一个 “文件不存在” 错误。生成特定于您自己的安全标准策略的策略文件很快。本文将演示一个初始的基本策略是如何生成的。我不会讨论 Tripwire 的所有特性,比如严重级别和 email 条件,但是要介绍 Tripwire 的基本用法,以及使用自生成的策略文件来满足您的需要和文件侵害报告要求,达到熟练使用 Tripwire。


配置 Tripwire

twcfg.txt 的内容显示如下。由于 Tripwire 提出目录权限可能不适合于您的 AIX 机器,所以此文档建议进行更改,我同意了:

LOOSEDIRECTORYCHECKING = false

LOOSEDIRECTORYCHECKING = true

您可能也想更改 DBFILE 和 REPORTFILE 的位置,以适合您的位置标准:

ROOT                   =/opt/freeware/sbin
POLFILE                =/etc/tripwire/tw.pol
DBFILE                 =/var/lib/tripwire/$(HOSTNAME).twd
REPORTFILE             =/var/lib/tripwire/report/$(HOSTNAME)-$(DATE).twr
SITEKEYFILE            =/etc/tripwire/site.key
LOCALKEYFILE           =/etc/tripwire/$(HOSTNAME)-local.key
EDITOR                 =/usr/bin/vi
LATEPROMPTING          =false
LOOSEDIRECTORYCHECKING =false
MAILNOVIOLATIONS       =true
EMAILREPORTLEVEL       =3
REPORTLEVEL            =3
MAILMETHOD             =SENDMAIL
SYSLOGREPORTING        =false
MAILPROGRAM            =/usr/sbin/sendmail -oi -t

如果您的主机名不是可解析的,那么必须将您的本地主机名告诉给 Tripwire。编辑 twpol.txt 文件;大约在第 64 行,有一个针对下面内容的项:

HOSTNAME=;

将您的主机名附加在 '=' 后面。例如,我的 AIX 机器的主机名是 rs6000,所以更改如下:

HOSTNAME=rs6000;

保存并退出文件。

生成密钥

下一个任务是使用密码为 Tripwire 生成一个站点(site)密钥和一个本地(local)密钥。这可以帮助保护 Tripwire 免受未经授权的访问。本地密钥用于数据库文件,站点密钥用于配置文件和策略文件。您需要记住自己给出的密码,因为您更新策略文件或数据库时需要输入这些密码。下面的命令生成这两个密钥。为了演示,我将展示我在整篇文章中所使用的密码:

# /opt/freeware/sbin/tripwire-setup-keyfiles

----------------------------------------------

Creating key files...
Enter the site keyfile passphrase:rs6000
Verify the site keyfile passphrase:rs6000
Generating key (this may take several minutes)...Key generation complete.

(When selecting a passphrase, keep in mind that good passphrases typically
have upper and lower case letters, digits and punctuation marks, and are
at least 8 characters in length.)

Enter the local keyfile passphrase:master
Verify the local keyfile passphrase:master
Generating key (this may take several minutes)...Key generation complete.

----------------------------------------------
Signing configuration file...
Please enter your site passphrase:
Wrote configuration file: /etc/tripwire/tw.cfg

A clear-text version of the Tripwire configuration file:
/etc/tripwire/twcfg.txt
has been preserved for your inspection.  It  is  recommended  that  you
move this file to a secure location and/or encrypt it in place (using a
tool such as GPG, for example) after you have examined it.
Signing policy file...
Please enter your site passphrase:rs6000
Wrote policy file: /etc/tripwire/tw.pol.

密钥生成完之后,下面这些文件存在于 /etc/tripwire 中:

rs6000-local.key  tw.cfg            twcfg.txt
site.key          tw.pol            twpol.txt

查看上面的代码清单,我们现在有了以下附加的文件:

  • rs6000-local.key(加密本地密钥文件);
  • site.key(加密站点密钥文件);
  • tw.cfg(加密配置变量文件);
  • tw.pol(加密策略文件)。

此时,不需要在它的当前位置保留 twcfg.txt 和 twpol.txt 文件。提供密码进行解密,您可以通过一个 Tripwire 实用工具访问文件的加密版本。这在本文中有演示。

初始扫描

既然我们已经生成了密钥并提供了密码,就可以进行初始扫描了。使用加密 tw.pol 策略文件中的策略。前面提到,随同 Tripwire 发布的 twpol.txt 文件是为 Linux 系统准备的,指定了要检查什么样的文件。这个策略文件需要调整成适合您的 AIX 系统;您马上就会看到这是如何做到的。但是现在直接运行扫描,Tripwire 会生成校验和并记录文件的扫描属性。数据库也被创建并更新。预计这次运行会产生很多错误,但是这次练习让您对使用 Tripwire 的预期结果有了一个感性认识。

运行初始化时,会提示您输入密码(由于报告的错误太多,我对输出做了大量删减):

# /opt/freeware/sbin/tripwire --init
Please enter your local passphrase:master
Parsing policy file: /etc/tripwire/tw.pol
Generating the database...
*** Processing Unix File System ***
### Warning: File system error.
### Filename: /proc/ksyms
### A file or directory in the path name does not exist.
### Continuing...
### Warning: File system error.
### Filename: /dev/initctl
### A file or directory in the path name does not exist.
### Continuing...
...
...
Wrote database file: /var/lib/tripwire/rs6000.twd
The database was successfully generated.
#

为了正确工作,Tripwire 数据库必须总是存在;确保对它进行定期备份。很容易重新初始化数据库。

一旦初始化完成,Tripwire 就会报告数据库已经创建(注意,当前主机名是位于 /var/lib/tripwire/rs6000.twd 中的数据库文件名的一部分)。


策略文件

要定制策略文件以满足自己的需要,可以使用 Tripwire 检查模式来检查系统的完整性。当文件在策略文件中却不在系统中时,也会输出错误。预计清单会很长,所以将输出重定向到日志文件以便进一步查看可能会比较好:

 # /opt/freeware/sbin/tripwire --check | grep -w "Filename:"

以上命令的一部分输出为:

     Filename: /bin/ypdomainname
     A file or directory in the path name does not exist.
     Filename: /bin/tcsh
     A file or directory in the path name does not exist.
     Filename: /usr/sbin/fixrmtab
     A file or directory in the path name does not exist.
     ...      ...

要调整 Tripwire 策略文件监视什么样的文件,您有两种选择:

  1. 进入策略文件,并删除那些显示为不存在的文件名。
  2. 重新开始添加您自己的文件项。

我喜欢后一种方式。那样,我只监视我想要监视的。在我们创建这些项之前,需要解释一下策略文件的基本格式。

策略文件的命令指令和对象很多,所以要确保阅读 twpolicy 的手册页。在此演示中,我只介绍并实现这些命令对象中的一些。Tripwire 能够监视下面清单 1 中包含的文件属性。

清单 1. 文件属性
a     Access timestamp
b     Number of blocks allocated
c     Inode timestamp (create/modify)
d     ID of device on which inode resides
g     File owner's group ID
i     Inode number
l     File is increasing in size (a "growing file")
m     Modification timestamp
n     Number of links (inode reference count)
p     Permissions and file mode bits
r     ID of device pointed to by inode
      (valid only for device objects)
s     File size
t     File type
u     File owner's user ID
C     CRC-32 hash value
H     Haval hash value
M     MD5 hash value
S     SHA hash value

附加的掩码也可以添加到属性中:

+	do compare attribute
-   ignore attribute

内置的对象

如果您查看了 Tripwire 随带的整个 twpol 文件,应该注意到对象已经定义。这些对象显示在下面 清单 2 中。使用 清单 1 中描述的属性来创建属性掩码。

清单 2. 掩码
Variable       Mask
Device =      +pugsdr-intlbamcCMSH ; # devices file 
Dynamic =     +pinugtd-srlbamcCMSH ; # directories that change
Growing =     +pinugtdl-srbamcCMSH ; # file that grow in size
IgnoreAll =   -pinugtsdrlbamcCMSH ;  # check nothing
IgnoreNone =  +pinugtsdrbamcCMSH-l ; # check everything except growing attribute 
ReadOnly =    +pinugtsdbmCM-rlacSH ; # read only
Temporary =   +pugt                  # temp files that might be removed

查看 清单 2 中的属性掩码 Temporary,我们可以看到这个 temporary 监视:

  • 权限(并比较权限)
  • 文件所有权
  • 文件组所有权
  • 文件类型

Tripwire 使用这些包含变量的属性掩码,使得指定监视任何给定文件的什么属性更为容易。但是,您可以定义自己的对象,我在本演示中会讨论这方面的内容。为了帮助跨平台共享,对象可以创建为匹配某个条件。总之,您可以为不同类型的文件指定将监视什么样的文件属性。

对象的格式是:

object_name  = [ mask ];

其中 object_name 是一个将被监视的文件类型的有含义的名称,而 mask 代表 清单 1 中所示的属性。

定义对象

如果我希望监视系统二进制文件,比如 reducevg 或 chfs,那么我需要知道跟这些文件以下方面相关的更改:

  • 权限
  • 符号链接
  • 组所有者
  • 文件所有者
  • 文件大小
  • 修改时间戳
  • MD5 哈希签名

所以,利用以上更改,通过使用 清单 1 中包含的属性信息,我可以生成一个叫做 SYSBIN(代表系统二进制文件)的对象。

SYSBIN =  +pngu+sm;

注意,在这个掩码中,我用加号 (+) 表明文件权限和文件大小应该与前一次 Tripwire 运行或快照进行比较。

每个要监视的文件或目录的格式是:

<directory/file-name> - > $(object_name)

使用对象 SYSBIN,策略文件中代表监视二进制文件 /usr/local/bin/pwgen 的项可以是:

/usr/local/bin/pwgen  -> $(SYSBIN);

如果想要使用对象 SYSBIN 监视 /usr/bin 目录,那么我应该具有:

/usr/bin -> $(SYSBIN);

上面目录中的任何修改,比如说附加新文件、删除在这个目录中创建的文件,都被标记为侵害。

对于动态文件(通常是日志文件),我们不必这么严格,因为文件大小总是在改变。例如,我可以使用下面的对象:

 SYSLOGS +p-lum

在这个对象中,我指定了只监视以下方面:

  • 权限
  • 忽略文件大小增长 ( -l)
  • 文件所有者
  • MD5 哈希签名

对于策略文件中用于监视 /var/adm/messages 日志文件的项,我应该具有:

/var/adm/messages - > $(SYSLOGS)

对于某些应用程序配置脚本,我可能想要至少监视以下属性:

  • 访问时间戳
  • 权限
  • 修改时间戳
  • 文件大小
  • 文件所有者
  • MD5 哈希签名

我可以使用下面的对象,称之为 APPCONF:

APPCONF a+pm+suM;

用于应用程序配置文件 /opt/dstage/Server/DSEngine/dsenv 的项可以是:

/opt/dstage/Server/DSEngine/dsenv - > $(APPCONF);

您无法扫描这样的文件系统,它已经具有另一个从基本安装点安装的文件系统(非 NFS 交叉安装),除非它被特意放在策略文件中。

例如,假设您想要监视 /opt,但是这个文件系统又具有另一个已安装的文件系统(叫做 /opt/myapp),并且是下面这样安装的:

/opt
/opt/myapp

Tripwire 会抱怨并报告:

The object: "/opt/myapp" is on a different file system...ignoring.

所以请确保您对所有想要扫描的文件系统都具有对应的项。

使用非变量对象

您并不总是必须使用对象变量,尽管它对于执行策略文件中的重复命令时比较容易。您可以指定属性(通常叫做属性掩码)代替对象。例如,要监视 /etc/security 目录,可以在该目录中递归扫描,查找以下方面的更改:

  • 权限
  • 文件所有者
  • 组所有者

您可以使用:

/etc/security   -> +pug  (recurse=-1);

其中 -1 表示进行一次递归扫描;0 表示只扫描目录的 inode。

当指定了将扫描的目录时,如果向该目录添加新文件,或者删除或更改该目录中的文件,那么 Tripwire 会将之标记为侵害。


让 Tripwire 忽略文件

要忽略目录或文件(这里我是指 Tripwire 不扫描它们),格式是:

! <object_name>;

其中 object_name 可以是一个预先定义的变量,或者是文件名或目录。例如,要通知 Tripwire 不扫描 /opt/dump 和文件 /opt/freeware/goodies/myjob,您可以具有:

!/opt/dump;
!/opt/freeware/goodies/myjob;

以前有一个扫描 /etc/security 的例子。但是,在这个目录中,最新的日志文件具有最新的登录时间。如果您不想这个目录被扫描,那么您可以放入下面的项: !/etc/security/lastlog;

现在 Tripwire 扫描 /etc/security,但是将忽略最新的日志文件。


解密策略文件

需要编辑策略文件时,不要养成将现有策略备份文件复制回来进行编辑的习惯。总是使用当前的策略文件。这意味着您首先需要从 Tripwire 解密它。

要生成以前创建的当前加密策略文件的文本版本,可以使用:

 # /opt/freeware/sbin/twadmin --print-polfile > /etc/tripwire/twpol.txt

解密后的策略文件现在叫做 twpol.txt


创建新策略文件

在该演示中,我决定创建一个新的 twpol 文件,所以只是创建一个叫做 /etc/tripwire/twpol.txt 的新文件。

将下面的内容放入这个文件中:

# this is a comment
# aix twpol.txt file

# system binaries
SYSBIN =  +pngu+sm;

/usr/local/bin/pwgen  -> $(SYSBIN);
/usr/bin -> $(SYSBIN);
/usr/sbin -> $(SYSBIN);

/etc/security   -> +pug  (recurse=-1);

# ignore last log
!/etc/security/lastlog;

# logs
SYSLOGS = +p-lum;

/var/adm/messages -> $(SYSLOGS);
/opt -> $(SYSBIN);
# ignore these do not scan
!/opt/dump;
!/opt/freeware;

加密策略文件

要让 Tripwire 生成新的策略文件(或者更新现有策略),可以使用 twadmin 命令;将提示您输入站点密码:

# /opt/freeware/sbin/twadmin --create-polfile -S site.key /etc/tripwire/twpol.txt
Please enter your site passphrase:rs6000
Wrote policy file: /etc/tripwire/tw.pol

显示加密的策略文件

要确认 Tripwire 已经生成了新更新的策略文件,可以使用下面的 atcadmin 命令来显示策略文件的内容:

# /opt/freeware/sbin/twadmin --print-polfile
# this is a comment
# aix twpol.txt file

# system binaries
SYSBIN =  +pngu+sm;

/usr/local/bin/pwgen  -> $(SYSBIN);
/usr/bin -> $(SYSBIN);
/usr/sbin -> $(SYSBIN);

/etc/security   -> +pug  (recurse=-1);

# ignore last log
!/etc/security/lastlog;

# logs
SYSLOGS = +p-lum;

/var/adm/messages -> $(SYSLOGS);
/opt -> $(SYSBIN);
# ignore these do not scan
!/opt/dump;
!/opt/freeware;

如果 Tripwire 数据库存在,在运行 tripwire --init 之前,首先删除原来的数据库是一个好习惯。这确保您得到一个干净的数据库版本。在该演示中,我的数据库位于 /var/lib/tripwire/rs6000.twd 中。

扫描系统并构建数据库

接下来,让 Tripwire 进行一次初始完整性扫描并生成新数据库。

# /opt/freeware/sbin/tripwire --init
Please enter your local passphrase:master
Parsing policy file: /etc/tripwire/tw.pol
Generating the database...
*** Processing Unix File System ***
Wrote database file: /var/lib/tripwire/rs6000.twd
The database was successfully generated.

现在,在系统上运行 Tripwire 完整性检查(我这里是指 Tripwire 扫描)。输出结果包含在下面的清单 3 中。Tripwire 完整性检查展示了报告的输出(使用的是新策略):

清单 3. Tripwire 完整性检查
# /opt/freeware/sbin/tripwire -check

Parsing policy file: /etc/tripwire/tw.pol
*** Processing Unix File System ***
Performing integrity check...
Wrote report file: /var/lib/tripwire/report/rs6000-20110817-173602.twr


Open Source Tripwire(R) 2.4.1 Integrity Check Report

Report generated by:          root
Report created on:            Wed Aug 17 17:36:02 BST 2011
Database last updated on:     Never

===============================================================================
Report Summary:
===============================================================================

Host name:                    rs6000
Host IP address:              192.168.4.8
Host ID:                      None
Policy file used:             /etc/tripwire/tw.pol
Configuration file used:      /etc/tripwire/tw.cfg
Database file used:           /var/lib/tripwire/rs6000.twd
Command line used:            /opt/freeware/sbin/tripwire 鈥揷heck
Rule Summary:
===============================================================================

-------------------------------------------------------------------------------
  Section: Unix File System
-------------------------------------------------------------------------------

  Rule Name                       Severity Level    Added    Removed  Modified
  ---------                       --------------    -----    -------  --------
  pwgen                           0                 0        0        0
  (/usr/local/bin/pwgen)
  bin                             0                 0        0        0
  (/usr/bin)
  sbin                            0                 0        0        0
  (/usr/sbin)
  security                        0                 0        0        0
  (/etc/security)
  messages                        0                 0        0        0
  (/var/adm/messages)
  opt                             0                 0        0        0
  (/opt)

Total objects scanned:  3739
Total violations found:  0
# Section: Unix File System
-------------------------------------------------------------------------------

No violations.

===============================================================================
Error Report:
===============================================================================

No Errors

-------------------------------------------------------------------------------
*** End of report ***

检查并修复侵害

使用我们特制的策略文件,系统似乎一切 OK。现在我将改变其中一个将被扫描的文件 ( /usr/local/bin/pwgen) 的文件权限属性。

# cd /usr/local/bin
# ls -l pwgen
-rwxrwxr-x    1 root     system       198697 Mar 26 15:15 pwgen
# chmod 755 pwgen
# ls -l pwgen
-rwxr-xr-x    1 root     system       198697 Mar 26 15:15 pwgen

现在运行 Tripwire 以再次扫描;它找出文件 pwgen 的更改。下面清单 4 中显示了删节的扫描输出。

清单 4. 侵害检查
# /opt/freeware/sbin/tripwire --check
Parsing policy file: /etc/tripwire/tw.pol
*** Processing Unix File System ***
Performing integrity check...
Wrote report file: /var/lib/tripwire/report/rs6000-20110817-173839.twr


Open Source Tripwire(R) 2.4.1 Integrity Check Report

Report generated by:          root
Report created on:            Wed Aug 17 17:38:39 BST 2011
Database last updated on:     Never

===============================================================================
Report Summary:
===============================================================================

Host name:                    rs6000
Host IP address:              192.168.4.8
Host ID:                      None
Policy file used:             /etc/tripwire/tw.pol
Configuration file used:      /etc/tripwire/tw.cfg
Database file used:           /var/lib/tripwire/rs6000.twd
===============================================================================
Rule Summary:
===============================================================================

-------------------------------------------------------------------------------
  Section: Unix File System
-------------------------------------------------------------------------------

  Rule Name                       Severity Level    Added    Removed  Modified
  ---------                       --------------    -----    -------  --------
* pwgen                           0                 0        0        1
  (/usr/local/bin/pwgen)
  bin                             0                 0        0        0
  (/usr/bin)
  sbin                            0                 0        0        0
# Section: Unix File System
-------------------------------------------------------------------------------

-------------------------------------------------------------------------------
Rule Name: pwgen (/usr/local/bin/pwgen)
Severity Level: 0
-------------------------------------------------------------------------------

Modified:
"/usr/local/bin/pwgen"
...
...
*** End of report ***

重新初始化或更新策略

清单 4 可以看到,Tripwire 已经正确检测到了更改。如果文件 pwgen 的这一更改是正当的更改,那么我们就不想要 Tripwire 报告它。关于如何让 Tripwire 不报告这一侵害,我们这里有两种选择。

我们既可以用 init 选项再次运行 Tripwire,对下次运行要比较的内容进行一次基本的扫描,如下所示:

# /opt/freeware/sbin/tripwire --init

也可以更新 Tripwire 数据库并通知它忽略或者接受此更改。

/var/lib/tripwire/report 目录中,Tripwire 生成的所有报告文件都是 hostname<date_stamp>.twr 形式的。通过按日期顺序列出文件,简单地选择这次 Tripwire 扫描生成的报告。一旦有了正确的文件,就可以使用下面这个命令更新数据库:

tripwire - - update - - twrfile </var/lib/tripwire/report/<hostname_date_stamp>.twr

执行该命令之后,您就进入了一个编辑器。搜索所报告的文件名。所有侵害或更新都在文件名前面有一个 [x]。该演示中的查找模式如下:

[x] "/usr/local/bin/pwgen"

例如:

Rule Name: pwgen (/usr/local/bin/pwgen)
Severity Level: 0
-------------------------------------------------------------------------------

Remove the "x" from the adjacent box to prevent updating the database
with the new values for this object.

Modified:
[x] "/usr/local/bin/pwgen"

如果您希望接受这些更改为正当的,则只需保存并退出文件即可。Tripwire 不再报告此文件。如果您想要这个文件不被添加到数据库,那么请删除 'x'。

保存文件并退出编辑器时,若有数据库更新发生,会提示您输入密码以完成该过程。如果没有更新发生,那么 Tripwire 会通知您的,并且不需要输入密码。该演示中出现以下提示,因为数据库将被更新:

Please enter your local passphrase: master
Wrote database file: /var/lib/tripwire/rs6000.twd

策略文件的初始填充

利用您想要监视的文件填充新的策略文件是很费时间的。另一种快速填充策略文件的方法是,像前面描述的那样只指定目录/文件系统。但是,另一种方法是在系统二进制目录(比如 /usr/bin)上运行 find 命令,然后将输出重定向到策略文件。下面清单 5 包含一个简单的脚本,用于找到普通类型的文件并显示对象名(比如说前面描述的 SYSBIN)。然后这将被重定向到策略文件。

清单 5. pop_twpol
#!/bin/sh
# pop_twpol
dir_list="/usr/bin /usr/sbin /usr/local/bin"

for loop in $dir_list
do
list=$(find ${loop} -type f -exec ls {} \;)

 for loop2 in $list
  do
   echo "${loop2} -> \$(SYSBIN);"
  done

done

下面是上面这个脚本的样例输出:

/usr/bin/xmtopasagg -> $(SYSBIN);
/usr/bin/xmtrend -> $(SYSBIN);
/usr/bin/xmwlm -> $(SYSBIN);
/usr/bin/xpstat -> $(SYSBIN);
/usr/bin/xsend -> $(SYSBIN);
/usr/bin/yes -> $(SYSBIN);
/usr/bin/ypcat -> $(SYSBIN);
/usr/bin/ypmatch -> $(SYSBIN);
/usr/bin/yppasswd -> $(SYSBIN);
/usr/bin/ypservers -> $(SYSBIN);
/usr/bin/ypwhich -> $(SYSBIN);

但是跟我们前面所做的一样,首先从 Tripwire 得到策略文件的纯文本版本:

# /opt/freeware/sbin/twadmin --print-polfile > /etc/tripwire/twpol.txt

接下来,运行 清单 5 中包含的脚本,修改目录列表以适应您自己的需求,并重定向到 twpol.txt 文件,如下所示:

#./pop_twpoll >> /etc/tripwire/twpol.txt

记住删除策略文件中以前插入的重复项,或者干脆采用全新的策略文件。

接下来,将新的策略文件放入 Tripwire 中:

# /opt/freeware/sbin/twadmin --create-polfile -S site.key /etc/tripwire/twpol.txt

对于其他特殊的文件和日志文件,应该手动添加,或者采用类似于上面的过程。

确认现在包含我们的个人文件的策略文件被加密,以备在打印策略文件内容时使用:

# /opt/freeware/sbin/twadmin -print-polfile
# this is a comment
# aix twpol.txt file

# system binaries
SYSBIN =  +pngu+sm;


# logs
SYSLOGS = +p-lum;

/var/adm/messages -> $(SYSLOGS);

/etc/security   -> +pug  (recurse=-1);
# ignore last log
!/etc/security/lastlog;

/opt -> $(SYSBIN);
# ignore these do not scan
!/opt/dump;
!/opt/freeware/goodies/myjob;

/usr/bin/Mail -> $(SYSBIN);
/usr/bin/ManGetURL.class -> $(SYSBIN);
/usr/bin/Rsh -> $(SYSBIN);
/usr/bin/SpmiArmd -> $(SYSBIN);
鈥?鈥?

接下来,运行 Tripwire 初始扫描以重新生成数据库:

 # /opt/freeware/sbin/tripwire --init

接下来,使用新创建的策略文件运行 Tripwire 检查:

 # /opt/freeware/sbin/tripwire --check

监视并报告大量的文件有时候确实不太现实,所以要慎重选择您想要监视什么样的文件。这是一个迭代的过程,要花几周的时间,您才能对所选择的真正需要 Tripwire 监视的文件满意。

对于一些系统二进制文件,我喜欢只按目录名扫描。对于所有其他文件,比如说配置脚本和安全文件,我通常采用手动输入。


报告

正如前面所提到的,Tripwire 每运行一次检查,都会生成一个报告。这些报告既作为标准输出,也被保存为报告文件。报告位于 /var/lib/tripwire/report 中。

比如:

# pwd
/var/lib/tripwire/report
bash-3.2# ls
rs6000-20110811-174421.twr  rs6000-20110812-092023.twr
rs6000-20110811-175332.twr  rs6000-20110812-093053.twr
rs6000-20110811-192716.twr  rs6000-20110812-093410.twr

要查看报告,可以使用 reprint 命令。格式为:

pwprint -m r -twrfile <reportfile.twr>

要查看报告文件 rs6000-20110812-093643.twr,可以使用:

# /opt/freeware/sbin/twprint \
-m r --twrfile /var/lib/tripwire/report/rs6000-20110812-093643.twr

 Report is not encrypted.
Open Source Tripwire(R) 2.4.1 Integrity Check Report
Report generated by:          root
Report created on:            Fri Aug 12 09:36:43 BST 2011
Database last updated on:     Never
===============================================================================
Report Summary:
===============================================================================
Host name:                    rs6000
Host IP address:              192.168.4.8
Host ID:                      None
Policy file used:             /etc/tripwire/tw.pol
Configuration file used:      /etc/tripwire/tw.cfg
鈥?
鈥?

也可以打印关于数据库中某个具体文件的信息。要抽取 /usr/local/bin/pwgen 的文件信息,可以使用:

# /opt/freeware/sbin/twprint -m d --print-dbfile /usr/local/bin/pwgen
Object name:  /usr/local/bin/pwgen

Property:               Value:
-------------           -----------
Object Type             Regular File
Mode                    -rwxr-xr-x
Num Links               1
UID                     root (0)
GID                     system (0)
Size                    198697
Modify Time             Sat Mar 26 15:15:25 GMT 2011

要从 Tripwire 数据库抽取所有信息,可以使用下面的命令:

# /opt/freeware/sbin/twprint -m d -print-dbfile |more

运行 Tripwire

为了让 Tripwire 有效率,应该定期运行它。这通过您喜欢的日程安排程序运行 Tripwire 而做到。下面的 cron 项在每天早上 06:30 运行 Tripwire,将报告重定向到 /opt/dump/logs/triplog<date_stamp>,如下所示:

30 06 * * *  /opt/freeware/sbin/tripwire \
- - check > /opt/dump/logs/triplog'date +"%d-%m-%y"'

当然,不要忘记,在必要时,您还可以查看 /var/lib/tripwire/report 中的报告文件。另外,还可以将报告发到您的电子邮箱里。下面的 cron 项将 Tripwire 报告以电子邮件的形式发送到 syadmin email 组:

30 06 * * *  /opt/freeware/sbin/tripwire - - check | mail sysadmin -s "tripwire report for
'hostname'"

结束语

记住,如果使用备份程序来备份 AIX 机器,有些备份程序可能会更改其已作为备份过程一部分而备份的文件的最后访问属性。

如果是通过 Tripwire 监视该属性,它会将此属性标记为侵害。所以您可能需要调整策略设置,或者在备份之后运行一次 Tripwire 初始化以得到新的快照。一种检查最后访问时间的方法是使用 istat 实用工具。例如:

istat <filename>

Tripwire 的功能非常丰富;本文中我只介绍了一些比较常见的功能。一定要查看 twpol 手册页,了解本文中没有介绍的其他功能。千万要调整策略文件来满足您系统的特定需求。当与其他审计工具一起使用时,Tripwire 是一个不错的工具。

参考资料

学习

  • AIX and UNIX 专区:developerWorks 的“AIX and UNIX 专区”提供了大量与 AIX 系统管理的所有方面相关的信息,您可以利用它们来扩展自己的 UNIX 技能。
  • AIX and UNIX 新手入门:访问“AIX and UNIX 新手入门”页面可了解更多关于 AIX 和 UNIX 的内容。
  • AIX and UNIX 专题汇总:AIX and UNIX 专区已经为您推出了很多的技术专题,为您总结了很多热门的知识点。我们在后面还会继续推出很多相关的热门专题给您,为了方便您的访问,我们在这里为您把本专区的所有专题进行汇总,让您更方便的找到您需要的内容。
  • AIX and UNIX 下载中心:在这里你可以下载到可以运行在 AIX 或者是 UNIX 系统上的 IBM 服务器软件以及工具,让您可以提前免费试用他们的强大功能。
  • IBM Systems Magazine for AIX 中文版:本杂志的内容更加关注于趋势和企业级架构应用方面的内容,同时对于新兴的技术、产品、应用方式等也有很深入的探讨。IBM Systems Magazine 的内容都是由十分资深的业内人士撰写的,包括 IBM 的合作伙伴、IBM 的主机工程师以及高级管理人员。所以,从这些内容中,您可以了解到更高层次的应用理念,让您在选择和应用 IBM 系统时有一个更好的认识。

获得产品和技术

  • 下载 Tripwire 和其他 rpm 软件包。
  • 下载 AIX rpm 软件包。
  • 试用免费的 IBM 软件。下载试用版,登录在线试用版,在沙箱环境中使用某种产品,或者通过云访问它。有 100 多种 IBM 产品试用版可选。

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=AIX and UNIX
ArticleID=802012
ArticleTitle=熟练使用 Tripwire
publish-date=03152012