首页 理论教育 Linux内核安全模块深入剖析:audit架构及应用

Linux内核安全模块深入剖析:audit架构及应用

时间:2026-01-27 理论教育 Jonker 版权反馈
【摘要】:audit的架构如图14-1所示。图14-1 audit架构Linux内核的audit子系统使用netlink套接字作为和用户态进程之间的接口。auditd守护进程通过netlink套接字不断从内核audit子系统接收审计消息。前者用于在audit.log中寻找特定信息,后者用于归纳audit.log中的信息。在作者的计算机上执行的效果是:实际上,autrace会创建两条规则,假设上例中echo产生的进程的进程号为4212:在上例中echo进程结束后,autrace会删除上述两条规则。图14-1中的application是指一些具有CAP_AUDIT_WRITE的进程。

audit的架构如图14-1所示。

图示

图14-1 audit架构

Linux内核的audit子系统使用netlink套接字作为和用户态进程之间的接口。auditd守护进程通过netlink套接字不断从内核audit子系统接收审计消息。auditd进程会将审计消息发往两个去处,一个是通过AF_UNIX/AF_LOCAL套接字发送给它的子进程audispd,后者依照配置做进一步的分发;另一个是写入audit.log。audit.log的内容实在是过于庞杂,为了让用户更容易理解,audit开发人员提供了ausearch和aureport。前者用于在audit.log中寻找特定信息,后者用于归纳audit.log中的信息。auditctl用于向内核设定审计规则。autrace的功能与strace的功能类似,都是运行一条命令,跟踪此命令所产生的进程的系统调用情况。autrace的实现原理是,在运行命令之前设定审计规则,在执行结束时再将审计规则删除。在作者的计算机上执行的效果是:

图示

实际上,autrace会创建两条规则,假设上例中echo产生的进程的进程号为4212:

图示

在上例中echo进程结束后,autrace会删除上述两条规则。同strace相比,autrace并不好用因为autrace是一个需要特权的命令,另外,它的输出在audit.log文件中,混杂在系统所有审计消息之中,实在是不易辨析。

图14-1中的application是指一些具有CAP_AUDIT_WRITE的进程。这些进程可以产生一些“审计消息”发给内核。按道理应该是内核审计用户态进程,这里却是用户态进程发送“审计消息”给内核。这种所谓的“审计消息”实际上是日志消息。audit子系统在实现中兼有审计和日志功能。audit子系统转发application生成的日志消息给用户态守护进程auditd。(https://www.xing528.com)

下面举几个通过auditctl设定规则的例子。

检查pid为20015的进程的所有系统调用:

图示

检查euid为1000的所有进程的openat系统调用:

图示

检查对文件/etc/shadow的写和添加操作:

图示

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