Red Hat Training

A Red Hat training course is available for RHEL 8

12.5. 了解 Audit 日志文件

默认情况下,审计系统将日志条目存储在 /var/log/audit/audit.log 文件中;如果启用了日志轮转,则轮转 audit.log 文件存储在同一个目录中。

添加以下审计规则,记录每次尝试读取或修改 /etc/ssh/sshd_config 文件:

# auditctl -w /etc/ssh/sshd_config -p warx -k sshd_config

如果 auditd 守护进程正在运行,例如使用以下命令在 Audit 日志文件中创建新事件:

cat /etc/ssh/sshd_config

audit.log 文件中的该事件如下。

type=SYSCALL msg=audit(1364481363.243:24287): arch=c000003e syscall=2 success=no exit=-13 a0=7fffd19c5592 a1=0 a2=7fffd19c4b50 a3=a items=1 ppid=2686 pid=3538 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts0 ses=1 comm="cat" exe="/bin/cat" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="sshd_config"
type=CWD msg=audit(1364481363.243:24287):  cwd="/home/shadowman"
type=PATH msg=audit(1364481363.243:24287): item=0 name="/etc/ssh/sshd_config" inode=409248 dev=fd:00 mode=0100600 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0  nametype=NORMAL cap_fp=none cap_fi=none cap_fe=0 cap_fver=0
type=PROCTITLE msg=audit(1364481363.243:24287) : proctitle=636174002F6574632F7373682F737368645F636F6E666967

以上事件由四个记录组成,它们共享相同的时间戳和序列号。记录始终以 type= 关键字开头。每个记录由多个 name=值对 组成,值对由空格或逗号分开。对上述事件的详细分析如下:

第一次记录

type=SYSCALL
type 字段包含记录的类型。在本例中,SYSC ALL 值指定此记录是由系统调用对内核触发的。
msg=audit(1364481363.243:24287):

msg 字段记录:

  • 时间戳和记录的唯一 ID,格式为 audit(time_stamp:ID)。如果多个记录是作为同一审计事件的一部分生成的,则可以共享相同的时间戳和 ID。时间戳在 1970 年 1 月 1 日使用 Unix 时间格式 - 秒,自 00:00:00 UTC 起。
  • 各种特定于事件 的名称= 内核或用户空间应用程序提供的值对.
arch=c000003e
arch 字段包含系统的 CPU 架构信息。该值 c000003e 以十六进制表示法编码。使用 ausearch 命令搜索 Audit 记录时,请使用 -i 或 --interpret 选项自动将十六进制值转换为其人类可读的等效值。c000003e 值被解释为 x86_64
syscall=2
syscall字段记录了发送到内核的系统调用的类型。值 2 可以与其 /usr/include/asm/unistd_64.h 文件中的人类可读等效值匹配。在本例中,2open 系统调用。请注意,ausyscall 实用程序允许您将系统调用号转换为其人类可读的等效项。使用 ausyscall --dump 命令显示所有系统调用的列表及其编号。如需更多信息,请参阅 ausyscall(8)man page。
success=no
success 字段记录了该特定事件中记录的系统调用是成功还是失败。在这种情况下,调用没有成功。
exit=-13

exit 字段包含一个值,指定系统调用返回的退出代码。此值因不同的系统调用而异。您可以使用以下命令将值解读为其人类可读的等效值:

ausearch --interpret --exit -13

请注意,上例假定您的审计日志包含带有退出代码 -13 的事件。

a0=7fffd19c5592, a1=0, a2=7fffd19c5592, a3=a
a0a3字段记录了该事件中系统调用的前四个参数,用十六进制符号编码。这些参数取决于使用的系统调用,可以通过 ausearch 实用程序来解释。
items=1
items 字段包含系统调用记录后面的 PATH 辅助记录的数量。
ppid=2686
ppid 字段记录了父进程ID(PPID)。在这种情况下,2686 是父进程的 PPID,如 bash
pid=3538
pid 字段记录了流程 ID(PID)。在本例中,3538cat 进程的 PID。
auid=1000
auid字段记录了审计用户 ID,即loginuid。此 ID 在登录时分配给用户,并在每次用户的身份更改时继承,例如使用 su - john 命令切换用户帐户。
uid=1000
uid 字段记录了启动分析过程的用户的用户 ID。使用以下命令可以解读用户 ID:ausearch -i --uid UID.
gid=1000
gid 字段记录了启动分析过程的用户的组 ID。
euid=1000
euid 字段记录了启动分析过程的用户的有效用户 ID。
suid=1000
suid 字段记录了启动分析过程的用户的设置用户 ID。
fsuid=1000
fsuid 字段记录了启动分析进程的用户的文件系统用户 ID。
egid=1000
egid 字段记录了启动分析过程的用户的有效组 ID。
sgid=1000
sgid 字段记录了启动分析过程的用户的组 ID。
fsgid=1000
fsgid 字段记录了启动分析进程的用户的文件系统组 ID。
tty=pts0
tty 字段记录了分析过程被调用的终端。
ses=1
ses 字段记录了分析过程被调用的会话的会话 ID。
comm="cat"
comm 字段记录了用于调用分析过程的命令行名称。在本例中,cat 命令用于触发此审计事件
exe="/bin/cat"
exe 字段记录了用于调用分析过程的可执行文件的路径。
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
subj 字段记录了被分析的进程在执行时被标记的 SELinux 上下文。
key="sshd_config"
key 记录了与在审计日志中生成该事件的规则相关联的管理员定义的字符串。

