此版本的 openSUSE Leap 提供的 Linux audit 框架是一个符合 CAPP(受控访问保护配置文件)标准的审计系统,可以可靠地收集任何与安全相关事件的信息。可以检查审计记录,以确定是否违反了安全策略,以及由谁违反的。
提供审计框架是 CC-CAPP/EAL(通用标准-受控访问保护配置文件/评估保证级别)认证的重要要求。通用标准 (CC) for Information Technology Security Information 是独立安全评估的国际标准。通用标准有助于客户判断他们打算在关键任务设置中部署的任何 IT 产品的安全级别。
通用标准的安全性评估具有两组评估要求:功能要求和保证要求。功能要求描述了被评估产品的安全属性,并总结在受控访问保护配置文件 (CAPP) 下。保证要求总结在评估保证级别 (EAL) 下。EAL 描述了评估人员为了确信安全属性存在、有效且已实施而必须进行的所有活动。此类活动的示例包括记录开发人员寻找安全漏洞的过程、补丁过程和测试。
本指南提供了关于 audit 工作原理及其设置方式的基本理解。有关通用标准本身的更多信息,请参阅 通用标准网站。
Linux audit 通过为您提供分析系统上发生情况的详细方法,帮助提高系统的安全性。但是,它本身并不能提供额外的安全性——它不能保护您的系统免受代码故障或任何类型的漏洞攻击。相反,audit 对于跟踪这些问题很有用,并帮助您采取额外的安全措施,例如 AppArmor,以防止它们。
Audit 由几个组件组成,每个组件都为整个框架贡献了关键功能。audit 内核模块拦截系统调用并记录相关事件。 auditd 守护进程将 audit 报告写入磁盘。各种命令行实用程序负责显示、查询和归档 audit 跟踪。
Audit 使您能够执行以下操作
Audit 将进程映射到启动它们的的用户 ID。这使得管理员或安全官员能够准确地跟踪哪个用户拥有哪个进程,以及可能在系统上执行恶意操作。
Audit 不处理 UID 的重命名。因此,避免重命名 UID(例如,将 tux 从 uid=1001 更改为 uid=2000)并废弃 UID 而不是重命名它们。否则,您需要更改 auditctl 数据(audit 规则),并且无法正确检索旧数据。
Linux audit 提供的工具会将 audit 报告写入磁盘,并将它们转换为人类可读的格式。
Audit 提供了一个实用程序,允许您根据某些感兴趣的事件过滤 audit 报告。您可以按以下内容进行过滤:
用户
组
Audit ID
远程主机名
远程主机地址
系统调用
系统调用参数
文件
文件操作
成功或失败
Audit 提供了过滤 audit 报告中感兴趣事件的手段,并调整 audit 以记录选定的事件。您可以创建自己的规则集,并让 audit 守护进程记录您感兴趣的事件。
Audit 报告由 root 拥有,并且只能由 root 删除。未经授权的用户无法删除 audit 日志。
如果内核内存不足,audit 守护进程的 backlog 超过限制,或者超过了速率限制,audit 可以触发系统关机,以防止事件逃脱 audit 的控制。此关机将是立即停止系统,由 audit 内核组件触发,不会将最新的日志同步到磁盘。默认配置是在 syslog 中记录警告,而不是停止系统。
如果系统在记录时磁盘空间不足,audit 系统可以配置为执行干净关机。默认配置告诉 audit 守护进程在磁盘空间不足时停止记录。
在 openSUSE Leap 15.4 中,audispd 的代码已合并到 auditd 中。所有 audispd 配置现在位于 /etc/audit/auditd.conf 和 /etc/audit/plugins.d 中。
下图说明了 audit 的各个组件如何相互交互
实线箭头表示组件之间的数据流,而虚线箭头表示组件之间的控制线。
audit 守护进程将通过 audit 内核接口生成的 audit 消息(由应用程序和系统活动触发)写入磁盘。audit 守护进程的启动方式由 systemd 控制。audit 系统函数(启动时)由 /etc/audit/auditd.conf 控制。有关 auditd 及其配置的更多信息,请参阅 第 40.2 节,“配置 audit 守护进程”。
auditctl
auditctl 实用程序控制 audit 系统。它控制 audit 日志生成参数和 audit 接口的内核设置以及确定跟踪哪些事件的规则集。有关 auditctl 的更多信息,请参阅 第 40.3 节,“使用 auditctl 控制 audit 系统”。
文件 /etc/audit/audit.rules 包含一系列 auditctl 命令,这些命令在系统启动时立即在 audit 守护进程启动后加载。有关 audit 规则的更多信息,请参阅 第 40.4 节,“将参数传递给 audit 系统”。
aureport 实用程序允许您从 audit 事件日志中创建自定义报告。此报告生成可以轻松地编写脚本,并且输出可以被各种其他应用程序使用,例如绘制这些结果。有关 aureport 的更多信息,请参阅 第 40.5 节,“理解 audit 日志并生成报告”。
ausearch 实用程序可以使用各种键或其他已记录格式的特征在 audit 日志文件中搜索某些事件。有关 ausearch 的更多信息,请参阅 第 40.6 节,“使用 ausearch 查询 audit 守护进程日志”。
autrace 实用程序以类似于 strace 的方式跟踪单个进程。 autrace 的输出记录到 audit 日志中。有关 autrace 的更多信息,请参阅 第 40.7 节,“使用 autrace 分析进程”。
打印上次登录用户的列表,类似于 last。 aulast 在 audit 日志(或给定的 audit 日志文件)中向后搜索,并根据 audit 日志中的时间范围显示所有登录和注销用户的列表。
以类似于 lastlog 的方式打印机器上所有用户的最后一次登录。打印登录名、端口和最后一次登录时间。
在开始生成 audit 日志并处理它们之前,请配置 audit 守护进程本身。 /etc/audit/auditd.conf 配置文件确定 audit 守护进程启动后 audit 系统的功能方式。对于大多数用例,随 openSUSE Leap 提供的默认设置应该足够。对于 CAPP 环境,大多数这些参数需要调整。以下是默认配置示例
local_events = yes write_logs = yes log_file = /var/log/audit/audit.log log_group = audit log_format = RAW flush = INCREMENTAL_ASYNC freq = 50 max_log_file = 8 num_logs = 5 priority_boost = 4 name_format = NONE ##name = mydomain max_log_file_action = ROTATE space_left = 75 space_left_action = SYSLOG verify_email = yes action_mail_acct = root admin_space_left = 50 admin_space_left_action = SUSPEND disk_full_action = SUSPEND disk_error_action = SUSPEND use_libwrap = yes ##tcp_listen_port = 60 tcp_listen_queue = 5 tcp_max_per_addr = 1 ##tcp_client_ports = 1024-65535 tcp_client_max_idle = 0 transport = TCP distribute_network = no q_depth = 1200 overflow_action = SYSLOG max_restarts = 10 plugin_dir = /etc/audit/plugins.d end_of_event_timeout = 2
请参阅 man 5 auditd.conf 以获取这些选项的说明。
如果您希望您的环境满足 CAPP 的要求,则需要在配置 audit 守护进程时更加严格。如果您需要使用特定的设置来满足 CAPP 要求,则““CAPP 环境””注释会告诉您如何调整配置。
完成 /etc/audit/auditd.conf 中的守护进程配置后,下一步是专注于控制守护进程执行的 audit 量,并为守护进程分配足够的资源和限制,以便它可以平稳运行。
auditctl 控制 audit 守护进程的状态和基本系统参数。它控制系统上执行的 audit 量。使用 audit 规则,auditctl 控制您的系统的哪些组件受到 audit 的影响以及 audit 的程度。audit 规则可以传递到 auditctl 命令行的 audit 守护进程,也可以通过编写规则集并指示 audit 守护进程处理此文件来传递。默认情况下,auditd 守护进程配置为在系统启动时从 /etc/audit/audit.rules 下检查 audit 规则。有关 audit 规则的更多信息,请参阅 第 40.4 节,“将参数传递给 audit 系统”。
控制 audit 系统基本参数的主要 auditctl 命令是
auditctl -e 启用或禁用 audit
auditctl -f 控制失败标志
auditctl -r 控制 audit 消息的速率限制
auditctl -b 控制 backlog 限制
auditctl -s 查询 audit 守护进程的当前状态
auditctl -S 指定要 audit 的系统调用。在系统上运行 auditctl -S 之前,请添加 -F arch=b64 以防止架构不匹配警告。
-e、-f、-r 和 -b 选项也可以在 audit.rules 文件中指定,以避免每次启动 audit 守护进程时都必须输入它们。
每当您使用 auditctl -s 查询 audit 守护进程的状态或使用 auditctl -eFLAG 更改状态标志时,都会打印一条状态消息(包括上述参数的每个参数的信息)。以下示例突出显示了典型的 audit 状态消息。
auditctl -s 的示例输出 #enabled 1 failure 1 pid 790 rate_limit 0 backlog_limit 64 lost 0 backlog 0 backlog_wait_time 15000 loginuid_immutable 0 unlocked
|
标志 |
含义 [可能的值] |
命令 |
|---|---|---|
|
|
设置启用标志。 [0..2] 0=禁用, 1=启用, 2=启用并锁定配置。请注意,这会禁用日志记录系统调用,并且其他事件仍可能被记录。 (请参阅 |
|
|
|
设置失败标志。 [0..2] 0=静默, 1=printk, 2=panic (立即停止,不同步待写入磁盘的挂起数据) |
|
|
|
|
— |
|
|
设置每秒的消息限制。 如果速率不为零且超过限制,则会触发失败标志中指定的操作。 |
|
|
|
指定允许的未处理审计缓冲区最大数量。 如果所有缓冲区都已满,则会触发失败标志中指定的操作。 |
|
|
|
统计当前丢失的审计消息数量。 |
— |
|
|
统计当前未处理的审计缓冲区数量。 |
— |
可以使用 auditctl 从 shell 单独调用控制审计系统的命令,也可以使用 auditctl - R 从文件中批量读取。 后一种方法由 init 脚本用于在启动审计守护程序后从文件 /etc/audit/audit.rules 加载规则。 规则会按从上到下的顺序执行。 这些规则中的每一个都会扩展为单独的 auditctl 命令。 在规则文件中使用的语法与用于 auditctl 命令的语法相同。
通过在命令行上执行 auditctl 对正在运行的审计系统所做的更改不会在系统重启后持续存在。 为了使更改持续存在,请将它们添加到 /etc/audit/audit.rules 文件中,如果它们当前未加载到审计中,请重启审计系统以加载修改后的规则集,方法是使用 systemctl restart auditd 命令。
-b 10001 -f 12 -r 103 -e 14
指定未处理审计缓冲区的最大数量。 根据日志记录活动级别,您可能需要调整缓冲区数量以避免对系统造成过大的审计负载。 | |
指定要使用的失败标志。 请参阅 表 40.1,“审计状态标志” 以获取可能的值。 | |
指定内核可能发出的每秒的最大消息数。 请参阅 表 40.1,“审计状态标志” 以获取详细信息。 | |
启用或禁用审计子系统。 |
使用审计,您可以跟踪对重要文件、配置或资源进行的任何类型的文件系统访问。 您可以添加监视这些文件,并为每种监视类型分配键,以便更好地识别日志中的信息。
-w /etc/shadow1 -w /etc -p rx2 -w /etc/passwd -k fk_passwd -p rwxa3
选项 | |
此规则将监视添加到 | |
此规则将文件监视添加到 |
系统调用审计让您可以跟踪系统行为,甚至低于应用程序级别。 在设计这些规则时,请考虑审计大量的系统调用可能会增加系统负载并导致磁盘空间不足。 请仔细考虑需要跟踪哪些事件以及如何过滤它们以使其更加具体。
-a exit,always -S mkdir1 -a exit,always -S access -F a1=42 -a exit,always -S ipc -F a0=23 -a exit,always -S open -F success!=04 -a task,always -F auid=05 -a task,always -F uid=0 -F auid=501 -F gid=wheel6
此规则激活对 | |
此规则将审计添加到访问系统调用,但仅当系统调用的第二个参数 ( | |
此规则将审计上下文添加到 IPC 多路复用系统调用。 具体的 | |
此规则审计尝试调用 open 的失败尝试。 | |
此规则是任务规则的示例 (关键字: | |
最后一个规则大量使用了过滤器。 所有过滤器选项都使用逻辑 AND 运算符组合在一起,这意味着此规则适用于所有携带审计 ID 为 |
您不仅可以向审计系统添加规则,还可以删除它们。 有不同的方法可以一次删除整个规则集,也可以删除系统调用规则或文件和目录监视
-D1 -d exit,always -S mkdir2 -W /etc3
清除审计规则队列并删除任何预先存在的规则。 此规则用作 | |
此规则删除系统调用规则。 必须在需要从规则队列中删除的任何系统调用规则之前加上 | |
此规则告诉审计从规则队列中丢弃对 |
要概述当前审计设置中使用的规则,请运行 auditctl -l。 此命令会逐行显示所有规则。
auditctl -l 列出规则 #exit,always watch=/etc perm=rx exit,always watch=/etc/passwd perm=rwxa key=fk_passwd exit,always watch=/etc/shadow perm=rwxa exit,always syscall=mkdir exit,always a1=4 (0x4) syscall=access exit,always a0=2 (0x2) syscall=ipc exit,always success!=0 syscall=open
您可以使用各种过滤器选项构建复杂的审计规则。 有关构建审计过滤器规则和审计规则的可用选项的更多信息,请参阅 auditctl(8) man 页面。
要了解 aureport 实用程序的作用,了解审计守护程序生成的日志的结构以及记录事件的确切内容至关重要。 然后,您可以确定哪种报告类型最适合您的需求。
以下示例重点介绍了审计记录的两个典型事件以及如何在审计日志中读取它们的跟踪。 日志 (如果启用了日志轮换) 存储在 /var/log/audit 目录中。
日志记录两种类型的信息:记录类型和事件字段。 记录类型由每个日志条目中的 type= 标识。 事件字段是等号左侧的所有其他项目。 在以下示例中,type=SYSCALL 和 type=CWD 是记录类型,而 arch=c000003e 和 syscall=2 是事件字段,后跟其值。
请参阅 audit-devel 包中的 /usr/include/libaudit.h 文件,以查看完整的记录类型列表及其定义。
运行 ausyscall --dump 命令以查看系统调用编号表及其代表的含义
> ausyscall --dump
Using x86_64 syscall table:
0 read
1 write
2 open
3 close
4 stat
5 fstat
[...]第一个示例是一个简单的 less 命令。 第二个示例涵盖了用户尝试远程登录到运行审计的机器时日志中大量的 PAM 活动。
type=SYSCALL msg=audit(1234874638.599:5207): arch=c000003e syscall=2 success=yes exit=4 a0=62fb60 a1=0 a2=31 a3=0 items=1 ppid=25400 pid =25616 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=1164 comm="less" exe="/usr/bin/less" key="doc_log" type=CWD msg=audit(1234874638.599:5207): cwd="/root" type=PATH msg=audit(1234874638.599:5207): item=0 name="/var/log/audit/ audit.log" inode=1219041 dev=08:06 mode=0100644 ouid=0 ogid=0 rdev=00:00
上述事件,一个简单的 less /var/log/audit/audit.log,向日志写入了三条消息。 它们都紧密相关,如果没有其他消息,您将无法理解其中任何一条。 第一条消息揭示了以下信息
类型
记录的事件类型。 在这种情况下,它将 SYSCALL 类型分配给由系统调用触发的事件。 记录了 CWD 事件以记录系统调用时当前的工作目录。 生成一个 PATH 事件用于传递给系统调用的每个路径。 open 系统调用接受一个路径参数并生成一个 PATH 事件。 重要的是要理解,PATH 事件报告传递的路径名称字符串参数,不进行任何进一步的解释,因此相对路径需要手动与 CWD 事件报告的路径组合才能确定访问的对象。
msg
用方括号括起来的消息 ID。 ID 分为两部分。 所有字符之前 : 表示 Unix epoch 时间戳。 冒号后的数字表示实际的事件 ID。 从一个应用程序的系统调用记录的所有事件都具有相同的事件 ID。 如果应用程序发出第二个系统调用,它将获得另一个事件 ID。
arch
引用系统调用的 CPU 架构。 使用 ausearch 命令的 -i 选项解码此信息,以便在搜索日志时使用。
syscall
系统调用的类型,就像在特定系统上的 strace 中打印的一样。 此数据来自 /usr/include/asm/unistd.h 下的系统调用列表,并且可能因架构而异。 在这种情况下,syscall=2 指的是 open 系统调用 (请参阅 man open(2)) 由 less 应用程序调用。
success
系统调用是否成功或失败。
exit
系统调用返回的退出值。 对于此示例中使用的 open 系统调用,这是文件描述符编号。 这因系统调用而异。
a0 到 a3系统调用的前四个参数的数字形式。 这些值取决于系统调用。 在此示例 (一个 open 系统调用) 中,使用以下内容
a0=62fb60 a1=8000 a2=31 a3=0
a0 是传递路径的起始地址。 a1 是标志。 十六进制表示法中的 8000 转换为八进制表示法中的 100000,后者又转换为 O_LARGEFILE。 a2 是模式,因为未指定 O_CREAT,所以未使用。 a3 未由 open 系统调用传递。 查看相关系统调用的手册页,以找出与其一起使用的参数。
items
传递给应用程序的字符串数量。
ppid
被分析进程的父进程的进程 ID。
pid
被分析进程的进程 ID。
auid
审计 ID。 在用户登录时会向进程分配审计 ID。 然后,此 ID 将传递给用户启动的任何子进程。 即使用户更改其身份,审计 ID 仍然相同。 因此,您可以始终将操作追溯到原始登录用户。
uid
启动进程的用户的用户 ID。 在这种情况下,0 代表 root。
gid
启动进程的用户的组 ID。 在这种情况下,0 代表 root。
euid, suid, fsuid启动进程的用户的有效用户 ID、设置用户 ID 和文件系统用户 ID。
egid, sgid, fsgid有效的组 ID、设置组 ID 和用户启动进程的文件系统组 ID。
tty
应用程序启动的终端。在这种情况下,是在 SSH 会话中使用的伪终端。
ses
登录会话 ID。当用户登录时设置此进程属性,可以将任何进程与特定的用户登录关联起来。
comm
应用程序名称,在任务列表中显示的名称。
exe
已解析的二进制程序路径。
subj
auditd 记录进程是否受任何安全上下文的约束,例如 AppArmor。 unconstrained,在这种情况下,表示该进程不受 AppArmor 的约束。如果该进程受到约束,则会记录二进制路径加上 AppArmor 配置文件模式。
key
如果您正在审计许多目录或文件,请为每个监视项分配键字符串。您可以使用这些键与 ausearch 结合使用,以搜索日志中的此类事件。
示例 less 调用触发的第二个消息除了执行 less 命令时当前的工作目录之外,没有透露任何信息。
第三条消息显示以下内容(type 和 message 标志已经介绍过)
item
在此示例中,item 引用 a0 参数——一个路径——该路径与原始 SYSCALL 消息相关联。如果原始调用有多个路径参数(例如 cp 或 mv 命令),则会为第二个路径参数记录额外的 PATH 事件。
name
引用作为参数传递给 open 系统调用的路径。
inode
引用与 name 对应的 inode 编号。
dev
指定存储文件的设备。在这种情况下,08:06,代表 /dev/sda1 或 “第一个 IDE 设备上的第一个分区。”
mode
文件的访问权限的数字表示形式。在这种情况下,root 具有读写权限,其组 (root) 具有读取权限,而其余所有人无法访问该文件。
ouid 和 ogid引用 inode 本身的 UID 和 GID。
rdev
对于此示例不适用。 rdev 条目适用于块或字符设备,不适用于文件。
示例 40.9,“通过 SSH 登录的高级审计事件” 强调了传入 SSH 连接触发的审计事件。大多数消息与 PAM 堆栈相关,反映了 SSH PAM 过程的不同阶段。其中一些审计消息携带嵌套的 PAM 消息,表明 PAM 过程的特定阶段已经达到。虽然 PAM 消息由 audit 记录,但 audit 为每个事件分配自己的消息类型
type=USER_AUTH msg=audit(1234877011.791:7731): user pid=26127 uid=0 1 auid=4294967295 ses=4294967295 msg='op=PAM:authentication acct="root" exe="/usr/sbin/sshd" (hostname=jupiter.example.com, addr=192.168.2.100, terminal=ssh res=success)' type=USER_ACCT msg=audit(1234877011.795:7732): user pid=26127 uid=0 2 auid=4294967295 ses=4294967295 msg='op=PAM:accounting acct="root" exe="/usr/sbin/sshd" (hostname=jupiter.example.com, addr=192.168.2.100, terminal=ssh res=success)' type=CRED_ACQ msg=audit(1234877011.799:7733): user pid=26125 uid=0 3 auid=4294967295 ses=4294967295 msg='op=PAM:setcred acct="root" exe="/usr/sbin/sshd" (hostname=jupiter.example.com, addr=192.168.2.100, terminal=/dev/pts/0 res=success)' type=LOGIN msg=audit(1234877011.799:7734): login pid=26125 uid=0 old auid=4294967295 new auid=0 old ses=4294967295 new ses=1172 type=USER_START msg=audit(1234877011.799:7735): user pid=26125 uid=0 4 auid=0 ses=1172 msg='op=PAM:session_open acct="root" exe="/usr/sbin/sshd" (hostname=jupiter.example.com, addr=192.168.2.100, terminal=/dev/pts/0 res=success)' type=USER_LOGIN msg=audit(1234877011.823:7736): user pid=26128 uid=0 5 auid=0 ses=1172 msg='uid=0: exe="/usr/sbin/sshd" (hostname=jupiter.example.com, addr=192.168.2.100, terminal=/dev/pts/0 res=success)' type=CRED_REFR msg=audit(1234877011.828:7737): user pid=26128 uid=0 6 auid=0 ses=1172 msg='op=PAM:setcred acct="root" exe="/usr/sbin/sshd" (hostname=jupiter.example.com, addr=192.168.2.100, terminal=/dev/pts/0 res=success)'
存储在 /var/log/audit 目录中的原始审计报告往往变得庞大且难以理解。为了更轻松地找到相关消息,请使用 aureport 实用程序并创建自定义报告。
以下用例突出显示了一些您可以使用 aureport 生成的可能的报告类型
当审计日志已移动到另一台机器上,或者您想在本地机器上分析多台机器的日志而不想连接到这些机器中的每一个时,请将日志移动到本地文件,并让 aureport 在本地分析它们
>sudoaureport -if myfileSummary Report ====================== Range of time in logs: 03/02/09 14:13:38.225 - 17/02/09 14:52:27.971 Selected time for report: 03/02/09 14:13:38 - 17/02/09 14:52:27.971 Number of changes in configuration: 13 Number of changes to accounts, groups, or roles: 0 Number of logins: 6 Number of failed logins: 13 Number of authentications: 7 Number of failed authentications: 573 Number of users: 1 Number of terminals: 9 Number of host names: 4 Number of executables: 17 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: 1211 Number of events: 5320
上述命令,aureport 不带任何参数,提供从 myfile 中包含的日志生成的标准常规摘要报告。要创建更详细的报告,请将 -if 选项与以下任何选项结合使用。例如,生成一个限制在特定时间范围内的登录报告
>sudoaureport -l -ts 14:00 -te 15:00 -if myfileLogin Report ============================================ # date time auid host term exe success event ============================================ 1. 17/02/09 14:21:09 root: 192.168.2.100 sshd /usr/sbin/sshd no 7718 2. 17/02/09 14:21:15 0 jupiter /dev/pts/3 /usr/sbin/sshd yes 7724
某些信息,例如用户 ID,以数字形式打印。要将这些转换为人类可读的文本格式,请将 -i 选项添加到您的 aureport 命令中。
如果您对当前的审计统计信息(事件、登录、进程等)感兴趣,请运行 aureport 不带任何其他选项。
要将普通 aureport 的总体统计信息分解为失败事件的统计信息,请使用 aureport --failed
>sudoaureport --failedFailed Summary Report ====================== Range of time in logs: 03/02/09 14:13:38.225 - 17/02/09 14:57:35.183 Selected time for report: 03/02/09 14:13:38 - 17/02/09 14:57:35.183 Number of changes in configuration: 0 Number of changes to accounts, groups, or roles: 0 Number of logins: 0 Number of failed logins: 13 Number of authentications: 0 Number of failed authentications: 574 Number of users: 1 Number of terminals: 5 Number of host names: 4 Number of executables: 11 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: 708 Number of events: 1583
如果您想将普通 aureport 的总体统计信息分解为成功事件的统计信息,请使用 aureport --success
>sudoaureport --successSuccess Summary Report ====================== Range of time in logs: 03/02/09 14:13:38.225 - 17/02/09 15:00:01.535 Selected time for report: 03/02/09 14:13:38 - 17/02/09 15:00:01.535 Number of changes in configuration: 13 Number of changes to accounts, groups, or roles: 0 Number of logins: 6 Number of failed logins: 0 Number of authentications: 7 Number of failed authentications: 0 Number of users: 1 Number of terminals: 7 Number of host names: 3 Number of executables: 16 Number of files: 215 Number of AVC's: 0 Number of MAC events: 0 Number of failed syscalls: 0 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: 558 Number of events: 3739
除了专用摘要报告(主摘要以及失败和成功摘要)之外,请将 --summary 选项与大多数其他选项结合使用,以创建特定兴趣领域的摘要报告。但是,并非所有报告都支持此选项。此示例为用户登录事件创建摘要报告
>sudoaureport -u -i --summaryUser Summary Report =========================== total auid =========================== 5640 root 13 tux 3 wilber
要获取 audit 记录的事件概览,请使用 aureport -e 命令。此命令生成一个编号的事件列表,包括日期、时间、事件编号、事件类型和 audit ID。
>sudoaureport -e -ts 14:00 -te 14:21 Event Report =================================== # date time event type auid success =================================== 1. 17/02/09 14:20:27 7462 DAEMON_START 0 yes 2. 17/02/09 14:20:27 7715 CONFIG_CHANGE 0 yes 3. 17/02/09 14:20:57 7716 USER_END 0 yes 4. 17/02/09 14:20:57 7717 CRED_DISP 0 yes 5. 17/02/09 14:21:09 7718 USER_LOGIN -1 no 6. 17/02/09 14:21:15 7719 USER_AUTH -1 yes 7. 17/02/09 14:21:15 7720 USER_ACCT -1 yes 8. 17/02/09 14:21:15 7721 CRED_ACQ -1 yes 9. 17/02/09 14:21:15 7722 LOGIN 0 yes 10. 17/02/09 14:21:15 7723 USER_START 0 yes 11. 17/02/09 14:21:15 7724 USER_LOGIN 0 yes 12. 17/02/09 14:21:15 7725 CRED_REFR 0 yes
要从进程的角度分析日志,请使用 aureport -p 命令。此命令生成一个编号的进程事件列表,包括日期、时间、进程 ID、可执行文件的名称、系统调用、audit ID 和事件编号。
aureport -p
Process ID Report
======================================
# date time pid exe syscall auid event
======================================
1. 13/02/09 15:30:01 32742 /usr/sbin/cron 0 0 35
2. 13/02/09 15:30:01 32742 /usr/sbin/cron 0 0 36
3. 13/02/09 15:38:34 32734 /usr/lib/gdm/gdm-session-worker 0 -1 37要从系统调用的角度分析 audit 日志,请使用 aureport -s 命令。此命令生成一个编号的系统调用事件列表,包括日期、时间、系统调用的编号、进程 ID、使用此调用的命令的名称、audit ID 和事件编号。
>sudoaureport -sSyscall Report ======================================= # date time syscall pid comm auid event ======================================= 1. 16/02/09 17:45:01 2 20343 cron -1 2279 2. 16/02/09 17:45:02 83 20350 mktemp 0 2284 3. 16/02/09 17:45:02 83 20351 mkdir 0 2285
要从可执行文件的角度分析 audit 日志,请使用 aureport -x 命令。此命令生成一个编号的可执行文件事件列表,包括日期、时间、可执行文件的名称、它运行的终端、执行它的主机、audit ID 和事件编号。
aureport -x
Executable Report
====================================
# date time exe term host auid event
====================================
1. 13/02/09 15:08:26 /usr/sbin/sshd sshd 192.168.2.100 -1 12
2. 13/02/09 15:08:28 /usr/lib/gdm/gdm-session-worker :0 ? -1 13
3. 13/02/09 15:08:28 /usr/sbin/sshd ssh 192.168.2.100 -1 14要生成一个专注于文件访问的 audit 日志报告,请使用 aureport -f 命令。此命令生成一个编号的文件相关事件列表,包括日期、时间、访问的文件的名称、访问它的系统调用的编号、命令的成功或失败、访问该文件的可执行文件、audit ID 和事件编号。
>sudoaureport -fFile Report =============================================== # date time file syscall success exe auid event =============================================== 1. 16/02/09 17:45:01 /etc/shadow 2 yes /usr/sbin/cron -1 2279 2. 16/02/09 17:45:02 /tmp/ 83 yes /bin/mktemp 0 2284 3. 16/02/09 17:45:02 /var 83 no /bin/mkdir 0 2285
要生成一个 audit 日志报告,说明哪些用户在您的系统上运行哪些可执行文件,请使用 aureport -u 命令。此命令生成一个编号的用户相关事件列表,包括日期、时间、audit ID、使用的终端、主机、可执行文件的名称和事件 ID。
aureport -u
User ID Report
====================================
# date time auid term host exe event
====================================
1. 13/02/09 15:08:26 -1 sshd 192.168.2.100 /usr/sbin/sshd 12
2. 13/02/09 15:08:28 -1 :0 ? /usr/lib/gdm/gdm-session-worker 13
3. 14/02/09 08:25:39 -1 ssh 192.168.2.101 /usr/sbin/sshd 14要创建一个专注于您机器上的登录尝试的报告,请运行 aureport -l 命令。此命令生成一个编号的登录相关事件列表,包括日期、时间、audit ID、使用的主机和终端、可执行文件的名称、尝试的成功或失败以及事件 ID。
>sudoaureport -l -iLogin Report ============================================ # date time auid host term exe success event ============================================ 1. 13/02/09 15:08:31 tux: 192.168.2.100 sshd /usr/sbin/sshd no 19 2. 16/02/09 12:39:05 root: 192.168.2.101 sshd /usr/sbin/sshd no 2108 3. 17/02/09 15:29:07 geeko: ? tty3 /bin/login yes 7809
要分析特定时间范围的日志,例如 2009 年 2 月 16 日的工作时间,首先确定所需的数据是否包含在当前的 audit.log 中,或者日志是否已通过运行 aureport -t 轮换。
aureport -t
Log Time Range Report
=====================
/var/log/audit/audit.log: 03/02/09 14:13:38.225 - 17/02/09 15:30:01.636当前的 audit.log 包含所需的所有数据。否则,使用 -if 选项将 aureport 命令指向包含所需数据的日志文件。
然后,指定所需的开始日期和时间以及结束日期和时间,并将其与所需的报告选项结合使用。此示例侧重于登录尝试
>sudoaureport -ts 02/16/09 8:00 -te 02/16/09 18:00 -lLogin Report ============================================ # date time auid host term exe success event ============================================ 1. 16/02/09 12:39:05 root: 192.168.2.100 sshd /usr/sbin/sshd no 2108 2. 16/02/09 12:39:12 0 192.168.2.100 /dev/pts/1 /usr/sbin/sshd yes 2114 3. 16/02/09 13:09:28 root: 192.168.2.100 sshd /usr/sbin/sshd no 2131 4. 16/02/09 13:09:32 root: 192.168.2.100 sshd /usr/sbin/sshd no 2133 5. 16/02/09 13:09:37 0 192.168.2.100 /dev/pts/2 /usr/sbin/sshd yes 2139
使用 -ts 选项指定开始日期和时间。任何时间戳等于或晚于给定开始时间的事件都将出现在报告中。如果您省略日期,aureport 假定您指的是 今天。如果您省略时间,它假定开始时间应该是指定日期的午夜。
使用 -te 选项指定结束日期和时间。任何时间戳等于或早于给定事件时间的事件都将出现在报告中。如果您省略日期,aureport 假定您指的是今天。如果您省略时间,它假定结束时间应该是现在。使用与 -ts 相同的日期和时间格式。
除了摘要报告之外,所有报告都以列格式打印并发送到 STDOUT,这意味着可以将此数据轻松写入其他命令。在 第 40.8 节,“可视化 audit 数据” 中介绍的可视化脚本是进一步处理 audit 生成的数据的方法的示例。
aureport 工具可帮助您创建系统上发生情况的总体摘要,但如果您对特定事件的详细信息感兴趣,ausearch 是要使用的工具。
ausearch 允许您使用与 /var/log/audit/audit.log 中事件消息中出现的标志相关的特殊键和搜索词来搜索 audit 日志。并非所有记录类型都包含相同的搜索词。例如,PATH 记录不包含 hostname 或 uid 条目。
在搜索时,请确保选择适当的搜索条件以捕获您所需的所有记录。否则,您可能会搜索特定类型的记录,但仍然会获得各种其他相关记录。这是由于内核的不同部分为与要查找的事件相关的事件贡献额外的记录。例如,对于 open 系统调用,您始终会获得 PATH 记录以及 SYSCALL 记录。
可以使用逻辑 AND 运算符将任何命令行选项组合起来以缩小搜索范围。
当审计日志已移动到另一台机器上,或者您想在本地机器上分析多台机器的日志而不想连接到这些机器中的每一个时,请将日志移动到本地文件,并让 ausearch 在本地搜索它们
>sudoausearch -option -if myfile
某些信息,例如用户 ID,以数字形式打印。要将这些转换为人类可读的文本格式,请将 -i 选项添加到您的 ausearch 命令中。
如果您之前运行过 audit 报告或执行过 autrace,您应该分析日志中特定事件的跟踪。 第 40.5 节,“理解 audit 日志并生成报告” 中描述的大多数报告类型在其输出中都包含 audit 事件 ID。audit 事件 ID 是 audit 消息 ID 的第二部分,由 Unix epoch 时间戳和 audit 事件 ID 组成,两者之间用冒号分隔。从一个应用程序的系统调用记录的所有事件都具有相同的事件 ID。使用此事件 ID 与 ausearch 结合使用,以从日志中检索此事件的跟踪。
使用类似于以下命令
>sudoausearch -a 5207---- time->Tue Feb 17 13:43:58 2009 type=PATH msg=audit(1234874638.599:5207): item=0 name="/var/log/audit/audit.log" inode=1219041 dev=08:06 mode=0100644 ouid=0 ogid=0 rdev=00:00 type=CWD msg=audit(1234874638.599:5207): cwd="/root" type=SYSCALL msg=audit(1234874638.599:5207): arch=c000003e syscall=2 success=yes exit=4 a0=62fb60 a1=0 a2=31 a3=0 items=1 ppid=25400 pid=25616 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=1164 comm="less" exe="/usr/bin/less" key="doc_log"
ausearch -a 命令获取日志中与提供的 audit 事件 ID 相关的所有记录并显示它们。此选项可以与其他任何选项结合使用。
要搜索特定消息类型的 audit 记录,请使用 ausearch -m MESSAGE_TYPE 命令。有效的消息类型示例包括 PATH、SYSCALL 和 USER_LOGIN。运行 ausearch -m 不带消息类型会显示所有消息类型的列表。
要查看与特定登录用户 ID 关联的记录,请使用 ausearch -ul 命令。如果该用户能够成功登录,它将显示与指定用户登录 ID 相关的任何记录。
使用 ausearch -ua 查看与任何用户 ID(包括用户 ID 和有效用户 ID)相关的记录。使用 ausearch -ui UID 查看与特定用户 ID 相关的报告。要搜索与特定有效用户 ID 相关的记录,请使用 ausearch -ue EUID。搜索用户 ID 指的是创建进程的用户的用户 ID。搜索有效用户 ID 指的是运行此进程所需的的用户 ID 和权限。
使用 ausearch -ga 命令查看与任何组 ID(包括组 ID 和有效组 ID)相关的记录。使用 ausearch -gi GID 查看与特定用户 ID 相关的报告。要搜索与特定有效组 ID 相关的记录,请使用 ausearch -ge EGID。
使用 ausearch -c COMM_NAME 命令查看与某个命令相关的记录,例如,ausearch -c less 用于查看与 less 命令相关的所有记录。
使用 ausearch -x EXE 命令查看与某个可执行文件相关的记录,例如 ausearch -x /usr/bin/less 用于查看与 /usr/bin/less 可执行文件相关的所有记录。
使用 ausearch -sc SYSCALL 命令查看与某个系统调用相关的记录,例如,ausearch -sc open 用于查看与 open 系统调用相关的所有记录。
使用 ausearch -p PID 命令查看与某个进程 ID 相关的记录,例如 ausearch -p 13368 用于查看与此进程 ID 相关的所有记录。
使用 ausearch -sv SUCCESS_VALUE 查看包含某个系统调用成功值的记录,例如,ausearch -sv yes 用于查看所有成功的系统调用。
使用 ausearch -f FILE_NAME 查看包含某个文件名的记录,例如,ausearch -f /foo/bar 用于查看与 /foo/bar 文件相关的所有记录。仅使用文件名也可以工作,但使用相对路径不起作用。
使用 ausearch -tm TERM 查看与某个终端相关的事件记录,例如,ausearch -tm ssh 用于查看与 SSH 终端上的事件相关的所有记录,ausearch -tm tty 用于查看与控制台相关的所有事件。
使用 ausearch -hn HOSTNAME 查看与某个远程主机名相关的记录,例如,ausearch -hn jupiter.example.com。可以使用主机名、完全限定域名或数字网络地址。
查看包含审计规则集中分配的用于标识特定类型事件的某个键的记录。使用 ausearch -k KEY_FIELD,例如,ausearch -k CFG_etc 以显示包含 CFG_etc 键的任何记录。
查看包含审计规则集中分配的用于标识特定类型事件的某个字符串的记录。在文件名、主机名和终端上匹配整个字符串。使用 ausearch -w WORD。
使用 -ts 和 -te 将搜索范围限制在某个时间范围内。 -ts 选项用于指定开始日期和时间,-te 选项用于指定结束日期和时间。可以将这些选项与上述任何选项结合使用。这些选项的使用方式与 aureport 类似。
除了使用您设置的规则监视系统之外,还可以使用 autrace 命令对单个进程执行专用审计。 autrace 的工作方式类似于 strace 命令,但收集略有不同的信息。 autrace 的输出写入 /var/log/audit/audit.log,并且与标准的审计日志条目没有区别。
在对进程执行 autrace 时,请确保从队列中清除任何审计规则,以避免这些规则与 autrace 本身添加的规则冲突。使用 auditctl -D 命令删除审计规则。这将停止所有常规审计。
>sudoauditctl -DNo rulesautrace /usr/bin/lessWaiting to execute: /usr/bin/less Cleaning up... No rules Trace complete. You can locate the records with 'ausearch -i -p 7642'
始终使用可执行文件的完整路径来跟踪 autrace。完成跟踪后,autrace 提供跟踪的事件 ID,以便可以使用 ausearch 分析整个数据跟踪。要将审计系统恢复为使用审计规则集,请使用 systemctl restart auditd 重新启动审计守护程序。
/var/log/audit/audit.log 中的数据跟踪以及 aureport 生成的不同报告类型(如 第 40.5.2 节,“生成自定义审计报告” 所述)并未向用户提供直观的阅读体验。 aureport 的输出格式为列,因此易于连接到审计框架以可视化审计数据的任何 sed、Perl 或 awk 脚本使用。
可视化脚本(参见 第 41.6 节,“配置日志可视化”)是使用 openSUSE Leap 或任何其他 Linux 发行版提供的标准 Linux 工具创建易于阅读的审计输出的一种示例。以下示例可帮助您了解如何将纯审计报告转换为人类可读的图形。
第一个示例说明了程序和系统调用的关系。要获得此类数据,需要确定提供用于生成最终图形的源数据的适当 aureport 命令
>sudoaureport -s -iSyscall Report ======================================= # date time syscall pid comm auid event ======================================= 1. 16/02/09 17:45:01 open 20343 cron unset 2279 2. 16/02/09 17:45:02 mkdir 20350 mktemp root 2284 3. 16/02/09 17:45:02 mkdir 20351 mkdir root 2285 ...
可视化脚本需要做的第一件事是在此报告上提取感兴趣的列。在此示例中,它们是 syscall 和 comm 列。输出经过排序并删除重复项;然后将最终输出写入可视化程序本身
LC_ALL=C aureport -s -i | awk '/^[0-9]/ { print $6" "$4 }' | sort | uniq | mkgraph第二个示例说明了不同类型的事件以及已记录的每种事件的数量。提取此类信息的适当 aureport 命令是 aureport -e
>sudoaureport -e -i --summary Event Summary Report ====================== total type ====================== 2434 SYSCALL 816 USER_START 816 USER_ACCT 814 CRED_ACQ 810 LOGIN 806 CRED_DISP 779 USER_END 99 CONFIG_CHANGE 52 USER_LOGIN
由于此类型的报告已经包含两列输出,因此将其馈送到可视化脚本并转换为条形图。
>sudoaureport -e -i --summary | mkbar events
有关审计数据可视化的背景信息,请参阅审计项目网站 https://people.redhat.com/sgrubb/audit/visualize/index.html。
审计系统还允许外部应用程序实时访问和使用 auditd 守护程序。此功能由所谓的 审计调度器 提供,它允许例如入侵检测系统使用 auditd 以接收增强的检测信息。
auditd 的配置存储在 /etc/audit/auditd.conf 中。该文件包括以下选项
q_depth
指定事件调度器内部队列的大小。如果 syslog 抱怨审计事件丢失,请增加此值。默认值为 250。
overflow_action
指定审计守护程序对内部队列溢出的反应方式。可能的值包括 ignore(不执行任何操作)、syslog(向 syslog 发出警告)、suspend(停止处理事件)、single(将计算机系统置于单用户模式)或 halt(关闭系统)。
priority_boost
指定审计事件调度器的优先级(除了审计守护程序本身的优先级)。默认值为 4,表示优先级不发生变化。
name_format
指定计算机节点名称插入到审计事件的方式。可能的值包括 none(不插入计算机名称)、hostname(由 gethostname 系统调用返回的名称)、fqd(计算机的完全限定域名)、numeric(计算机的 IP 地址)或 user(用户定义的字符串)。默认值为 none。
name
指定用于标识计算机的用户定义的字符串。必须将 name_format 选项设置为 user,否则将忽略此选项。
max_restarts
一个非负数,它告诉审计事件调度器可以尝试重新启动崩溃的插件的次数。默认值为 10。
q_depth = 250 overflow_action = SYSLOG priority_boost = 4 name_format = HOSTNAME #name = mydomain
插件程序将其配置文件安装到特殊目录 /etc/audit/plugins.d 中。插件配置文件具有以下选项
active
指定程序是否使用 auditd。可能的值为 yes 或 no。
direction
指定插件的设计用于与审计通信的方式。它告知事件调度器事件流动的方向。可能的值为 in 或 out。
path
指定插件可执行文件的绝对路径。对于内部插件,此选项指定插件名称。
类型
指定插件的运行方式。可能的值为 builtin 或 always。对于内部插件(af_unix 和 syslog)使用 builtin,对于大多数(如果不是全部)其他插件使用 always。默认值为 always。
args
指定传递给插件程序的参数。通常,插件程序从其配置文件读取其参数,不需要接收任何参数。参数限制为两个。
format
指定审计调度器传递给插件程序的数据格式。有效选项为 binary 或 string。 binary 以事件调度器从审计守护程序接收到的方式传递数据。 string 指示调度器将事件更改为可由审计解析库解析的字符串。默认值为 string。
active = no direction = out path = /sbin/audisp-syslog type = builtin args = LOG_INFO format = string