
Audit是Linux的一个审计系统。Audit不会为系统提供额外的安全性,但它提供了一种跟踪系统上与安全相关信息的方法,用于发现违反系统使用安全策略的情况,可以通过其他安全措施进一步防止这些违规行为。了解更多信息,请访问Linux审计文档项目。
一、安装Audit
执行以下命令安装Audit:
yum install audit
启动Audit(需要使用service命令,systemctl命令只能用于enable和status操作):
service auditd start
设置开机自启动:
systemctl enable auditd
二、配置Audit
默认Audit配置适用于大多数环境,要修改配置则打开/etc/audit/auditd.conf文件,然后找到对应的选项进行配置。例如在max_log_file、num_logs和max_log_file_action项配置单个日志文件的最大大小(单位为MB)、日志文件个数及达到max_log_file设置的限制时执行的操作。
max_log_file = 8num_logs = 5max_log_file_action = ROTATE
三、定义审计规则
Audit可以指定控制规则、文件系统规则、系统调用规则这三种类型的审计规则。审计规则可以在命令行上使用auditctl命令定义,例如:
记录对/etc/passwd文件的访问和属性更改的规则。
auditctl -w etc/passwd -p rwxa -k passwd_file
记录/etc/selinux/目录中所有文件的访问和属性更改的规则。
auditctl -w etc/selinux/ -p rwxa -k selinux_dir
记录/bin/id程序执行的规则。
auditctl -a always,exit -F exe=/bin/id -F arch=b64 -S execve -k id_exe
以上通过命令行方式定义的规则将会在重启后消失。要使规则重启后仍存在,则请打开/etc/audit/rules.d/audit.rules文件,将规则添加到文件中,添加的内容如下:
-w /etc/passwd -p rwxa -k passwd_file-w /etc/selinux/ -p rwxa -k selinux_dir-a always,exit -F exe=/bin/id -F arch=b64 -S execve -k id_exe
然后重启Audit:
service auditd restart
四、查看审计日志
首先使用cat命令访问/etc/passwd文件:
cat etc/passwd
然后打开/var/log/audit/audit.log文件查看审计日志,生成的日志记录如下所示:
type=SYSCALL msg=audit(1621174287.258:73): arch=c000003e syscall=2 success=yes exit=3 a0=7ffc42299672 a1=0 a2=1fffffffffff0000 a3=7ffc42296a60 items=1 ppid=1769 pid=1913 auid=1000 uid=0 gid =0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=3326 comm="cat" exe="/usr/bin/cat" key="passwd_file"type=CWD msg=audit(1621174287.258:73): cwd="/etc/audit/rules.d"type=PATH msg=audit(1621174287.258:73): item=0 name="/etc/passwd" inode=27059 dev=fd:01 mode=0100644 ouid=0 ogid=0 rdev=00:00 objtype=NORMAL cap_fp=0000000000000000 cap_fi=0000000000000000 cap_fe=0 cap_fver=0type=PROCTITLE msg=audit(1621174287.258:73): proctitle=636174002F6574632F706173737764
五、审计日志分析
第一条记录
type=SYSCALL
type字段为记录的类型,SYSCALL表示此记录是由对内核的系统调用触发的。
msg=audit(1621174287.258:73):
msg字段记录:(1)表单中记录的时间戳和唯一ID。如果多条记录是作为同一审计事件的一部分生成的,则它们的时间戳(Unix时间格式)和ID相同;(2)内核或用户空间应用程序提供的特定于事件的对。
arch=c000003e
arch字段为CPU架构的信息。值以十六进制编码,使用ausearch命令搜索审计记录时,加上-i选项可将c000003e转换为x86_64显示。
syscall=2
syscall字段记录发送到内核的系统调用类型。2表示open,ausyscall命令可以将系统调用编号转换为等效的系统调用显示,ausyscall --dump命令则显示所有编号及系统调用。
success=yes
success字段记录该特定事件中记录的系统调用是成功还是失败,yes为成功。
exit=3
exit字段记录系统调用返回的退出代码。
a0=7ffc42299672 a1=0 a2=1fffffffffff0000 a3=7ffc42296a60
a0至a3字段记录前4个参数,值以十六进制编码。
items=1
items字段包含跟在系统调用记录之后的PATH辅助记录的数量。
ppid=1769
ppid字段记录父进程ID。1769是父进程的PPID,例如bash。
pid=1913
pid字段记录进程ID。在这种情况下,1913是cat进程的PID。
auid=1000
auid字段记录审计用户ID。此ID在登录时分配给用户,即使用户的身份发生更改(例如使用su命令切换用户账户),每个进程也会继承此ID。
uid=0
uid字段记录启动分析进程用户的用户ID。使用ausearch命令搜索审计记录上,加上-i选项可将0转换为root显示。
gid=0
gid字段记录启动分析进程用户的组ID。
euid=0
euid字段记录启动分析进程用户的有效用户ID。
suid=0
suid字段记录启动分析进程用户的设置用户ID。
fsuid=0
fsuid字段记录启动分析进程用户的文件系统用户ID。
egid=0
egid字段记录启动分析进程用户的有效组ID。
sgid=0
sgid字段记录启动分析进程用户的集合ID。
fsgid=0
fsgid字段记录启动分析进程用户的文件系统组ID。
tty=pts0
tty字段记录调用分析进程的终端。
ses=3326
ses字段记录调用分析进程会话的会话ID。
comm="cat"
comm字段记录调用分析进程命令的命令名称。在这种情况下,触发此审计事件的是cat命令。
exe="/usr/bin/cat"
exe字段记录调用分析进程的可执行文件路径。
key="passwd_file"
key字段记录与生成此事件的规则相关联的管理员定义的字符串。
第二条记录
type=CWD
type字段值为CWD(当前工作目录),此类型记录调用第一条记录中指定的系统调用进程所执行的工作目录。
msg=audit(1621174287.258:73):
msg字段与第一条记录具有相同的时间戳和ID值。
cwd="/etc/audit/rules.d"
cwd字段包含调用系统调用目录的路径。
第三条记录
type=PATH
type字段值为PATH,审计事件包含PATH作为参数传递给系统调用的每个路径。此审计事件中,只有一个路径/etc/passwd用作参数。
msg=audit(1621174287.258:73):
msg字段与第一条和第二条记录具有相同的时间戳和ID值。
item=0
item字段指示当前记录是系统调用类型记录中引用的总项数的哪个项。这个数从0开始,值为0表示它是第一项。
name="/etc/passwd"
name字段记录作为参数传递给系统调用的文件或目录路径。在这种情况下,它是/etc/passwd文件。
inode=27059
inode字段包含与此事件中记录的文件或目录相关联的inode编号。使用find etc -inum 27059 -print命令可以在/etc目录查找与27059关联的文件或目录。
dev=fd:01
dev字段指定包含此事件中记录的文件或目录设备的主要和次要ID。fd:01表示/dev/fd/1设备。
mode=0100644
mode字段记录文件或目录权限,以stat命令(st_mode字段)返回的数字编码。0100644表示-rw-r--r--,即/etc/passwd文件的权限为644。
st_mode的结构(花括号中的数字都是二进制):

