在 CentOS/RHEL 上使用 Auditd 工具学习 Linux 系统审计
系统审计只是指对特定目标系统的深入分析:审计由对构成该系统的各个部分的检查组成,并在不同的关注领域进行严格的评估(如果需要,还可以进行测试)。
另请阅读:Lynis – Linux 系统的安全审核和扫描工具
RHEL/CentOS 上的关键子系统之一是 Linux 审核系统,通常称为 auditd。它实现了一种跟踪系统上与安全相关的信息的方法:它使用预先配置的规则来收集有关系统上发生的事件的大量信息,并将它们记录在日志文件中,从而创建审计试验。
它可以记录事件的日期和时间、类型和结果等信息;引起该事件的用户、对文件/数据库所做的任何修改;使用系统身份验证机制,例如 PAM、LDAP、SSH 等。
Auditd 还记录对审核配置文件所做的任何更改或任何访问审核日志文件的尝试,以及向系统导入或从系统导出信息以及许多其他安全相关信息的任何操作。
为什么 Linux 审计系统很重要?
- 它不需要任何外部程序或进程在系统上运行,使其能够自力更生。
- 它具有高度可配置性,因此使您能够查看所需的任何系统操作。
- 它有助于检测或分析系统的潜在危害。
- 它能够作为一个独立的检测系统工作。
- 它可以与入侵检测系统配合以实现入侵检测。
- 它是审计取证调查的重要工具。
Linux 审计系统组件
审计系统有两个核心组成部分,即:
- 用户空间应用程序和实用程序/工具,以及
- 内核端系统调用处理——它接受来自用户空间应用程序的系统调用,并将它们传递给三种类型的过滤器,即:用户、任务、退出< 或排除。
最重要的部分是用户空间审计守护进程(auditd),它根据预先配置的规则从内核收集信息并在日志文件中生成条目:默认日志是/var/log/audit/audit.log。
此外,audispd(审核调度程序守护进程)是一个事件多路复用器,它与 auditd 交互,并将事件发送到其他想要实时执行的程序事件处理。
有许多用户空间工具可用于管理和检索审计系统中的信息:
- auditctl – 用于控制内核审计系统的实用程序。
- ausearch – 用于搜索特定事件的审核日志文件的实用程序。
- aureport – 用于创建记录事件报告的实用程序。
如何在RHEL/CentOS/Fedora中安装和配置审计工具
首先确保使用 rpm 命令和 grep 实用程序验证您的系统上是否安装了审核工具,如下所示:
rpm -qa | grep audit
如果您没有安装上述软件包,请以 root 用户身份运行此命令来安装它们。
yum install audit
接下来,检查 auditd 是否已启用并正在运行,在终端上发出以下 systemctl 命令。
--------------- On CentOS/RHEL 7 ---------------
systemctl is-enabled auditd
systemctl status auditd
systemctl start auditd [Start]
systemctl enable auditd [Enable]
--------------- On CentOS/RHEL 6 ---------------
service auditd status
service auditd start [Start]
chkconfig auditd on [Enable]
现在我们将了解如何使用主配置文件/etc/audit/auditd.conf来配置auditd。这里的参数允许您控制服务的运行方式,例如定义日志文件的位置、日志文件的最大数量、日志格式、如何处理已满磁盘、日志轮换以及更多选项。
vi /etc/audit/auditd.conf
从下面的示例输出中,参数是不言自明的。
了解审核规则
正如我们之前提到的,auditd 使用规则从内核收集特定信息。这些规则基本上是 auditctl 选项(请参阅手册页),您可以在 /etc/audit/rules.d/audit.rules 文件中预先配置规则(在 CentOS 上) 6、使用/etc/audit/audit.rules文件),以便它们在启动时加载。
您可以定义三种审核规则:
- 控制规则 - 这些规则可以修改审计系统的行为及其一些配置。
- 文件系统规则(也称为文件监视)- 启用对特定文件或目录的访问审核。
- 系统调用规则 – 允许记录任何程序进行的系统调用。
现在打开主配置文件进行编辑:
vi /etc/audit/rules.d/audit.rules
请注意,该文件的第一部分必须包含控制规则。然后在中间部分添加审核规则(文件监视和系统调用规则),最后一部分包含不变性设置,这也是控制规则。
审计控制规则示例
-D #removes all previous rules
-b 3074 #define buffer size
-f 4 #panic on failure
-r 120 #create at most 120 audit messages per second
Auditd 文件系统规则示例
您可以使用以下语法定义文件监视:
-w /path/to/file/or/directory -p permissions -k key_name
其中选项:
- w – 用于指定要监视的文件或目录。
- p – 要记录的权限,r – 用于读取访问权限,w – 用于写入访问权限,x – 用于执行访问和a – 用于更改文件或导演属性。
- -k – 允许您设置一个可选字符串来标识哪个规则(或一组规则)创建了特定的日志条目。
这些规则允许审核以监视对这些关键系统文件进行更改的事件。
-w /etc/passwd -p wa -k passwd_changes
-w /etc/group -p wa -k group_changes
-w /etc/shadow -p wa -k shadow_changes
-w /etc/sudoers -p wa -k sudoers_changes
Auditd 系统调用规则示例
您可以使用下面的形式设置系统调用规则:
-a action,filter -S system_call -F field=value -k key_name
在哪里 :
- action – 有两个可能的值:始终或从不。
- 过滤器 – 指定应用于事件的内核规则匹配过滤器(任务、退出、用户和排除)。
- 系统调用 – 系统调用名称。
- 字段 – 指定附加选项,例如架构、PID、GID 等来修改规则。
以下是您可以定义的一些规则。
-a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time_change
-a always,exit -S sethostname -S setdomainname -k system_locale
最后在文件末尾添加不变性设置,例如:
-e 1 #enable auditing
-e 2 #make the configuration immutable -- reboot is required to change audit rules
Auditd 规则配置文件示例
如何使用auditctl实用程序设置审核规则
或者,在 auditd 运行时将选项发送到 auditd,使用 auditctl ,如以下示例所示。这些命令可以覆盖配置文件中的规则。
要列出所有当前加载的审核规则,请传递 -l
标志:
auditctl -l
接下来,尝试添加一些规则:
auditctl -w /etc/passwd -p wa -k passwd_changes
auditctl -w /etc/group -p wa -k group_changes
auditctl -w /etc/sudoers -p wa -k sudoers_changes
auditctl -l
了解审核日志文件
默认情况下,所有审核消息都记录在 /var/log/audit/audit.log 文件中。为了了解日志条目格式,我们将加载规则并检查事件匹配规则后生成的日志条目。
假设我们有一个秘密备份目录,此审核规则将记录任何访问或修改此目录的尝试:
auditctl -w /backups/secret_files/ -p rwa -k secret_backup
现在,使用另一个系统帐户,尝试进入上面的目录并运行 ls 命令:
cd /backups/secret_files/
ls
日志条目将如下所示。
上述事件由三类审计记录组成。第一个是type=SYSCALL:
type=SYSCALL msg=audit(1505784331.849:444): arch=c000003e syscall=257 success=yes exit=3 a0=ffffffffffffff9c a1=8ad5c0 a2=90800 a3=0 items=1 ppid=2191 pid=2680 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts1 ses=3 comm="ls" exe="/usr/bin/ls" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="secret_backup"
第二个是type=CWD。
type=CWD msg=audit(1505784331.849:444): cwd="/backups/secret_files"
最后一个是type=PATH:
type=PATH msg=audit(1505784331.849:444): item=0 name="." inode=261635 dev=08:01 mode=040755 ouid=0 ogid=0 rdev=00:00 obj=unconfined_u:object_r:default_t:s0 objtype=NORMAL
您可以在审核系统参考中找到所有事件字段(例如 msg、arch、ses 等)及其含义的完整列表。
目前为止就这样了。在下一篇文章中,我们将了解如何使用ausearch查询审核日志文件:我们将解释如何从审核日志中搜索特定信息。如果您有任何疑问,请通过下面的评论部分与我们联系。