第二记录

type=CWD

在第二条记录中,type 字段值为 CWD - 当前工作目录。此类型用于记录从中调用第一条记录中指定的系统调用的进程的工作目录。

此记录的目的是记录当前进程的位置,以便在相关 PATH 记录中捕获相对路径。这样,可以重建绝对路径。

msg=audit(1364481363.243:24287)
msg 字段持有与第一条记录中的值相同的时间戳和 ID 值。时间戳在 1970 年 1 月 1 日使用 Unix 时间格式 - 秒,自 00:00:00 UTC 起。
cwd="/home/user_name"
cwd 字段包含系统调用所在目录的路径。

第三个记录

type=PATH
在第三条记录中,type 字段值为 PATH。Audit 事件包含作为参数传递给系统调用的每个路径的 PATH-type 记录。在这个审计事件中,只有一个路径(/etc/ssh/sshd_config)作为参数。
msg=audit(1364481363.243:24287):
msg 字段拥有与第一和第二条记录中的值相同的时间戳和 ID 值。
item=0
item 字段表示在 SYSCALL 类型记录所引用的项目总数中,当前记录是哪个项目。这个数字基于零;值 0 表示它是第一项。
name="/etc/ssh/sshd_config"
name 字段记录了作为参数传递给系统调用的文件或目录的路径。在本例中,它是 /etc/ssh/sshd_config 文件。
inode=409248

inode 字段包含与该事件中记录的文件或目录相关联的 inode 号。以下命令显示与 409248 索引节点编号关联的文件或目录:

find / -inum 409248 -print
/etc/ssh/sshd_config
dev=fd:00
dev 字段指定了包含该事件中记录的文件或目录的设备的次要和主要 ID。在本例中,值表示 /dev/fd/0 设备。
mode=0100600
mode 字段记录文件或目录权限,由数字标记。它是 st_mode 字段中的 stat 命令返回。如需更多信息,请参阅 stat(2) man page。在这种情况下,0100600 可以解释为 -rw-------,这意味着只有 root 用户对 /etc/ssh/sshd_config 文件具有读取和写入权限。
ouid=0
ouid 字段记录了对象所有者的用户 ID。
ogid=0
ogid 字段记录了对象所有者的组 ID。
rdev=00:00
rdev 字段包含一个记录的设备标识符,仅用于特殊文件。在这种情况下,不会使用它,因为记录的文件是常规文件。
obj=system_u:object_r:etc_t:s0
obj 字段记录了 SELinux 上下文,在执行时,记录的文件或目录被贴上了标签。
nametype=NORMAL
nametype 字段记录了每个路径记录在给定系统调用的上下文中的操作意图。
cap_fp=none
cap_fp 字段记录了与设置文件或目录对象的基于文件系统的允许能力有关的数据。
cap_fi=none
cap_fi 字段记录了与文件或目录对象的基于继承文件系统的能力设置有关的数据。
cap_fe=0
cap_fe 字段记录了文件或目录对象基于文件系统能力的有效位的设置。
cap_fver=0
cap_fver 字段记录了文件或目录对象基于文件系统能力的版本。

第四个记录

type=PROCTITLE
type 字段包含记录的类型。在本例中,PROCTITLE 值指定此记录提供触发此审计事件的完整命令行,该事件由对内核的系统调用触发。
proctitle=636174002F6574632F7373682F737368645F636F6E666967
proctitle 字段记录了用于调用分析过程的命令的完整命令行。该字段采用十六进制表示法编码,不允许用户影响 Audit 日志解析器。文本解码到触发此审计事件的命令。使用 ausearch 命令搜索 Audit 记录时,请使用 -i 或 --interpret 选项自动将十六进制值转换为其人类可读的等效值。636174002F6574632F7373682F737368645F636F6E666967 值解释为 cat /etc/ssh/sshd_config