0x01 前言
Linux auditd 工具可以将审计记录写入日志文件,包括记录系统调用和文件访问。通过这个系统自带的系统,可以帮助分析安全威胁(很多HIDS也调用了这个功能)。
0x02 audit in Linux
大概说整个audit系统的流程:
如图,实线代表数据流,虚线代表组件之间的控制关系。
在Linux内核中,对应用程序有以下几种调用:
- User : 记录用户空间产生的事件;它的作用是过滤消息的,内核传递给审计后台进程之前先查询它。
- Task :跟踪应用程序的子进程(fork);当一个任务被创建时,也就是父进程通过 fork 和克隆创建子进程时记录该事件;
- Exit :当一个系统调用结束时判断是否记录该调用;
- Exclude :删除不合格事件;Exclude 是用来过滤消息的,也就是不想看到的消息可以在这里写规则进行过滤。
Linux 用户空间审计系统由 auditd、audispd、auditctl、autrace、ausearch 和 aureport 等应用程序组成。下面依次说明:
- auditctl : 即时控制审计守护进程的行为的工具,如添加规则等。
- auditd :audit 守护进程负责把内核产生的信息写入到硬盘上,这些信息由应用程序和系统活动触发产生。用户空间审计系统通过 auditd 后台进程接收内核审计系统传送来的审计信息,将信息写入到 /var/log/audit/audit.log。
- aureport : 查看和生成审计报告的工具。
- ausearch : 查找审计事件的工具
- auditspd : 转发事件通知给其他应用程序,而不是写入到审计日志文件中。
- autrace : 一个用于跟踪进程的命令。类似于 strace,跟踪某一个进程,并将跟踪的结果写入日志文件之中。
0x03 audit启动
Linux默认都是开启的,可以通过auditctl -s
来查看audit内核模块的状态,如果返回的结果中的enabled 0
则表示未开启,为1
的时候表示开启,2
表示规则锁定状态 ,可通过 -e
参数进行设置。
我们常见的是auditd服务,所以可以通过 service auditd status
来查看auditd服务是否开启,这个和的enabled
是有区别的。
0x04 audit配置文件
进入/etc/audit
目录auditd.conf
是守护程序的默认配置文件,audit.rules
是记录审计规则的文件。
0x05 auditctl
auditctl 命令是 Linux 用户空间审计系统的最主要的部分,
audit 审计规则分成三个部分:
0x01 控制规则
控制规则用于更改审计系统本身的配置和设置。
控制规则可以在/etc/audit/audit.rules 中设置。主要包括:
-D #删除所有当前装载的审核规则#
-b 8192 #在内核中设定最大数量的已存在的审核缓冲区为 8Mb#
-e 2 #锁定审核配置#
0x02 文件系统规则
这些是文件或目录监视。 使用这些规则,我们可以审核对特定文件或目录的任何类型的访问。
监控文件系统行为(依靠文件、目录的权限属性来识别)
规则格式:
-w 路径
-p 权限
-k 关键字
其中-p 权限的动作分为四种: rwxa
例如要监控某个 文件的修改行为,可以使用这个命令:1
auditctl -w filename -p wa
将一段数据写入写入测试文件,可以看到log直接告警了。
如果想要永久使用,可以将规则写入/etc/audit/rules.d/audit.rules
0x03 系统调用规则
这些规则用于监视由任何进程或特定用户进行的系统调用,比较常用。
命令格式:1
auditctl [option] filter,action -S syscall -F condition -k label
option 参数比较多,具体的可以man auditctl
项目 | 可选参数 | 说明 |
---|---|---|
filter | user,exit,task,exclude | filter 详细说明哪个内核规则匹配过滤器应用在事件中。以下是其中之一的与规则匹配的过滤器: task、exit、user 以及 exclude |
action | always, never | 是否审核事件(always 表示是)(never 表示否) |
syscall | all, 2, open 等 | 所有的系统调用都可以在/usr/include/asm/unistd_64.h 文件中找到。许多系统调用都能形成一个规则 |
condition | euid=0, arch=b64 | 详细说明其他选项,进一步修改规则来与以特定架构、组 ID、进程 ID 和其他内容为基础的事件相匹配 |
label | 任意文字 | 标记审核事件并检索日志 |
-S 表示系统调用号或名字
-F 表示规则域
-k 表示设置审计规则上的过滤关键
官方也写了几个expamples1
2
3
4
5
6
7
8To see all syscalls made by a specific program:
auditctl -a always,exit -S all -F pid=1005
To see files opened by a specific user:
auditctl -a always,exit -S openat -F auid=510
To see unsuccessful openat calls:
auditctl -a always,exit -S openat -F success=0
0x06 show me code
这里利用go-libaudit
这个库来测试
Linux Audit Framework
参考
https://www.ibm.com/developerworks/cn/linux/l-lo-use-space-audit-tool/index.html