我们正在尝试使用slack的go-audit工具来捕获/处理linux审计事件.更多信息:https://github.com/slackhq/go-audit
问题是linux审计是正确地拾取事件,但是这些事件没有通过go-audit来获取,或者没有通过go-audit正确输出.
示例go-audit配置文件已被修改为具有单个规则,用于捕获有关对文件/opt/secret.txt的访问的信息
rules:
- -a exit,always -F path=/opt/secret.txt -F perm=wra -k test_changes
完整的go-audit配置文件在这里:
https://gist.github.com/tom-chaoscube/fc2f14b448650ea4018620bbbf2c3345
运行go-audit后,我们可以看到此规则已成功部署:
# auditctl -l
-w /opt/secret.txt -p rwa -k test_changes
尝试访问该文件,并在审计日志文件中看到审计记录:
$cat secret.txt
# cat /var/log/audit/audit.log
type=SYSCALL msg=audit(1485357520.702:868): arch=c000003e syscall=2 success=yes exit=3 a0=7ffee46830dc a1=0 a2=1fffffffffff0000 a3=7ffee4681670 items=1 ppid=5199 pid=5469 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts5 ses=7 comm="cat" exe="/usr/bin/cat" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="test_changes"
type=CWD msg=audit(1485357520.702:868): cwd="/opt"
type=PATH msg=audit(1485357520.702:868): item=0 name="secret.txt" inode=26244598 dev=ca:01 mode=0100644 ouid=0 ogid=0 rdev=00:00 obj=unconfined_u:object_r:usr_t:s0 objtype=NORMAL
但是,在查看go-audit的输出时,不会记录任何事件.我们已经尝试将go-audit设置输出到stdout,也输出到文件.
在go-audit上运行一个strace,看起来它正在打开一个NETLINK套接字,我认为它是与auditd的连接.还可以看出,一些数据是通过套接字接收的,与audit.log中的定期条目一致,但是当审计文件访问审计条目由auditd写入时,似乎没有特别接收任何数据. (不一定能断言).
socket(PF_NETLINK, SOCK_RAW, 9) = 4
bind(4, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 0
setsockopt(4, SOL_SOCKET, SO_RCVBUF, [16384], 4) = 0
getsockopt(4, SOL_SOCKET, SO_RCVBUF, [32768], [4]) = 0
... ...
... ...
write(1, "Started processing events\n", 26) = 26
recvfrom(4, "L\0\0\0\2\0\0\0\1\0\0\0\261\25\0\0\357\377\377\3778\0\0\0\351\3\5\0\1\0\0\0"..., 8970, 0, {sa_family=AF_NETLINK, pid=0, groups=00000000}, [12]) = 76
futex(0xa0f1d0, FUTEX_WAIT, 0, NULL) = 0
有任何建议:
>为什么去审计不接受事件?
>可以采取进一步的步骤来调查go-audit是否真的在套接字上接收事件信息. (即,确定他们不会在审计方面迷路)的步骤
编辑:我已经在Ubunutu 16.10(以及原来的Centos 7机器)上本地尝试过,并且具有相同的结果.
干杯.
解决方法:
解决.
这个问题的答案是auditd仍然在系统上运行.
只需停止审计并重新启动go-audit即可接收审计数据:
sudo service auditd stop