Linux Audit守护进程是一个可以审计Linux系统事件的框架。在本文中,我们一起看看安装、配置和使用这个框架来执行Linux系统和安全审计。
审计目标
通过使用一个强大的审计框架,系统可以追踪很多事件类型来监控和并审计它。这样的例子包括:
审计文件访问和修改
看看谁改变了一个特殊文件
检测未授权的改变
监控系统调用和函数
检测异常,比如崩溃的进程
为入侵检测目的设置“导火线”
记录各个用户使用的命令
组件
这个框架本身有数个组件:
内核:
audit:钩在内核中来捕获事件并将它们发送到auditd
二进制文件:
auditd:捕捉事件并记录它们(记录在日志文件中)的守护进程
auditctl:配置auditd的客户端工具
audispd:多路复用事件的守护进程
aureport:从日志文件(auditd.log)中读取内容的报告工具
ausearch:事件查看器(查看的内容是auditd.log)
autrace:使用内核中的审计组件来追踪二进制文件
aulast:和上一个类似,但是使用的是审计框架
aulastlog:和lastlog类似,但是也使用的是审计框架
ausyscall:映射系统调用ID和名字
auvirt:展示和审计有关虚拟机的信息
文件:
audit.rules:auditctl使用,它读取该文件来决定需要使用什么规则
auditd.conf:auditd的配置文件
安装
Debian/Ubuntu使用命令:apt-get install auditd audispd-plugins
Red Hat/CentOS/Fedora:通常已经安装了(包:audit和audit-libs)
配置
2个文件管理审计守护进程的配置,一个用于守护进程本身(auditd.conf),另一个是用于auditctl工具的规则(audit.rules)。
auditd.conf
文件auditd.conf对Linux audit守护进程的配置聚焦在它应该在哪里以及如何记录事件。它也定义了如何应对磁盘满的情况、如何处理日志轮转和要保留的日志文件数量。通常,对大多数系统来说,默认配置是足够的。
audit.rules
为了配置应该审计什么日志,审计框架使用了一个名为audit.rules的文件。
和大多数情况一样,从零开始而不加载任何规则。通过用-l参数来运行auditctl,我们可以确定使用中的规则。
[root@host ~]# auditctl -l
No rules
万一加载了任何规则的话,用-D参数运行auditctl来删除已加载规则。
现在是时候来监控点东西了,比如/etc/passwd文件。通过定义要查看的路径和权限,我们在这个文件上放一个观察点:
auditctl -a exit,always -F path=/etc/passwd -F perm=wa
通过定义path选项,我们告诉审计框架来监视什么目录或者文件。权限决定了什么类型的访问将触发一个事件。虽然这里的权限看起来类似文件的权限,但是要注意,在这2者之间有一个重大的区别。这里的4个选项是:
r = 读取
w = 写入
x = 执行
a = 属性改变
通过使用ausearch工具,我们可以快速的追踪对文件的访问和找到相关的事件。
这个输出里面的一些重点是:
事件的时间(time)和对象的名称(name),当前的工作路径(cwd),相关的系统调用(syscall),审计用户ID(auid)和在这个文件上执行行为的二进制(exe)。请注意,auid定义了在登录过程中的原始用户。其他的用户ID字段可能指向了一个不同的用户,取决于在触发一个事件时在使用的实际用户。
转换系统调用
系统调用是以数字类型的值来记录的。因为在不同的服务器架构之间,这些值会有重叠,所以当前的服务器架构也记录了下来。
通过使用uname -m,我们可以确定服务器架构并使用ausyscall 来确定数字为188的系统调用代表了什么。
[root@host audit]# ausyscall x86_64 188
setxattr
现在,我们知道了这是属性的变化,这是讲得通的,因为我们定义了观察点,在属性变化(perm=a)的时候触发一个事件。
使用了临时规则并想再用老的规则?使用一个文件来刷新审计规则:
auditctl -R /etc/audit/audit.rules
审计Linux的进程
和使用strace类似,审计框架有一个名为autrace的工具。它使用了审计框架并增加了合适的规则来捕获信息并记录。收集到的信息可以使用ausearch来展示。
执行一次追踪:
使用ausearch来展示相关的文件:
按照用户来审计文件访问
审计框架可以用于监控系统调用,包括对文件的访问。如果你希望知道一个特定的用户ID访问了什么文件,使用像下面的这样一条规则:
auditctl -a exit,always -F arch=x86_64 -S open -F auid=80
-F arch=x86_64定义了使用什么架构(uname -m)来监控正确的系统调用(一些系统调用在不同的架构之间是不同的)。
-S open 选择 “open”系统调用
-F auid=80 相关的用户ID
这种类型的信息对于入侵检测确实是很有用的,而且对于在Linux系统上取证也确实是很有用的。
自动化
因为Linux审计守护进程可以提供有价值的审计数据,Lynis会检查这个框架的存在。如果没有这个框架,Lynis会建议你安装它。
另外,Lynis会执行一些测试来判定日志文件、可用的规则等等。
为了有效的入侵检测目的,和入侵检测系统集成对于事件发生的时候发现它们并采取恰当的行动是很关键的。
后记
审计守护进程有更多的用途。在本博客未来的文章中将列出其他例子。如果你是严肃对待Linux平台审计的,Linux审计框架一定是个很好的朋友!