認証部分の postfix プロセスと saslauthd から渡される文字列を取得する単一の bpftrace スクリプトを作成しようとしています。目標は、私の会社の侵害アカウントを検出することです。strace コマンドを実行すると、いくつかの良い結果が得られます。
strace -p PID -s 100 -e 'read'
read(7, "\0\20", 2) = 2
read(7, "xxxxxxxxxx", 10) = 10
read(7, "\0\t", 2) = 2
read(7, "YYYYYYYYY", 9) = 9
read(7, "\0\4", 2) = 2
read(7, "smtp", 4) = 4
ログイン/パスワードを回復し、ブルートフォースが実行されているかどうかを検出できます。
しかし、私は bpftrace で同じ結果を得ようとしています:
$ bpftrace -e 'kprobe:sys_read /comm=="saslauthd"/ {printf("%<%s>\n",str(arg1,arg2));}'
<>
<login>
<>
<>
<>
<smtp>
この場合、一部の sys_read syscall 文字列を読み取ることができますが、すべてではありません。bpftrace が同じ結果にならない理由がわかりません。また、null 文字についても考えます。なぜstr(arg1,arg2)を使用して配列のサイズを強制するのかということです。トレースポイントも使用しようとしましたが、これは同じ結果です。
多分誰かが私のエラーがどこにあるかを理解するのを手伝ってくれるでしょうか? そのため、ご意見をお待ちしております