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の出力を見ると、イベントは記録されません。 stdoutとファイルとして出力するようにgo-auditを設定してみました。
go-auditでstraceを実行すると、auditdへの接続であるNETLINKソケットが開いているように見えます。また、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がイベントを受信できなかったのはなぜですか?
- go-auditが実際にソケットを介してイベント情報を受信しているかどうかを調べるための追加の手順を実行できます。 (つまり、感謝の中で迷子にならないようにするためのステップ)
編集:その後、Ubunutu 16.10(元のCentos 7システムを含む)でローカルで試しましたが、同じ結果が得られました。
乾杯。
答え1
解決する。
この質問に対する答えは、auditdがまだシステムで実行されていることです。
監査データを受け取るには、auditdを停止してgo-auditを再起動するだけです。
sudo service auditd stop