Linux下基于audit 的文件操作溯源机制研究
2024-01-18谢明玉
张 雷,谢明玉
(阿坝师范学院,四川汶川 623002)
1 audit用户空间的子系统配置文件和文件监控规则设置
audit 用户空间子系统作为用户态系统程序,主要包括auditd、auditctl、ausearch 和aureport 等子系统模块。audit 用户空间子系统通过设置配置文件和文件监控规则控制内核kauditd 模块只产生监控文件操作日志数据并转存。
(1)auditd.conf 设 置。auditd.conf 作 为audit 审计守护程序的配置文件,其相关参数可设置日志数据的输出存储方式。通过对local_events、write_logs、log_format 和q_depth 参数分 别设置 为yes、no、ENRICHED 和2000,扩展audit 分发器内部队列大小,阻止日志数据落盘,便于日志数据转存。
(2)audit.rules 文件规则设置。audit.rules 文件用于存储控制规则、文件系统规则和系统调用规则。通过把目标文件监控规则存储在此文件,重启audit 审计守护程序,接收内核kauditd 模块产生的文件操作日志数据。
2 基于netlink与unix域socket的审计文件操作日志数据传输机制
netlink 作为unix/linux 所特有的IPC 机制,是一种异步全双工通信方式,支持由内核发起通信并为netlink 通信提供一组特殊API 接口,用户态则基于socket API,实现内核态进程和用户态进程之间双工数据传输。内核态进程kuaidtd 通过netlink 通信机制向用户态守护进程auditd 传输各类审计文件操作日志数据并保存在auditd 守护进程的socket 缓存接收队列中,由auditd 守护进程根据其配置文件决定是存储到/var/log/audit 文件夹下,或是借助第三方程序转存。
为转存文件操作日志数据,重启audit 用户态审计子系统,根据已设置的auditd.conf 文件初始化audit 子系统,按照unix 域配置文件(af_unix.conf)建立一个本地通信服务器端,其unix socket 配置路径为/var/run/audispd_events;同时,为在本地接收文件操作日志数据,建立本地文件操作日志数据接收客户端,等待接收服务器端传输的日志数据。启动本地通信客户端程序,建立本地进程间的unix 域套接字通信关联,随时接收auditd 守护进程转发的各位审计文件操作日志数据。
3 基于/proc文件系统的审计文件操作日志数据存储
/proc 文件系统作为一个伪文件系统,只存在于内存中,不占用外存空间。在/proc 文件系统中存储文件,其数据读写效率比外存快几十甚至上百倍。在/proc 目录下创建auditlog 目录,在此目录里创建审计文件操作日志数据存储文件logN(0 ≤n<6),每个日志文件依次存储1 min 内的日志数据,当N≥6时,N清零重新赋值为0,日志文件轮转覆盖写存储日志数据,确保日志数据能够快速存储与读写。
4 audit文件操作日志数据提取、过滤和解析
audit 审计系统一般安装在unix/Linux 服务器系统上,通过设置文件监控规则控制内核kauditd 进程只产生文件操作日志数据事件,通过netlink 和unix域套接字通信传输的文件操作日志数据轮转覆盖写存储于/proc/auditlog 文件目录下的logN文件内。文件操作日志数据事件通常包含类型为PROCTITLE、PATH、SYSCALL 和CWD4 条记录,全面记录文件操作的动态和静态关联日志数据。
audit 系统虽设置了文件监控规则,但其仍能够额外获取一部分关联的日志数据信息。为方便日志数据解析,在数据解析之前,依据文件操作日志数据ID 和记录标记关键字,过滤多余日志数据记录,精简日志数据,提升数据解析精度和效率。
根据文件操作日志数据特点,运用auditDataParse库,以记录类型为单位,把日志数据拆分成键值对,从PROCTITLE 类型中提取时间戳、事件ID、文件操作命令和参数,从PATH 类型中提取文件名称及其操作权限,从SYSCALL 类型中提取具体操作用户和操作结论,从CWD 类型中提取当前工作目录,最后所有提取目标日志数据存储到结构体struct audit。运用auditDataPars 库中的解析方法,把相应的数字日志数据解析成对应的文本日志数据并以事件ID 为主键存储于MYSQL 数据库中。
5 文件操作溯源框架设计
audit 审计系统产生海量的日志数据,包含文件操作日志数据(前提是设置好文件监控规则)。文章在audit 审计系统产生文件操作日志数据的基础上,有效设置配置文件和文件监控规则文件,优化文件操作日志数据传输和存储,运用auditDataParse 库提取和解析文件操作日志数据,完成文件操作日志数据收集与存储。其文件操作溯源机制框架设计如图1所示。
图1 文件操作溯源框架设计
文件操作溯源框架包含定制化配置、传输层、数据存储与处理层、数据库层和显示层5个层次。据此框架设计,可开发设计实现Linux 下文件操作溯源。
6 文件操作溯源实现
在Linux 系统(centOS 8)下,基于audit 审计系统(audit 3.0)按上述框架完成文件操作溯源编程。其文件操作溯源如下。
(1)设定配置文件auditd.conf 参数。
(2)设置系统控制和文件系统规则文件 audit.rules。
(3)重启audit 审计系统。
(4)在/home/autest 文件夹下执行如下操作。
(5)根据溯源框架传输层和数据存储与处理层,获取文件操作日志数据并提取、过滤和分析。
(6)存储溯源文件操作日志数据到MYSQL 数据库。
其对应的文件操作记录数据结果见表1。
表1 文件操作溯源记录信息
7 结束语
文章基于audit 审计系统,构建文件操作溯源框架,设置守护进程配置文件和文件监控规则文件,建立netlink 和unix 域套接字日志通信与/proc 存储,基于auditDataParse 库提取、过滤和解析日志,实现溯源文件操作记录信息。但由于audit 审计系统缓存队列大小限制,在有海量日志数据的情况下,容易丢失日志数据。所以基于audit 的文件操作溯源机制适合运用于中型及小型Linux 服务系统。