45 设置 Linux 审计框架 #
本章介绍如何设置一个简单的审计方案,其中会详细说明配置和启用审计所涉及的每个步骤。在了解如何设置审计后,请考虑第 46 章 “审计规则集简介”中的真实示例方案。
要在 SUSE Linux Enterprise Server 上设置审计,需要完成以下步骤:
安装
audit
软件包。要使用第 45.6 节 “配置日志可视化”中所述的日志可视化,请安装gnuplot
和graphviz
。确定要审计的组件。有关详细信息,请参考 第 45.1 节 “确定要审计的组件”。
检查或修改基本审计守护程序配置。有关详细信息,请参考 第 45.2 节 “配置审计守护程序”。
对系统调用启用审计。有关详细信息,请参考 第 45.3 节 “对系统调用启用审计”。
根据您的方案撰写审计规则。有关详细信息,请参考 第 45.4 节 “设置审计规则”。
生成日志并配置定制报告。有关详细信息,请参考 第 45.5 节 “配置审计报告”。
配置可选的日志可视化。有关详细信息,请参考 第 45.6 节 “配置日志可视化”。
在配置审计系统的任何组件之前,请以 root
身份输入 systemctl
status auditd
,以确保审计守护程序未运行。SUSE Linux Enterprise Server 系统默认会在引导时启动审计,因此您需要输入 systemctl stop auditd
将其关闭。配置守护程序后,使用 systemctl start
auditd
将其启动。
45.1 确定要审计的组件 #
在开始创建您自己的审计配置之前,请确定您希望使用审计所达到的程度。检查以下一般规则,确定哪种用例最适合您和您的要求:
如果您需要进行全面的安全审计以通过 CAPP/EAL 认证,请对系统调用启用完全审计,并配置各个配置文件和目录的监测项,类似于第 46 章 “审计规则集简介”中所述的规则集。
如果您需要根据审计规则跟踪进程,请使用
autrace
。如果您需要通过文件和目录监测项来跟踪对重要数据或安全敏感数据的访问,请创建符合这些要求的规则集。根据第 45.3 节 “对系统调用启用审计”中所述启用审计,然后继续第 45.4 节 “设置审计规则”。
45.2 配置审计守护程序 #
审计守护程序的基本设置是通过编辑 /etc/audit/auditd.conf
完成的。您也可以通过调用 › › 来使用 YaST 配置基本设置。使用 和 选项卡完成配置。
log_file = /var/log/audit/audit.log log_format = RAW log_group = root priority_boost = 4 flush = INCREMENTAL freq = 20 num_logs = 5 disp_qos = lossy dispatcher = /sbin/audispd name_format = NONE ##name = mydomain max_log_file = 6 max_log_file_action = ROTATE space_left = 75 space_left_action = SYSLOG action_mail_acct = root admin_space_left = 50 admin_space_left_action = SUSPEND disk_full_action = SUSPEND disk_error_action = SUSPEND ##tcp_listen_port = tcp_listen_queue = 5 tcp_max_per_addr = 1 ##tcp_client_ports = 1024-65535 tcp_client_max_idle = 0 cp_client_max_idle = 0
默认设置适用于许多设置。某些值(例如 num_logs
、max_log_file
、space_left
和 admin_space_left
)取决于部署大小。如果磁盘空间有限,您应该减少要保留的日志文件数(如果日志是轮换的);当磁盘空间即将耗尽时,您应该提前收到警告。对于符合 CAPP 标准的设置,请如第 44.2 节 “配置审计守护程序”中所述调整 log_file
、flush
、max_log_file
、max_log_file_action
、space_left
、space_left_action
、admin_space_left
、admin_space_left_action
、disk_full_action
和 disk_error_action
的值。符合 CAPP 规范的示例配置如下所示:
log_file = PATH_TO_SEPARATE_PARTITION/audit.log log_format = RAW priority_boost = 4 flush = SYNC ### or DATA freq = 20 num_logs = 4 dispatcher = /sbin/audispd disp_qos = lossy max_log_file = 5 max_log_file_action = KEEP_LOGS space_left = 75 space_left_action = EMAIL action_mail_acct = root admin_space_left = 50 admin_space_left_action = SINGLE ### or HALT disk_full_action = SUSPEND ### or HALT disk_error_action = SUSPEND ### or HALT
注释的前面带有 ###
,您可以根据注释从多个选项中进行选择。请不要在实际的配置文件中添加注释。
有关 auditd.conf
配置参数的详细背景信息,请参见第 44.2 节 “配置审计守护程序”。
45.3 对系统调用启用审计 #
如果未安装审计框架,请安装 audit
软件包。标准的 SUSE Linux Enterprise Server 系统默认不会运行 auditd。使用以下命令启用 auditd:
>
sudo
systemctl enable auditd
可用的审计活动有以下几种级别:
- 基本日志记录
原有的(未经过任何进一步的配置)auditd 仅在
/var/log/audit/audit.log
中记录与其自身配置更改相关的事件。在auditctl
发出请求之前,内核审计组件不会生成任何事件(文件访问、系统调用等)。但是,其他内核组件和模块可能会记录不在auditctl
控制范围内的审计事件,而这些事件将显示在审计日志中。默认情况下,唯一生成审计事件的模块是 AppArmor。- 具有系统调用审计功能的高级日志记录
要审计系统调用并获取有意义的文件监测项,需要对系统调用启用审计环境。
由于即使在配置普通文件或目录监测项时也需要使用系统调用审计功能,因此您需要对系统调用启用审计环境。要想仅在当前会话期间启用审计环境,请以 root
身份执行 auditctl -e 1
。要禁用此功能,请以 root
身份执行 auditctl -e
0
。
系统默认会启用审计环境。要暂时关闭此功能,请使用 auditctl -e 0
。
45.4 设置审计规则 #
使用审计规则确定审计应分析系统的哪些方面。一般情况下,这包括重要数据库以及安全相关的配置文件。如果需要对系统进行广泛分析,您也可以详细分析各种系统调用。第 46 章 “审计规则集简介”中提供了一个详细的示例配置,其中包括 CAPP 合规环境中所需的大多数规则。
可在 auditctl
命令行中或者通过在 /etc/audit/audit.rules
中撰写规则集(每当审计守护程序启动就会处理该规则集),将审计规则传递给审计守护程序。要自定义 /etc/audit/audit.rules
,请直接对其进行编辑,或使用 YaST: › › 。在命令行中传递的规则不会持久保留,重启动审计守护程序后需要重新输入。
用于对少数几个重要文件和目录进行基本的审计的简单规则集如下所示:
# basic audit system parameters -D -b 8192 -f 1 -e 1 # some file and directory watches with keys -w /var/log/audit/ -k LOG_audit -w /etc/audit/auditd.conf -k CFG_audit_conf -p rxwa -w /etc/audit/audit.rules -k CFG_audit_rules -p rxwa -w /etc/passwd -k CFG_passwd -p rwxa -w /etc/sysconfig/ -k CFG_sysconfig # an example system call rule -a entry,always -S umask ### add your own rules
配置基本审计系统参数(例如积压参数 -b
)时,请使用所需的审计规则集对这些设置进行测试,以确定积压大小是否适合审计规则集导致的日志记录活动的级别。如果选择的积压大小太小,您的系统可能无法处理审计负载,并无法在超出积压上限时查询故障标志 (-f
)。
选择故障标志时,如果超出审计系统的限制,-f 2
会告知系统不将任何等待中数据刷写到磁盘便立即关闭。由于这种关闭并非正常关闭,请仅对最注重安全的环境使用 -f 2
,对任何其他环境使用 -f 1
(系统继续运行并发出警告,审计停止),以避免数据丢失或损坏。
目录监测项生成的输出不如这些目录下各文件的单独文件监测项那样详细。例如,要生成 /etc/sysconfig
中的系统配置的详细日志,请添加每个文件的监测项。审计不支持通配,这意味着,您无法创建 -w
/etc/*
这样的规则来监测 /etc
下的所有文件和目录。
为便于在日志文件中识别,每个文件和目录监测项中都添加了一个键。使用该键可以更轻松地梳理日志,找到与特定规则相关的事件。创建键时,请将适当的前缀与键结合使用,以区分单纯的日志文件监测项和配置文件监测项。在本例中,LOG
表示日志文件监测项,CFG
表示配置文件监测项。使用文件名作为键的一部分也有助于您更轻松地在日志文件中识别此类事件。
创建文件和目录监测项时,要注意的另一点是,审计无法处理创建规则时尚不存在的文件。审计不会监测在其运行后添加到系统中的任何文件,除非您将规则集扩展为监测此新文件。
有关创建自定义规则的详细信息,请参见第 44.4 节 “将参数传递到审计系统”。
更改审计规则后,请始终使用 systemctl restart auditd
重启动审计守护程序,以重新读取更改的规则。
45.5 配置审计报告 #
为了避免必须挖掘原始审计日志才能大致了解系统当前发生的情况,请按特定间隔运行自定义审计报告:自定义审计报告可让您将重点放在关注的方面,并获取有关所监视事件的性质和频率的有意义统计。要详细分析单个事件,请使用 ausearch 工具。
在设置审计报告之前,请考虑以下问题:
您要通过生成定期报告来监视哪种类型的事件?根据第 44.5.2 节 “生成自定义审计报告”中所述选择适当的 aureport 命令行。
您要将审计报告用于什么目的?确定是否要基于累积数据创建图表,或者是否要将这些数据传输到任何类型的电子表格或数据库中。按第 45.6 节 “配置日志可视化”中所示示例的相似方法设置 aureport 命令行,并进行进一步处理,以直观呈现报告。
要何时以及按何间隔运行报告?使用 cron 设置适当的自动化报告。
本示例假设您想要找出对您的审计、PAM 和系统配置进行的任何访问尝试。执行以下操作,找出系统上的文件事件:
生成所有事件的完整摘要报告,并检查摘要报告中的任何异常情况,例如查看“failed syscalls”记录,因为这些活动失败的原因可能是文件访问权限不足,或者文件不存在:
>
sudo
aureport
Summary Report ====================== Range of time in logs: 03/02/09 14:13:38.225 - 17/02/09 16:30:10.352 Selected time for report: 03/02/09 14:13:38 - 17/02/09 16:30:10.352 Number of changes in configuration: 24 Number of changes to accounts, groups, or roles: 0 Number of logins: 9 Number of failed logins: 15 Number of authentications: 19 Number of failed authentications: 578 Number of users: 3 Number of terminals: 15 Number of host names: 4 Number of executables: 20 Number of files: 279 Number of AVC's: 0 Number of MAC events: 0 Number of failed syscalls: 994 Number of anomaly events: 0 Number of responses to anomaly events: 0 Number of crypto events: 0 Number of keys: 2 Number of process IDs: 1238 Number of events: 5435运行失败事件的摘要报告,并在“files”记录中检查文件访问失败事件的数目:
>
sudo
aureport
--failed
Failed Summary Report ====================== Range of time in logs: 03/02/09 14:13:38.225 - 17/02/09 16:30:10.352 Selected time for report: 03/02/09 14:13:38 - 17/02/09 16:30:10.352 Number of changes in configuration: 0 Number of changes to accounts, groups, or roles: 0 Number of logins: 0 Number of failed logins: 15 Number of authentications: 0 Number of failed authentications: 578 Number of users: 1 Number of terminals: 7 Number of host names: 4 Number of executables: 12 Number of files: 77 Number of AVC's: 0 Number of MAC events: 0 Number of failed syscalls: 994 Number of anomaly events: 0 Number of responses to anomaly events: 0 Number of crypto events: 0 Number of keys: 2 Number of process IDs: 713 Number of events: 1589要列出无法访问的文件列表,请运行失败文件事件的摘要报告:
>
sudo
aureport
-f -i --failed --summary
Failed File Summary Report =========================== total file =========================== 80 /var 80 spool 80 cron 80 lastrun 46 /usr/lib/locale/en_GB.UTF-8/LC_CTYPE 45 /usr/lib/locale/locale-archive 38 /usr/lib/locale/en_GB.UTF-8/LC_IDENTIFICATION 38 /usr/lib/locale/en_GB.UTF-8/LC_MEASUREMENT 38 /usr/lib/locale/en_GB.UTF-8/LC_TELEPHONE 38 /usr/lib/locale/en_GB.UTF-8/LC_ADDRESS 38 /usr/lib/locale/en_GB.UTF-8/LC_NAME 38 /usr/lib/locale/en_GB.UTF-8/LC_PAPER 38 /usr/lib/locale/en_GB.UTF-8/LC_MESSAGES 38 /usr/lib/locale/en_GB.UTF-8/LC_MONETARY 38 /usr/lib/locale/en_GB.UTF-8/LC_COLLATE 38 /usr/lib/locale/en_GB.UTF-8/LC_TIME 38 /usr/lib/locale/en_GB.UTF-8/LC_NUMERIC 8 /etc/magic.mgc ...要让此摘要报告仅重点统计几个关注的文件或目录(例如
/etc/audit/auditd.conf
、/etc/pam.d
和/etc/sysconfig
),请使用如下所示的命令:>
sudo
aureport -f -i --failed --summary |grep -e "/etc/audit/auditd.conf" -e "/etc/pam.d/" -e "/etc/sysconfig"
1 /etc/sysconfig/displaymanager然后在摘要报告中继续隔离日志中的这些关注项,并找出其事件 ID 以进行进一步分析:
>
sudo
aureport -f -i --failed |grep -e "/etc/audit/auditd.conf" -e "/etc/pam.d/" -e "/etc/sysconfig"
993. 17/02/09 16:47:34 /etc/sysconfig/displaymanager readlink no /bin/vim-normal root 7887 994. 17/02/09 16:48:23 /etc/sysconfig/displaymanager getxattr no /bin/vim-normal root 7889使用事件 ID 获取每个关注项的详细记录:
>
sudo
ausearch -a
7887 -i ---- time->Tue Feb 17 16:48:23 2009 type=PATH msg=audit(1234885703.090:7889): item=0 name="/etc/sysconfig/displaymanager" inode=369282 dev=08:06 mode=0100644 ouid=0 ogid=0 rdev=00:00 type=CWD msg=audit(1234885703.090:7889): cwd="/root" type=SYSCALL msg=audit(1234885703.090:7889): arch=c000003e syscall=191 success=no exit=-61 a0=7e1e20 a1=7f90e4cf9187 a2=7fffed5b57d0 a3=84 items=1 ppid=25548 pid=23045 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts2 ses=1166 comm="vim" exe="/bin/vim-normal" key=(null)
如果您要关注特定时间段的事件,请在 aureport
命令中使用开始与结束日期和时间(-ts
和 -te
)来裁减报告。有关详细信息,请参见 第 44.5.2 节 “生成自定义审计报告”。
除最后一个步骤以外的所有步骤均可自动运行,您可以轻松编写其脚本并将其配置为 cron 作业。任何 --failed --summary
报告均可轻松转换为标绘文件与失败访问尝试的条形图。有关直观呈现审计报告数据的详细信息,请参见第 45.6 节 “配置日志可视化”。
45.6 配置日志可视化 #
可以使用脚本 mkbar
和 mkgraph
通过各种图形和图表来说明您的审计统计。与任何其他 aureport
命令一样,您可以编写绘图命令脚本,并轻松将其配置为以 cron 作业的形式运行。
mkbar
和 mkgraph
是由 Red Hat 的 Steve Grubb 创建的。所在网址为 http://people.redhat.com/sgrubb/audit/visualize/。由于 SUSE Linux Enterprise Server 中当前版本的审计未随附这些脚本,请执行以下操作以在您的系统上提供这些脚本:
使用 mkbar
和 mkgraph
需自负风险。从 Web 下载的任何内容均有可能给您的系统造成危害,以 root
特权运行时更是如此。
将脚本下载到
root
的~/bin
目录:>
sudo
wget http://people.redhat.com/sgrubb/audit/visualize/mkbar -O ~/bin/mkbar>
sudo
wget http://people.redhat.com/sgrubb/audit/visualize/mkgraph -O ~/bin/mkgraph调整
root
的文件读取、写入和执行权限:>
sudo
chmod 744 ~/bin/mk{bar,graph}
要绘制摘要报告(例如第 45.5 节 “配置审计报告”中所述的报告),请使用 mkbar
脚本。某些示例命令如下所示:
- 创建事件摘要
>
sudo
aureport -e -i --summary | mkbar events- 创建文件事件摘要
>
sudo
aureport -f -i --summary | mkbar files- 创建登录事件摘要
>
sudo
aureport -l -i --summary | mkbar login- 创建用户事件摘要
>
sudo
aureport -u -i --summary | mkbar users- 创建系统调用事件摘要
>
sudo
aureport -s -i --summary | mkbar syscalls
要创建上述任何事件类型的失败事件摘要图表,请在相关的 aureport
命令中添加 --failed
选项。要仅涵盖特定的时间段,请在 aureport 中使用 -ts
和 -te
选项。对于上述任何命令,可以使用 grep 或 egrep 以及正则表达式缩小其范围,来进一步对其进行调整。有关示例,请查看 mkbar
脚本中的注释。上述所有命令均会生成一个 PNG 文件,其中包含所请求数据的条形图。
要说明不同类型的审计对象(例如用户和系统调用)之间的关系,请使用 mkgraph
脚本。某些示例命令如下所示:
- 用户与可执行文件
>
sudo
LC_ALL=C aureport -u -i | awk '/^[0-9]/ { print $4" "$7 }' | sort | uniq | mkgraph users_vs_exec- 用户与文件
>
sudo
LC_ALL=C aureport -f -i | awk '/^[0-9]/ { print $8" "$4 }' | sort | uniq | mkgraph users_vs_files- 系统调用与命令
>
sudo
LC_ALL=C aureport -s -i | awk '/^[0-9]/ { print $4" "$6 }' | sort | uniq | mkgraph syscall_vs_com- 系统调用与文件
>
sudo
LC_ALL=C aureport -s -i | awk '/^[0-9]/ { print $5" "$4 }' | sort | uniq | mkgraph | syscall_vs_file
还可以结合图形来说明复杂的关系。有关更多信息和示例,请查看 mkgraph
脚本中的注释。此脚本生成的图形默认创建为 PostScript 格式,但您可以通过将脚本中的 EXT
变量从 ps
更改为 png
或 jpg
,来更改输出格式。