LOnils's Blog

利用Linux audit分析安全威胁

Word count: 1.3kReading time: 4 min
2018/08/09 Share

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 表示设置审计规则上的过滤关键

官方也写了几个expamples

1
2
3
4
5
6
7
8
To 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

CATALOG
  1. 1. 0x01 前言
  2. 2. 0x02 audit in Linux
  3. 3. 0x03 audit启动
  4. 4. 0x04 audit配置文件
  5. 5. 0x05 auditctl
    1. 5.1. 0x01 控制规则
    2. 5.2. 0x02 文件系统规则
    3. 5.3. 0x03 系统调用规则
  6. 6. 0x06 show me code
  7. 7. 参考