GNU/Linux >> Linux の 問題 >  >> Cent OS

auditd を使用して特定の SYSCALL を監視する方法

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_rule
CentOS/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 – これはユーザー定義のルール名です。

注意 :「arch」は、syscall の CPU アーキテクチャです。システムが 32 ビット OS の場合は、「arch=b32」で設定する必要があります。

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"


Cent OS
  1. Linux –ラップトップで3台のモニターを使用する方法は?

  2. 特定の auditd ログ エントリを無視/無効にする方法

  3. 「cp」コマンドを使用して特定のディレクトリを除外する方法は?

  1. Linuxの特定のポートで実行されているプロセスを強制終了する方法は?

  2. bashでkill SIGUSR2を使用するには?

  3. 特定のインターフェースで cURL を使用する方法

  1. auditd を使用して Linux でファイルの削除を監視する方法

  2. Linux で ldconfig コマンドを使用する方法

  3. root 以外の特定のユーザーのみに crontab の使用を許可する方法