auditctl
実行中のシステムコールなど、多くを監視するのに便利なユーティリティです。
理想的には、記録された各システムコールをインスタンス化したCPUまたはPOSIXスレッドを知りたいです。ログには以下が表示されます。
type=SYSCALL msg=audit(1561851079.335:286): arch=c000003e syscall=9 success=yes exit=140507297914880 a0=0 a1=1000 a2=3 a3=22 items=0 ppid=22818 pid=24283 auid=1005 uid=1005 gid=1005 euid=1005 suid=1005 fsuid=1005 egid=1005 sgid=1005 fsgid=1005 tty=pts0 ses=89 comm="my_benchmark" exe="my_benchmark" key=(null)
私は何かを見逃していない限り、これらのどれも動作しないと思います。私が望むことができるかどうかを知っている人はいますか?ありがとうございます。
答え1
ausearch -i
少なくとも監査ラインを接続すると、最も多くの情報を得ることができます。
» echo "type=SYSCALL msg=audit(1561851079.335:286): arch=c000003e syscall=9 success=yes exit=140507297914880 a0=0 a1=1000 a2=3 a3=22 items=0 ppid=22818 pid=24283 auid=1005 uid=1005 gid=1005 euid=1005 suid=1005 fsuid=1005 egid=1005 sgid=1005 fsgid=1005 tty=pts0 ses=89 comm="my_benchmark" exe="my_benchmark" key=(null)" | ausearch -i
----
type=SYSCALL msg=audit(06/30/2019 01:31:19.335:286) : arch=x86_64 syscall=mmap success=yes exit=140507297914880 a0=0x0 a1=0x1000 a2=PROT_READ|PROT_WRITE a3=MAP_PRIVATE|MAP_ANONYMOUS items=0 ppid=22818 pid=24283 auid=unknown(1005) uid=unknown(1005) gid=dovenull euid=unknown(1005) suid=unknown(1005) fsuid=unknown(1005) egid=dovenull sgid=dovenull fsgid=dovenull tty=pts0 ses=89 comm=my_benchmark exe=my_benchmark key=(null)
AFAIK、スレッドIDはカーネルによって生成されたシステムコールに対してのみ記録され、このpid
フィールドに配置されます。引用:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/security_guide/app-audit_reference以下pid
:
フィールド
pid
の意味は、フィールド値のソースによって異なります。ユーザー空間で作成されたフィールドでは、このフィールドにはプロセスIDが保持されます。カーネル生成フィールドでは、このフィールドはスレッドIDを保持します。シングルスレッドプロセスの場合、スレッドIDはプロセスIDと同じです。このスレッド ID の値は、ユーザー空間で使用される pthread_t ID とは異なります。詳細は、gettid(2) のマニュアルページを参照してください。
ユーザー生成システムコールのスレッドIDを監査する方法がわかりません。