ouid=0
ouid字段记录对象所有者的用户ID。
ogid=0
ogid字段记录对象所有者的组ID。
rdev=00:00
rdev字段包含仅用于特殊文件的记录设备标识符。在这种情况下,它不被使用,因为记录的文件是一个普通文件。
objtype=NORMAL
objtype字段记录给定系统调用上下文中每个路径记录操作的意图。
cap_fp=0000000000000000
cap_fp字段记录与文件或目录对象允许的基于文件系统能力设置相关的数据。
cap_fi=0000000000000000
cap_fi字段记录与文件或目录对象继承的基于文件系统能力设置相关的数据。
cap_fe=0
cap_fe字段记录文件或目录对象基于文件系统能力有效位的设置。
cap_fver=0
cap_fver字段记录文件或目录对象基于文件系统能力的版本。
第四条记录
type=PROCTITLE
type字段为记录的类型。PROCTITLE表示此记录提供触发此审计事件的完整命令行,该事件由对内核的系统调用触发。
proctitle=636174002F6574632F706173737764
proctitle字段记录用于调用分析进程命令的完整命令行。值以十六进制编码,不允许用户影响审计日志解析器。通过解码即可得到触发此审核事件的命令。使用ausearch命令搜索审计记录时,加上-i选项可将636174002F6574632F706173737764转换为cat /etc/passwd显示。
上面分析的审计事件仅包含部分的字段和记录类型,了解更多请查看RHEL审计系统参考。
六、搜索审计日志
ausearch是用于搜索审计日志文件特定事件的工具。默认会搜索/var/log/audit/audit.log文件,可以使用-if选项指定其他审计日志文件。
在/var/log/audit/audit.log文件搜索失败的登录尝试。
ausearch -m USER_LOGIN -sv no -i
搜索所有用户、组和角色更改。
ausearch -m ADD_USER -m DEL_USER -m ADD_GROUP -m USER_CHAUTHTOK -m DEL_GROUP -m CHGRP_ID -m ROLE_ASSIGN -m ROLE_REMOVE -i
使用用户的登录ID(auid)搜索用户执行的所有记录操作。
ausearch -ua 1000 -i
搜索从昨天到现在所有失败的系统调用。
ausearch -ts yesterday -te now -m SYSCALL -sv no -i
七、生成审计报告
aureport是用于生成审计报告的工具。默认会查询/var/log/audit/audit.log文件来生成报告,可以使用-if选项指定其他审计日志文件。
生成审计活动的概述。
aureport
所有审计日志文件包含的事件时间范围的报告。
aureport -t
过去三天记录的事件的报告
aureport -ts 01/01/2021 -te 01/04/2021
所有可执行文件事件的报告。
aureport -x
所有可执行文件事件的摘要报告。
aureport -x --summary
所有用户失败事件的摘要报告。
aureport -u --failed --summary -i
每个系统用户所有失败登录尝试的摘要报告。
aureport -l --summary -i
从ausearch搜索用户ID为1000的所有文件访问事件的查询生成摘要报告。
ausearch -ul 1000 -r | aureport -f --summary




