Linux カーネルがサービスを提供するように要求するコマンドをユーザーが実行するたびに、SYSCALL が発生します。 mount、umount、kill、open などの SYSCALL がいくつかあります。これらの SYSCALL は auditd システムで監視できます。例として、SYSCALL を「殺す」としましょう。
ユーザーは、システム上の特定のプロセスを強制終了したユーザーを把握したいと考えています。これは、呼び出されるたびに SYSCALL kill をキャプチャできる auditd ルールを作成することで簡単に実現できます。
auditd のインストールと構成
auditd は、ほとんどの場合、Linux ディストリビューションにプリインストールされています。利用できない場合は、それぞれの OS パッケージ マネージャーを使用してインストールできます。たとえば、CentOS/RHEL の場合:
# yum install auditd
起動時に auditd サービスを開始できるようにし、「service」コマンドを使用して開始します。
# systemctl enable auditd # service start auditd
SYSCALL を監視するための auditd ルールの構成
プロセスを強制終了するすべてを見つけるために使用できる「kill」SYSCALL を監視するルールを作成しましょう。
1. 次のルールを auditd ルール構成ファイル /etc/audit/rules.d/audit.rules に追加します。 :
# vi /etc/audit/rules.d/audit.rules -a exit,always -F arch=b64 -S kill -k kill_ruleCentOS/RHEL 6 では、構成ファイルは /etc/audit/audit.rules です。 /etc/audit/rules.d/audit.rules の代わりに。
ここでは、
-常に出口です – ここに、アクションとリストがあります。 OS がシステム コールを終了するたびに、終了リストを使用して、監査イベントを生成する必要があるかどうかを判断します。
-F arch=b64 – -F オプションは、ルール フィールドを構築するために使用されます。 b64 は、コンピューターが x86_64 CPU で実行されていることを意味します。 (Intel か AMD かは関係ありません。)
-S kill – -S オプションは、監視するシステム コールを指定します。
-k – これはユーザー定義のルール名です。
2. 新しいルールを有効にするために auditd サービスを再起動します。
# service restart auditd
3. 「auditctl -l」コマンドを使用して、定義されたルールが有効かどうかを確認できます。
# auditctl -l -a always,exit -F arch=b64 -S kill -F key=kill_rule
確認
作成したばかりのルールが実際に機能するかどうかの例を見てみましょう。 「sleep 500」プロセスを開始して強制終了するだけです。これにより、誰がどのプログラム/コマンドでプロセス (uid) を強制終了したかなどのすべての詳細を含む監査ログが生成されます。
1. バックグラウンドで単純なスリープ プロセスを生成します。
# sleep 600 &
2. スリープ プロセスのプロセス ID を確認し、それを強制終了します。
# ps -ef | grep sleep root 2089 1784 0 15:12 pts/0 00:00:00 sleep 600
# kill -9 2089
3. 監査ログ ファイル /var/log/audit/audit.log を確認します。 kill 監査ログ用。ログは次のようになります。
# tail -f /var/log/audit/audit.log type=SYSCALL msg=audit(1529507591.700:304): arch=c000003e syscall=62 success=yes exit=0 a0=829 a1=9 a2=0 a3=829 items=0 ppid=1783 pid=1784 auid=1001 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="bash" exe="/usr/bin/bash" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="kill_rule" type=OBJ_PID msg=audit(1529507591.700:304): opid=2089 oauid=1001 ouid=0 oses=1 obj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 ocomm="sleep" type=PROCTITLE msg=audit(1529507591.700:304): proctitle="-bash"
4. 監査ログで目的のログを探すのが難しい場合があります。その場合、ルールで定義されたキーを指定して「ausearch」コマンドを使用することもできます。例:
# ausearch -k kill_rule ... time->Wed Jun 20 15:13:11 2018 type=PROCTITLE msg=audit(1529507591.700:304): proctitle="-bash" type=OBJ_PID msg=audit(1529507591.700:304): opid=2089 oauid=1001 ouid=0 oses=1 obj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 ocomm="sleep" type=SYSCALL msg=audit(1529507591.700:304): arch=c000003e syscall=62 success=yes exit=0 a0=829 a1=9 a2=0 a3=829 items=0 ppid=1783 pid=1784 auid=1001 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="bash" exe="/usr/bin/bash" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="kill_rule"