ppidの代わりにppid名を印刷するようにauditdをどのように設定しますか?

ppidの代わりにppid名を印刷するようにauditdをどのように設定しますか?

オペレーティングシステムはDebianです。システムの再起動が何であるかを確認するために auditd を設定しました。

次の規則があります。

-a exit,always -F arch=b64 -S execve -F path=/bin/systemctl -k debug_test

createルールは/usr/sbin/rebootSymlinkなので機能しませんが、/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

コマンドは、ausearchid = VAL、isolateの形式でPPIDを取得し、id=id = VAL、isolateで始まる対応する情報を抽出してa0=実際のコマンドにリンクします。

関連情報