オペレーティングシステムはDebianです。システムの再起動が何であるかを確認するために auditd を設定しました。
次の規則があります。
-a exit,always -F arch=b64 -S execve -F path=/bin/systemctl -k debug_test
createルールは/usr/sbin/reboot
Symlinkなので機能しませんが、/bin/systemctl
このルールはうまく機能し、再起動コマンドが実行されるたびにキャプチャします。その後、次のコマンドを使用してこれらの再起動を検索できますausearch -k debug_test | grep reboot
。 (ルールキーにはgrepに必要な文字列「reboot」は含まれていません。)
ところでこれは担当プロセスのppidだけを出力するだけです。そのppidのプロセス名を探しています。これを記録するようにaudidを設定できますか?それとも、15秒ごとにすべてのpid +プロセス名を記録するために一種のデーモンを作成する必要がありますか?
答え1
私は振り返っていた文書のレビュー一部。
Auditd
などのプレースホルダを使用しないでください%{process.value}
。値のリストに基づいています。
uid, auid, gid, pid, subj_user, subj_role, subj_type, subj_sen, subj_clr, msgtype, and executable name.
ルールキーに親プロセス名を直接書き込むことは不可能だと思います。 「実行ファイル名」を使用することがsystemctl
&私が経験している問題だと思いますreboot
。
「監査ログに印刷された親プロセスID(ppid)で親プロセス名を見つけることができます。」(これは基本的に私の最初の答えです。terdon ;-))
ausearch
生を使用してppid
このプロセスを生成したイベントを見つけることができることがわかりました。execve
システムコールに記録されます。つまりPID
「すぐに行ってしまう!
PPIDと同じログ行で、type=EXECVE
「make」コマンド(a0、a1 ...)で使用されるパラメータのリストを見つけます。
type=EXECVE msg=audit(1622816736.650:123456): argc=3 a0="sh" a1="-c" a2="reboot"
sh
これは、親プロセスが引数とともに-c
コマンド()を実行するシェル()であることを示しますreboot
。今ausearch
私が提案する最初の提案は結婚式をすることができるということです。
#!/bin/bash
# Assuming ausearch command outputs lines with the format id=VAL
for ppid_line in $(your_actual_ausearch_command_here); do
ppid_to_match=$(echo "$ppid_line" | grep -Eo 'id=[0-9]{1,}')
# Extract the process information and commands
process_info=$(sudo cat /var/log/audit/audit.log | grep -i "$ppid_to_match" | grep -Ei 'a0=.*')
echo "$ppid_to_match is: $process_info"
done
exit 0
コマンドは、ausearch
id = VAL、isolateの形式でPPIDを取得し、id=
id = VAL、isolateで始まる対応する情報を抽出してa0=
実際のコマンドにリンクします。