文章目录
-
* * 1 audit简介-
2 auditctl的使用
-
2 audit配置和规则
-
3 工作原理
-
4 audit接口调用
-
* 4.1 获取和修改配置- 4.2 获取和修改规则
- 4.3 获取审计日志
-
5 audit存在的问题
-
* 5.1 内核版本- 5.2 审计日志过多造成的缓存队列和磁盘问题
- 5.2 容器环境下同一个命令的日志存在差异
-
6 参考文档
-
1 audit简介
audit是Linux内核提供的一种审计机制,由于audit是内核提供的,因此,在使用audit的过程中就包含内核空间和用户空间部分:
- rules:审计规则,其中配置了审计系统需要审计的操作
- auditctl:用户态程序,用于审计规则配置和配置变更
- kaudit:内核空间程序,根据配置好的审计规则记录发生的事件
- auditd:用户态程序,通过netlink获取审计日志
通常的使用流程:
- 用户通过auditctl配置审计规则
- 内核的kauditd程序获取到审计规则后,记录对应的审计日志
- 用户态的auditd获取审计日志并写入日志文件。
audit的主要应用场景是安全审计,通过对日志进行分析发现异常行为。
2 auditctl的使用
auditctl是用户态的控制程序,可以修改audit配置以及审计规则的操作。
auditctl的选项可以分成两类。
配置类:
- -b:配置buffer的大小
- -e:设置enabled标记
- -f:设置failure标记
- -s:返回整体的状态
- –backlog_wait_time:设置backlog_wait_time
审计规则类:
- -a & -A l,a:往某个规则表中增加需要记录的行为
- -d:从某个规则表中删除规则
- -D:删除所有规则
- -F f=v:设置更多监控条件
- -l:查看规则
- -p:在文件监控上设置权限过滤
- -i:当从文件中读取规则时忽略错误
- -c:出错时继续
- -r:设置rate_limit,每秒多少条消息
- -R:从文件中读取规则
- -S:设置要监控的系统调用名或者系统调用号
- -w:增加监控点
- -W:删除监控点
例如,假如我们想要获取调用execve系统调用的事件,可以增加下列的规则:
auditctl -a always,exit -S execve -F key=123456
然后就可以通过ausearch查找该日志:
ausearch -k 123456
如果想要获取执行tail命令的事件,可以增加规则:
auditctl -w /usr/bin/tail -p x -k 123456
然后使用tail命令查看通过ausearch命令查看日志:
time->Sun Apr 23 15:47:36 2023
type=PROCTITLE msg=audit(1682236056.128:4318964): proctitle=7461696C002D6E0032006C756F2E7368
type=PATH msg=audit(1682236056.128:4318964): item=1 name="/lib64/ld-linux-x86-64.so.2" inode=36969 dev=08:03 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:ld_so_t:s0 objtype=NORMAL cap_fp=0000000000000000 cap_fi=0000000000000000 cap_fe=0 cap_fver=0
type=PATH msg=audit(1682236056.128:4318964): item=0 name="/usr/bin/tail" inode=100666597 dev=08:03 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:bin_t:s0 objtype=NORMAL cap_fp=0000000000000000 cap_fi=0000000000000000 cap_fe=0 cap_fver=0
type=CWD msg=audit(1682236056.128:4318964): cwd="/root"
type=EXECVE msg=audit(1682236056.128:4318964): argc=4 a0="tail" a1="-n" a2="2" a3="luo.sh"
type=SYSCALL msg=audit(1682236056.128:4318964): arch=c000003e syscall=59 success=yes exit=0 a0=20749e0 a1=218ecd0 a2=2179ee0 a3=7fffa4a99460 items=2 ppid=58219 pid=59519 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=956 comm="tail" exe="/usr/bin/tail" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="123456"
可以看到,开头一行是事件发生的事件,后面的若干行是执行tail命令产生的事件日志,有些日志很简单,例如CWD,表示操作的当前路径,而有些日志很复杂,例如SYSCALL,有接近30个字段。每行日志都有type字段和msg字段(冒号前面是时间戳,可以通过date命令转换,冒号后面是事件ID,同一条规则产生的事件的事件ID是一样的,因此,如果不使用ausearch查找某条规则产生的日志,就需要先用key进行查找,找到对应的事件ID,然后再通过事件ID查找产生的

最低0.47元/天 解锁文章
1904

被折叠的 条评论
为什么被折叠?



