本章展示如何设置一个简单的审计场景。配置和启用审计涉及的每个步骤都将详细解释。学习了如何设置审计后,请考虑在 第 42 章,介绍审计规则集 中查看一个实际的示例场景。
要在 openSUSE Leap 上设置审计,您需要完成以下步骤
安装 audit 包。要使用如 第 41.6 节,“配置日志可视化” 中所述的日志可视化功能,请安装 gnuplot 和 graphviz。
确定要审计的组件。有关详细信息,请参阅 第 41.1 节,“确定要审计的组件”。
检查或修改基本的审计守护进程配置。有关详细信息,请参阅 第 41.2 节,“配置审计守护进程”。
启用系统调用的审计。有关详细信息,请参阅 第 41.3 节,“启用系统调用的审计”。
编写适合您场景的审计规则。有关详细信息,请参阅 第 41.4 节,“设置审计规则”。
生成日志并配置定制的报告。有关详细信息,请参阅 第 41.5 节,“配置审计报告”。
配置可选的日志可视化功能。有关详细信息,请参阅 第 41.6 节,“配置日志可视化”。
在配置审计系统的任何组件之前,请确保审计守护进程未运行,方法是输入 systemctl status auditd 作为 root。在默认的 openSUSE Leap 系统上,audit 会在启动时启动,因此您需要通过输入 systemctl stop auditd 来关闭它。使用 systemctl start auditd 在配置后启动守护进程。
在开始创建自己的审计配置之前,确定您希望使用它的程度。检查以下一般规则,以确定哪种用例最适合您和您的要求
如果您需要针对 CAPP/EAL 认证的完整安全审计,请为系统调用启用完整审计,并为各种配置文件和目录配置监视,类似于 第 42 章,介绍审计规则集 中提供的规则集。
如果您需要基于审计规则跟踪进程,请使用 autrace。
如果您需要文件和目录监视来跟踪对重要或安全敏感数据的访问,请创建符合这些要求的规则集。如 第 41.3 节,“启用系统调用的审计” 中所述启用审计,然后继续执行 第 41.4 节,“设置审计规则”。
审计守护进程的基本设置是通过编辑 /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 标准的设置,请调整 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 的值,如 第 40.2 节,“配置审计守护进程” 中所述。一个符合 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
### 前缀表示注释,您可以从中选择几个选项。请勿将注释添加到您的实际配置文件中。
如果未安装审计框架,请安装 audit 包。标准的 openSUSE Leap 系统默认情况下不会运行 auditd。使用以下命令启用它
>sudosystemctl enable auditd
有不同的审计活动级别可用
开箱即用(无需进一步配置),auditd 仅将有关其自身配置更改的事件记录到 /var/log/audit/audit.log。除非由 auditctl 请求,否则内核审计组件不会生成任何事件(文件访问、系统调用等)。但是,其他内核组件和模块可能会在 auditctl 的控制之外记录审计事件,这些事件会出现在审计日志中。默认情况下,唯一生成审计事件的模块是 AppArmor。
要审计系统调用并获得有意义的文件监视,您需要为系统调用启用审计上下文。
由于即使在配置纯文件或目录监视时,您也需要系统调用审计功能,因此您需要为系统调用启用审计上下文。要为当前会话启用审计上下文,请以 root 身份执行 auditctl -e 1。要禁用此功能,请以 root 身份执行 auditctl -e 0。
审计上下文默认启用。要暂时关闭此功能,请使用 auditctl -e 0。
使用审计规则,确定应由审计分析系统的哪些方面。通常包括重要的数据库和安全相关的配置文件。如果您需要对系统进行广泛分析,您还可以详细分析各种系统调用。在 第 42 章,介绍审计规则集 中提供了一个详细的示例配置,其中包含 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
在配置基本的审计系统参数(例如 backlog 参数 -b)时,使用您的预期审计规则集测试这些设置,以确定 backlog 大小是否适合您的审计规则集引起的日志记录活动级别。如果选择的 backlog 大小太小,您的系统可能无法处理审计负载,并在超出 backlog 限制时咨询失败标志 (-f)。
在选择失败标志时,-f 2 会告诉您的系统在超出审计系统的限制时立即关闭,而不将任何待处理的数据刷新到磁盘。由于此关闭不是干净的关闭,因此请将 -f 2 的使用限制在最注重安全的的环境中,并为任何其他设置使用 -f 1(系统继续运行,发出警告并停止审计),以避免数据丢失或数据损坏。
目录监视比对这些目录下的文件进行单独监视产生更少的详细输出。要获得系统配置中 /etc/sysconfig 的详细日志记录,例如,请为每个文件添加监视。
为了更好地识别日志文件中的信息,已为每个文件和目录监视添加了一个键。使用该键,更容易梳理日志以查找与特定规则相关的事件。在创建键时,通过使用适当的前缀(在本例中,LOG 用于日志文件监视,CFG 用于配置文件监视)来区分纯日志文件监视和配置文件监视。在键中使用文件名也有助于您更轻松地在日志文件中识别此类事件。
在创建文件和目录监视时,还需要记住审计无法处理规则创建时不存在的文件。在审计已经运行时添加到您的系统的任何文件都不会被监视,除非您扩展规则集以监视此新文件。
有关创建自定义规则的更多信息,请参阅 第 40.4 节,“将参数传递给审计系统”。
更改审计规则后,始终使用 systemctl restart auditd 重新启动审计守护进程以重新读取更改的规则。
为了避免不得不深入研究原始审计日志才能了解您的系统当前正在做什么,请在特定时间间隔运行自定义审计报告。自定义审计报告使您能够专注于感兴趣的领域并获得有关您正在监视的事件的性质和频率的有意义的统计信息。要详细分析单个事件,请使用 ausearch 工具。
在设置审计报告之前,请考虑以下事项
您希望监视哪些类型的事件来生成定期报告?选择如 第 40.5.2 节,“生成自定义审计报告” 中所述的适当 aureport 命令行。
您想如何处理审计报告?决定是将从累积的数据中创建图形图表,还是应该将其传输到任何类型的电子表格或数据库。设置 aureport 命令行和进一步处理,类似于 第 41.6 节,“配置日志可视化” 中显示的示例,以可视化您的报告。
报告何时以及以什么间隔运行?使用 cron 设置适当的自动化报告。
在本例中,假设您有兴趣了解任何尝试访问您的 audit、PAM 和系统配置的行为。按照以下步骤查找系统上的文件事件
生成所有事件的完整摘要报告,并检查摘要报告中的任何异常情况,例如,查看 “失败的系统调用” 记录,因为这些可能由于权限不足而失败访问文件或文件不存在
>sudoaureportSummary 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
运行失败事件的摘要报告,并检查 “文件” 记录中失败的文件访问事件的数量
>sudoaureport--failedFailed 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
要列出无法访问的文件,请运行失败文件事件的摘要报告
>sudoaureport-f -i --failed --summaryFailed 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,请使用类似于以下命令的命令
>sudoaureport -f -i --failed --summary |grep -e "/etc/audit/auditd.conf" -e "/etc/pam.d/" -e "/etc/sysconfig"1 /etc/sysconfig/displaymanager
从摘要报告中,然后继续从日志中隔离这些感兴趣的项目,并找出它们的事件 ID 以进行进一步分析
>sudoaureport -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 获取每个感兴趣项目的详细记录
>sudoausearch -a7887 -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)来缩小报告范围。有关更多信息,请参阅 第 40.5.2 节,“生成自定义审计报告”。
所有步骤(除了最后一步)都可以自动运行,并且可以轻松地编写脚本并配置为 cron 作业。任何 --failed --summary 报告都可以轻松转换为绘制文件与失败访问尝试的条形图。有关可视化审计报告数据的更多信息,请参阅 第 41.6 节,“配置日志可视化”。
使用脚本 mkbar 和 mkgraph,您可以利用各种图表和图形来展示您的审计统计信息。与任何其他 aureport 命令一样,绘图命令也可以编写脚本并轻松配置为 cron 作业。
mkbar 和 mkgraph 由 Red Hat 的 Steve Grubb 创建。它们可从 https://people.redhat.com/sgrubb/audit/visualize/ 获取。由于 openSUSE Leap 中的当前 audit 版本不包含这些脚本,因此请按以下步骤使其在您的系统上可用
请自行承担使用 mkbar 和 mkgraph 的风险。从 Web 下载的任何内容都可能对您的系统造成危险,尤其是在使用 root 权限运行时。
将脚本下载到 root 的 ~/bin 目录
>sudowget http://people.redhat.com/sgrubb/audit/visualize/mkbar -O ~/bin/mkbar>sudowget http://people.redhat.com/sgrubb/audit/visualize/mkgraph -O ~/bin/mkgraph
调整文件权限,以便 root 具有读、写和执行权限
>sudochmod 744 ~/bin/mk{bar,graph}
要绘制摘要报告,例如在 第 41.5 节,“配置审计报告” 中讨论的报告,请使用脚本 mkbar。一些示例命令如下所示
>sudoaureport -e -i --summary | mkbar events
>sudoaureport -f -i --summary | mkbar files
>sudoaureport -l -i --summary | mkbar login
>sudoaureport -u -i --summary | mkbar users
>sudoaureport -s -i --summary | mkbar syscalls
要创建上述任何事件类型的失败事件摘要图表,请将 --failed 选项添加到相应的 aureport 命令。要涵盖特定时间段,请在 aureport 上使用 -ts 和 -te 选项。可以使用 grep 或 egrep 和正则表达式进一步调整这些命令中的任何一个。请参阅 mkbar 脚本中的注释以获取示例。上述任何命令都会生成包含请求数据的条形图的 PNG 文件。
要说明不同类型的审计对象之间的关系,例如用户和系统调用,请使用脚本 mkgraph。一些示例命令如下所示
>sudoLC_ALL=C aureport -u -i | awk '/^[0-9]/ { print $4" "$7 }' | sort | uniq | mkgraph users_vs_exec
>sudoLC_ALL=C aureport -f -i | awk '/^[0-9]/ { print $8" "$4 }' | sort | uniq | mkgraph users_vs_files
>sudoLC_ALL=C aureport -s -i | awk '/^[0-9]/ { print $4" "$6 }' | sort | uniq | mkgraph syscall_vs_com
>sudoLC_ALL=C aureport -s -i | awk '/^[0-9]/ { print $5" "$4 }' | sort | uniq | mkgraph | syscall_vs_file
可以将图表组合起来以说明复杂的关系。有关更多信息和示例,请参阅 mkgraph 脚本中的注释。此脚本生成的图表默认以 PostScript 格式创建,但您可以将脚本中的 EXT 变量从 ps 更改为 png 或 jpg 来更改输出格式。