21 使用 AIDE 进行入侵检测 #
保护您的系统是任何一位任务关键型系统管理员必须完成的任务。由于无法始终保证系统的安全性不会受到损害,定期执行额外的检查(例如,使用 cron
进行检查)以确保系统仍受您的控制,就显得极为重要。这正是 AIDE(高级入侵检测环境)的用武之地。
21.1 为何要使用 AIDE? #
可以通过 RPM 执行简单的检查,这往往可以发现一些不必要的更改。软件包管理器具有一项内置的校验功能,可以检查系统中所有受管文件发生的更改。要校验所有文件,请运行 rpm -Va
命令。不过,此命令还会显示配置文件中的更改,您需要进行过滤才能检测出重要的更改。
使用 RPM 进行检查的另一个问题在于,聪明的攻击者会修改 rpm
本身,以隐藏通过某种 root-kit 进行的任何更改,这样攻击者便可掩盖其入侵行为并获得 root 特权。要解决此问题,您应该实施另一项检查,这项检查也可以完全独立于安装的系统运行。
21.2 设置 AIDE 数据库 #
在安装系统之前,请校验媒体的校验和(参见第 12.1 节 “检查媒体”),以确保您使用的不是受损安装源。安装系统后,初始化 AIDE 数据库。为确保在安装期间和之后一切正常,请在计算机未连到任何网络的情况下,直接在控制台上进行安装。在 AIDE 创建其数据库之前,请不要使计算机处于无人照管的状态或将其连接到任何网络。
SUSE Linux Enterprise Server 上默认不会安装 AIDE。要安装 AIDE,请使用 › ,或者以 root
身份在命令行中输入 zypper install aide
。
要告知 AIDE 应检查哪些文件的哪些属性,请使用 /etc/aide.conf
配置文件。此文件必须经过修改才能成为实际的配置。第一部分处理一般参数,例如 AIDE 数据库文件的位置。Custom
Rules
和 Directories and Files
部分与本地配置更相关。典型规则如下所示:
Binlib = p+i+n+u+g+s+b+m+c+md5+sha1
定义 Binlib
变量后,将在文件部分使用相应的检查框。重要选项包括:
选项 |
说明 |
---|---|
p |
检查选定文件或目录的文件权限。 |
i |
检查 inode 编号。每个文件名都有一个不得更改的唯一 inode 编号。 |
n |
检查指向相关文件的链接数。 |
u |
检查文件拥有者是否已更改。 |
g |
检查文件组是否已更改。 |
s |
检查文件大小是否已更改。 |
b |
检查文件使用的块计数是否已更改。 |
m |
检查文件的修改时间是否已更改。 |
c |
检查文件访问时间是否已更改。 |
S |
检查更改的文件大小。 |
I |
忽略文件名的更改。 |
md5 |
检查文件的 md5 校验和是否已更改。我们建议使用 sha256 或 sha512。 |
sha1 |
检查文件的 sha1(160 位)校验和是否已更改。我们建议使用 sha256 或 sha512。 |
sha256 |
检查文件的 sha256 校验和是否已更改。 |
sha512 |
检查文件的 sha512 校验和是否已更改。 |
此配置使用 Binlib
中定义的选项检查 /sbin
中的所有文件,但会忽略 /sbin/conf.d/
目录:
/sbin Binlib !/sbin/conf.d
要创建 AIDE 数据库,请执行以下操作:
打开
/etc/aide.conf
。定义应使用哪些检查框检查哪些文件。有关可用检查框的完整列表,请参见
/usr/share/doc/packages/aide/manual.html
。定义文件的选择需要掌握正则表达式方面的一些知识。保存修改内容。要检查配置文件是否有效,请运行:
#
aide --config-check此命令的任何输出都是一条指出配置无效的提示。例如,如果您收到以下输出:
#
aide --config-check 35:syntax error:! 35:Error while reading configuration:! Configuration error该错误预期会在
/etc/aide.conf
的第 36 行中出现。请注意,错误消息包含上次成功读取的配置文件行。初始化 AIDE 数据库。运行以下命令:
#
aide -i将生成的数据库复制到某个保存位置(例如 CD-R、DVD-R、远程服务器或闪存盘),供以后使用。
重要:此步骤至关重要,因为它可以避免数据库的安全受到损害。建议使用只能写入一次的媒体,以防止数据库遭到修改。切勿将数据库保留在您要监视的计算机上。
21.3 本地 AIDE 检查 #
要进行文件系统检查,请执行以下操作:
重命名数据库:
#
mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db发生任何配置更改后,始终需要重新初始化 AIDE 数据库,随后移动新生成的数据库。备份此数据库也是个不错的选择。有关更多信息,请参见第 21.2 节 “设置 AIDE 数据库”。
使用以下命令执行检查:
#
aide --check
如果输出为空,则表示一切正常。如果 AIDE 发现了更改,会显示更改摘要,例如:
#
aide --check
AIDE found differences between database and filesystem!!
Summary:
Total number of files: 1992
Added files: 0
Removed files: 0
Changed files: 1
要了解实际的更改,请使用参数 -V
提高检查的详细级别。对于前面的示例,此参数的用法如下所示:
#
aide --check -V
AIDE found differences between database and filesystem!!
Start timestamp: 2009-02-18 15:14:10
Summary:
Total number of files: 1992
Added files: 0
Removed files: 0
Changed files: 1
---------------------------------------------------
Changed files:
---------------------------------------------------
changed: /etc/passwd
--------------------------------------------------
Detailed information about changes:
---------------------------------------------------
File: /etc/passwd
Mtime : 2009-02-18 15:11:02 , 2009-02-18 15:11:47
Ctime : 2009-02-18 15:11:02 , 2009-02-18 15:11:47
为了演示该结果,本示例中改动了文件 /etc/passwd
。
21.4 独立于系统的检查 #
为了避免风险,建议同时从可信的来源运行 AIDE 二进制文件。这可以排除某些攻击者另外修改 AIDE 二进制文件以隐藏其行踪的风险。
要完成此任务,必须从独立于所安装系统的救援系统运行 AIDE。使用 SUSE Linux Enterprise Server 可以相对轻松地通过任意程序扩展救援系统,如此便可添加所需的功能。
在开始使用救援系统之前,需要将两个软件包提供给系统。包含这些软件包时所用的语法与将驱动程序更新磁盘添加到系统的语法相同。有关用于此目的的 linuxrc 可用功能的详细说明,请参见 https://en.opensuse.org/SDB:Linuxrc。下面介绍了一种完成此任务的可行方式。
提供一台 FTP 服务器作为另一台计算机。
将
aide
和mhash
软件包复制到 FTP 服务器目录,在本例中为/srv/ftp/
。请将 ARCH 和 VERSION 占位符替换为相应的值:#
cp DVD1/suse/ARCH/aideVERSION.ARCH.rpm /srv/ftp#
cp DVD1/suse/ARCH/mhashVERSION.ARCH.rpm /srv/ftp创建信息文件
/srv/ftp/info.txt
,用于提供救援系统所需的引导参数:dud:ftp://ftp.example.com/aideVERSION.ARCH.rpm dud:ftp://ftp.example.com/mhashVERSION.ARCH.rpm
请将您的 FTP 域名、VERSION 和 ARCH 替换为系统上使用的值。
重启动需要使用 DVD 中的救援系统完成整个 AIDE 检查的服务器。向引导参数添加以下字符串:
info=ftp://ftp.example.com/info.txt
此参数告知
linuxrc
还要读入info.txt
文件中的所有信息。
救援系统引导后,AIDE 程序即可供使用。
21.5 更多信息 #
以下位置提供了有关 AIDE 的信息:
AIDE 主页:http://aide.sourceforge.net
记录的模板配置
/etc/aide.conf
中。安装
aide
软件包后/usr/share/doc/packages/aide
下的多个文件中。https://www.ipi.fi/mailman/listinfo/aide 上的 AIDE 用户邮件列表中。