注意:

使用 Auditd 审计 Oracle Linux

简介

Auditd 是一个用户空间系统守护进程,在后台运行,生成有关在 Oracle Linux 上执行的不同活动的日志。

本教程将指导您完成安装、配置和使用 auditd。

目标

在此实验室中,您将学习:

先决条件

安装审计软件包

注意:使用免费实验室环境时,请参见 Oracle Linux Lab Basics 了解连接和其他使用说明。

默认情况下,Oracle Linux 会安装审计软件包。

如果尚未连接,请打开一个终端并通过 ssh 连接到 ol8-server 系统。

ssh oracle@<ip_address_of_ol8-server>

检查系统是否预安装了 audit 软件包。

sudo dnf list installed "audit"

如果不在系统上,请安装它。

sudo dnf install -y audit

auditd 守护进程的缺省配置文件位于 /etc/audit/auditd.conf

管理审计服务

安装审计软件包后,启动 auditd 服务。首先,检查当前状态。

sudo systemctl status auditd

输出示例:

[oracle@ol8-server ~]$ sudo systemctl status auditd
* auditd.service - Security Auditing Service
   Loaded: loaded (/usr/lib/systemd/system/auditd.service; enabled; vendor pres>
   Active: active (running) since Fri 2022-04-01 23:59:52 GMT; 2min 38s ago
     Docs: man:auditd(8)
           https://github.com/linux-audit/audit-documentation
 Main PID: 1385 (auditd)
    Tasks: 2 (limit: 100140)
   Memory: 2.5M
   CGroup: /system.slice/auditd.service
           `-1385 /sbin/auditd

Apr 01 23:59:52 localhost.localdomain augenrules[1388]: backlog_wait_time 60000
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: enabled 1
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: failure 1
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: pid 1385
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: rate_limit 0
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: backlog_limit 8192
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: lost 0
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: backlog 0
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: backlog_wait_time 60000
Apr 01 23:59:52 localhost.localdomain systemd[1]: Started Security Auditing Ser>
lines 1-21/21 (END)

输出显示服务为 (running)enabled

enabled 状态指示我们已将服务配置为在引导时启动。如果不是这样,请以 root 用户身份启动服务以收集审计信息并将其写入日志。

启动服务。

sudo service auditd start

auditd 配置为在引导时启动。

sudo systemctl enable auditd

注:与 auditd 守护进程进行适当交互的方式使用 service 命令。

service 命令可确保记录 auid 值。仅将 systemctl 命令与 enablestatus 操作一起使用。

临时启用和禁用审计

审计控制实用程序 auditctl 与内核审计组件交互,以管理规则并控制事件生成过程的许多设置和参数。

检查内核审计子系统的状态。

sudo auditctl -s

输出示例:

[oracle@ol8-server ~]$ sudo auditctl -s
enabled 1
failure 1
pid 1399
rate_limit 0
backlog_limit 8192
lost 0
backlog 0
backlog_wait_time 60000
loginuid_immutable 0 unlocked

临时禁用 auditd

sudo auditctl -e 0

重新启用 auditd

sudo auditctl -e 1

注:pid 显示了 auditd 服务进程 ID。pid0 指示服务未运行。

auditctl -e 启用标志还接受值 2,这将锁定审计配置。

如果以这种方式锁定了审计配置,则需要重新引导才能解锁该配置。man auditctl 中提供了更多详细信息。

查找审计规则和日志

默认情况下,Oracle Linux 将审计日志存储在 /var/log/audit/audit.log 中。

审计规则位于 /ect/audit/audit.rules 中。Oracle Linux 从文件 /etc/audit/rules.d/audit.rules 生成默认规则集。

sudo cat /etc/audit/audit.rules
sudo cat /etc/audit/rules.d/audit.rules

输出示例:

## First rule - delete all
-D

## Increase the buffers to survive stress events.
## Make this bigger for busy systems
-b 8192

## This determine how long to wait in burst of events
--backlog_wait_time 60000

## Set failure mode to syslog
-f 1

具有审计控制实用程序的规则

使用 auditctl 程序控制行为、获取状态以及添加或删除规则。

添加一个审计规则,记录任何读取或修改 /etc/ssh/sshd_config 文件的尝试。

sudo auditctl -w /etc/ssh/sshd_config -p rwxa -k sshd_config

其中:

显示规则。

sudo auditctl -l

新规则将添加到列表底部,但也可以将其添加到顶部。

检查是否已将新规则添加到 /etc/audit/audit.rules 文件中。

sudo cat /etc/audit/audit.rules

输出示例:

[oracle@ol8-server ~]$ sudo cat /etc/audit/audit.rules
## This file is automatically generated from /etc/audit/rules.d
-D
-b 8192
-f 1
--backlog_wait_time 60000

规则不显示在文件中。为什么不呢?

auditctl 创建的规则不会添加到 audit.rules 文件中。因此,这些更改是瞬态的,在系统重新引导后不会保留。

通过将规则添加到 /etc/audit/rules.d/my.rules 中的定制规则集文件,使规则成为永久性规则。添加的规则格式与不使用 auditctlauditctl 命令的语法匹配。应按行编写规则并进行组合以优化性能。

sudo tee /etc/audit/rules.d/my.rules > /dev/null <<'EOF'
-w /etc/ssh/sshd_config -p rwxa -k sshd_config
EOF

显示规则。

sudo cat /etc/audit/rules.d/my.rules

测试规则。

cat /etc/ssh/sshd_config

该命令返回 cat: /etc/ssh/sshd_config: Permission denied,并在 audit.log 中生成以下事件。

sudo cat /var/log/audit/audit.log | grep sshd_config

输出示例:

type=CONFIG_CHANGE msg=audit(1648918923.746:266810): auid=1001 ses=15792 
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 op=add_rule key="sshd_config" list=4 res=1AUID="oracle"
type=SYSCALL msg=audit(1648923583.793:268315): arch=c000003e syscall=257 success=no exit=-13 a0=ffffff9c a1=7ffd08b6c575 > a2=0 a3=0 items=1 ppid=3406680 pid=3428336 auid=1001 uid=1001 gid=1001 euid=1001 suid=1001 fsuid=1001 egid=1001 
sgid=1001 fsgid=1001 tty=pts0 ses=15792 comm="cat" exe="/usr/bin/cat" 
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="sshd_config"ARCH=x86_64 SYSCALL=openat AUID="oracle" 
UID="oracle" GID="oracle" EUID="oracle" SUID="oracle" FSUID="oracle" EGID="oracle" SGID="oracle" FSGID="oracle"
type=PATH msg=audit(1648923583.793:268315): item=0 name="/etc/ssh/sshd_config" inode=67688941 dev=fc:00 mode=0100600 
ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 
cap_frootid=0OUID="root" OGID="root"

搜索审计日志

搜索日志的另一种方法是使用 ausearch 命令。

使用此命令获取相同的信息。

sudo ausearch --key sshd_config

输出示例:

Email option is specified but /usr/lib/sendmail doesn't seem executable.
----
time->Sat Apr  2 17:02:03 2022
type=CONFIG_CHANGE msg=audit(1648918923.746:266810): auid=1001 ses=15792 
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 op=add_rule key="sshd_config" list=4 res=1
----
time->Sat Apr  2 18:19:43 2022
type=PROCTITLE msg=audit(1648923583.793:268315): proctitle=636174002F6574632F7373682F737368645F636F6E666967
type=PATH msg=audit(1648923583.793:268315): item=0 name="/etc/ssh/sshd_config" inode=67688941 dev=fc:00 mode=0100600 
ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 
cap_frootid=0
type=CWD msg=audit(1648923583.793:268315): cwd="/home/oracle"
type=SYSCALL msg=audit(1648923583.793:268315): arch=c000003e syscall=257 success=no exit=-13 a0=ffffff9c a1=7ffd08b6c575 > a2=0 a3=0 items=1 ppid=3406680 pid=3428336 auid=1001 uid=1001 gid=1001 euid=1001 suid=1001 fsuid=1001 egid=1001 
sgid=1001 fsgid=1001 tty=pts0 ses=15792 comm="cat" exe="/usr/bin/cat" 
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="sshd_config"

根据输出格式,ausearch 的输出更易于使用和读取。我们可以添加 -i--interpret 选项,以便于阅读日志。此选项将数字实体解释为文本,例如将 uid 转换为帐户名称。

sudo ausearch -i -k sshd_config

输出示例:

Email option is specified but /usr/lib/sendmail doesn't seem executable.
----
type=CONFIG_CHANGE msg=audit(04/02/2022 17:02:03.746:266810) : auid=oracle ses=15792 
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 op=add_rule key=sshd_config list=exit res=yes 
----
type=PROCTITLE msg=audit(04/02/2022 18:19:43.793:268315) : proctitle=cat /etc/ssh/sshd_config 
type=PATH msg=audit(04/02/2022 18:19:43.793:268315) : item=0 name=/etc/ssh/sshd_config inode=67688941 dev=fc:00 
mode=file,600 ouid=root ogid=root 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 cap_frootid=0 
type=CWD msg=audit(04/02/2022 18:19:43.793:268315) : cwd=/home/oracle 
type=SYSCALL msg=audit(04/02/2022 18:19:43.793:268315) : arch=x86_64 syscall=openat success=no exit=EACCES(Permission 
denied) a0=0xffffff9c a1=0x7ffd08b6c575 a2=O_RDONLY a3=0x0 items=1 ppid=3406680 pid=3428336 auid=oracle uid=oracle 
gid=oracle euid=oracle suid=oracle fsuid=oracle egid=oracle sgid=oracle fsgid=oracle tty=pts0 ses=15792 comm=cat exe=/
usr/bin/cat subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=sshd_config 

有关搜索 audit.log 的更多格式设置选项和方法,请参见 man ausearch

加载预配置规则

Oracle Linux 提供了合并 /etc/audit/rules.d 中找到的所有组件审计规则文件的脚本。合并后,新文件将替换现有的 /etc/audit/audit.rules。此脚本内置在 auditd 服务文件中并在服务启动时运行。

检查是否存在任何要加载的现有规则更改。

sudo augenrules --check

输出状态为 Rules have changed and should be updated。此更改是因为我们以前创建的 my.rules 文件位于 /etc/audit/rules.d 中。

删除以前添加的 sshd_config 自定义规则以轻松跟踪新规则添加。

sudo auditctl -D -k sshd_config

合并 my.rules 定制规则文件。

sudo augenrules --load

输出示例:

[oracle@ol8-server ~]$ sudo augenrules --load
No rules
enabled 1
failure 1
pid 1395
rate_limit 0
backlog_limit 8192
lost 0
backlog 0
backlog_wait_time 60000
enabled 1
failure 1
pid 1395
rate_limit 0
backlog_limit 8192
lost 0
backlog 0
backlog_wait_time 60000
enabled 1
failure 1
pid 1395
rate_limit 0
backlog_limit 8192
lost 0
backlog 0
backlog_wait_time 60000

检查活动的审计规则。

sudo auditctl -l

输出示例:

[oracle@ol-lab-2022-03-23-182415-0 ~]$ sudo auditctl -l
-w /etc/ssh/sshd_config -p rwxa -k sshd_config

向新文件 new.rules 添加其他规则。

注:只有以 .rules 结尾的文件才由 augenrules 读取并加载。

sudo tee /etc/audit/rules.d/new.rules > /dev/null <<'EOF'
-w /etc/passwd -p wa -k passwd_changes
-w /etc/selinux/ -p wa -k selinux_changes
EOF

加载新规则。

sudo augenrules --load

重新检查有效规则。

sudo auditctl -l

新规则将加载并合并到 audit.rules 文件中。

sudo cat /etc/audit/audit.rules

系统在合并过程中创建了一个备份文件 /etc/audit/audit.rules.prev

sudo ls -l /etc/audit

Oracle Linux 审计系统提供的信息有助于入侵检测。

有关显示的实用程序,请查看 man 页面。然后,使用所学内容向系统添加定制审计规则以用于特定的日志记录事件。

详细信息

请参阅其他相关资源:

更多学习资源

浏览 docs.oracle.com/learn 上的其他实验室,或者在 Oracle Learning YouTube 频道上访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle 学习资源管理器。

有关产品文档,请访问 Oracle 帮助中心