Audit是什么

Audit是Linux中的审计程序,主要的作用可以看做审计日志,功能全面,可以说市面上大部分Linux探针都绕不开Audit,且Audit有着实时性很强的特性,因此可以替代部分Linux Hook操作及监控操作。

Audit主要监测的内容包含但不限于

  • 文件监控(文件操作日志,创建,删除,增加,修改,权限 …)
  • 网络监控 (connect,close,bind)
  • 进程监控 (execve)(按pid监控)

本文主体也按照如上几种常见探针功能描述

Audit使用方式

audit 启动

如何使用肯定是第一话题,现在绝大部分的Linux主机都内置了Audit

通过命令启动即可 /etc/init.d/auditd start

audit会在目录 /var/log/audit/ 下生成log文件,通过解析audit的原始log可以拿到非常多的审计日志信息

Netlink监控,通过netlink也可以监控audit信息

audit 日志配置

列举一些常见配置

监控execve,也可用作进程启动

1
-a exit,always -F arch=b64 -S execve -k ProcStart

系统关键目录监控

1
2
3
-w /etc/hosts -p w -k HostChange
-w /etc/services -p w -k ServicesChange
-w /etc/sysconfig/network-devices/ -p w -k NetCardChange

套接字监控

1
-a always,exit -F arch=b64 -S socket -k SocketChange

连接监控

1
-a always,exit -F arch=b64 -S connect -k ConnectChange

发送消息监控

1
-a always,exit -F arch=b64 -S sendmsg -k SendMsgChange

绑定监控

1
-a always,exit -F arch=b64 -S bind -k BindChange

接收消息监控

1
-a always,exit -F arch=b64 -S recvmsg -k RecvMsgChange

关闭操作监控(量大)

1
-a always,exit -F arch=b64 -S close -k CloseChange

过滤日志

1
2
# 参照如下写法
-A exit,never -F path=/bin/ls -F perm=x

audit 日志配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#  设置日志文件
log_file = /var/log/audit/audit.log
log_group = root
log_format = ENRICHED
flush = INCREMENTAL_ASYNC
freq = 50
# 设置日志文件大小,单位是MB
max_log_file = 8
# 日志文件滚动的数目,如果设置为小于 2,则不会循环记录。没设置则位0,不循环日志文件
num_logs = 5
priority_boost = 4
name_format = NONE
##name = mydomain
# 日志文件到达最大值后的动作,ROTATE是滚动记录
max_log_file_action = ROTATE

Audit监控文件

为什么不选择Inotify

inotify应该是应用最广泛的文件监控工具了,针对Linux的思想,一切皆文件,Inotify确实是得天独厚

inotify适用的场景不同,inotify使用epoll,性能更佳,但inotify只能监控文件的部分信息,无法做到审计,也就是操作进程的信息和操作用户信息,作为一个优秀的EDR,必然需要审计分析能力,因此Inotify只能作为部分监控项所用,如果需要溯源,audit更适合

如何判断文件的操作行为

根据不同的文件制定不同的key,如果key是唯一的那么可以通过key来识别文件,或者根据audit日志中的path来识别

操作行为可以通过系统的syscall来判断 增删改查,需要监控文件时增加文件监控属性 -p rwax

Audit监控网络访问

必须配置对应的采集配置

Audit监控进程启动

必须配置对应的采集配置

进程监控建议增加过滤,否则会积压很多Audit日志

关于探针

探针采集内容目前非常稳定,各类进程,网络,文件,防火墙(适配多种主流防火墙),系统信息,系统状态,外设,硬件设备….

欢迎交流~