yum install audit
service auditd start
要定义一条规则,记录 /etc/passwd
文件的所有写入访问权限和每个属性更改,请执行以下命令:
~]# auditctl -w /etc/passwd -p wa -k passwd_changes
请注意,在 -k
选项后面的字符串是任意的。
要定义一条规则,记录 /etc/selinux/
目录中所有文件的写入访问和每个属性更改,请执行以下命令:
~]# auditctl -w /etc/selinux/ -p wa -k selinux_changes
要定义一个规则来记录 /sbin/insmod 命令的执行(在 Linux 内核中插入模块),请执行以下命令:
~]# auditctl -w /sbin/insmod -p x -k module_insertion
要定义当程序每次使用 adjtimex
或 settimeofday
系统调用时创建日志条目的规则,且系统使用 64 位构架,请执行以下命令:
~]# auditctl -a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time_change
要定义规则,在每次删除文件时创建一个日志条目,或者由 ID 为 1000 或更高版本的系统用户重命名,请执行以下命令:
~]# auditctl -a always,exit -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=4294967295 -k delete
请注意,-F auid!=4294967295
选项用于排除未设置登录 UID 的用户。
也可以使用系统调用规则语法定义文件系统规则。以下命令为系统调用创建类似于 -w /etc/shadow -p wa
文件系统规则的规则:
~]# auditctl -a always,exit -F path=/etc/shadow -F perm=wa
配置审计服务
Audit 守护进程可以在 /etc/audit/auditd.conf
文件中配置。此文件由用于修改 Audit 守护进程行为的配置参数组成。hash 符号(#
)后面的空行和文本将被忽略。详情请查看 auditd.conf(5) man page。
为安全环境配置 auditd
默认 auditd
配置应当适合大多数环境。但是,如果您的环境必须满足严格的安全策略,建议在 /etc/audit/auditd.conf
文件中对 Audit 守护进程配置进行以下设置:
log_file
包含 Audit 日志文件的目录(通常为 /var/log/audit/
)应位于单独的挂载点。这可以防止其他进程消耗此目录中的空间,并为 Audit 守护进程提供准确检测剩余空间。
max_log_file
指定单个审计日志文件的最大大小,必须设置该文件才能充分利用保存审计日志文件的分区上的可用空间。
max_log_file_action
决定在 max_log_file
中设置的限制后执行的操作,应设置为 keep_logs
,以防止覆盖 Audit 日志文件。
space_left
指定在 space_left_action
参数中设置操作的磁盘上保留的可用空间量。必须设置一个数字,让管理员有足够的时间来响应和释放磁盘空间。space_left
值取决于审计日志文件的生成速度。
space_left_action
建议使用适当的通知方法将 space_left_action
参数设置为 email
或 exec
。
admin_space_left
指定触发 admin_space_left_action
参数中设置操作的绝对最小可用空间量,必须设置为保留足够空间以记录管理员执行的操作的值。
admin_space_left_action
应将 设置为 single
以将系统置于单用户模式并允许管理员释放一些磁盘空间。
disk_full_action
指定在保存 Audit 日志文件的分区上没有可用空间时触发的操作,必须设置为 halt
或 single
。当 Audit 无法记录事件时,这可确保系统以单用户模式关闭或运行。
disk_error_action
指定在包含 Audit 日志文件的分区上检测到错误时触发的操作,必须设置为 syslog
、单一
或停止 ,
具体取决于您处理硬件故障的本地安全策略。
flush
应设置为 incremental_async
。它与 freq
参数相结合,该参数决定了在强制与硬盘进行硬盘同步前可以将多少条记录发送到磁盘。freq
参数应设置为 100
。这些参数可确保审计事件数据与磁盘上的日志文件同步,同时保持良好的活动性能。
其余配置选项应根据您的本地安全策略设置。
了解 Audit 日志文件
默认情况下,审计系统将日志条目存储在 /var/log/audit/audit.log
文件中;如果启用了日志轮转,则轮转 audit.log
文件存储在同一个目录中。
以下审计规则记录每次尝试读取或修改 /etc/ssh/sshd_config
文件:
-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 objtype=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
值指定此记录是由系统调用对内核触发的。
有关所有可能类型值及其解释列表,请参阅 Audit Record Types。
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
文件中的人类可读等效值匹配。在本例中,2
是 open
系统调用。请注意,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
a0
至a3
字段记录了该事件中系统调用的前四个参数,用十六进制符号编码。这些参数取决于使用的系统调用,可以通过 ausearch 实用程序来解释。
items=1
items
字段包含系统调用记录后面的 PATH 辅助记录的数量。
ppid=2686
ppid
字段记录了父进程ID(PPID)。在这种情况下,2686
是父进程的 PPID,如 bash
。
pid=3538
pid
字段记录了流程 ID(PID)。在本例中,3538
是 cat
进程的 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 上下文,在执行时,记录的文件或目录被贴上了标签。
objtype=NORMAL
objtype
字段记录了每个路径记录在给定系统调用上下文中的操作意图。
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
。
以上分析的审计事件仅包含事件可以包含的所有可能字段的子集。有关所有事件字段及其说明的列表,请参阅 Audit Event 字段。有关所有事件类型及其说明的列表,请参阅审计记录类型。
例 7.6. 其他 audit.log
事件
以下审计事件记录 auditd 守护进程的成功启动
。ver
字段显示已启动的 Audit 守护进程版本。
type=DAEMON_START msg=audit(1363713609.192:5426): auditd start, ver=2.2 format=raw kernel=2.6.32-358.2.1.el6.x86_64 auid=1000 pid=4979 subj=unconfined_u:system_r:auditd_t:s0 res=success
以下审计事件记录了用户 UID 为 1000 的失败尝试以 root 用户身份登录。
type=USER_AUTH msg=audit(1364475353.159:24270): user pid=3280 uid=1000
搜索 Audit 日志文件
ausearch 实用程序允许您搜索 Audit 日志文件特定事件。默认情况下,ausearch 搜索 /var/log/audit/audit.log
文件。您可以使用 ausearch 选项 -if file_name 命令指定不同的文件。在一个 ausearch 命令中提供多个选项相当于在字段类型和相同字段类型的多个实例之间使用 AND 运算符。
例 7.7. 使用 ausearch 搜索审计日志文件
要搜索 /var/log/audit/audit.log
文件以查找失败的登录尝试,请使用以下命令:
~]# ausearch --message USER_LOGIN --success no --interpret
要搜索所有帐户、组和角色更改,请使用以下命令:
~]# 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 --start yesterday --end now -m SYSCALL -sv no -i