auditdでユーザー追加・削除の監視をする方法【RHEL9】

セキュリティの観点や監査要件から、サーバ内でのユーザの行動を記録することがあります。プロジェクトにおいて、稼働中のサーバでユーザの追加や削除を記録することは、重要な意味を持っているからです。

 

ユーザーの追加・削除の行動を監視し、記録することで、セキュリティ、コンプライアンス、システム管理の面で大きな利点がありますね。

 

今回の記事では、AMIがRHEL9のAmazon EC2で、auditdを利用しユーザー追加・削除の監視をする方法を紹介します。

 

 

ユーザー追加・削除の監視をしてみる

稼働中サーバにおいて、ユーザの追加や削除を記録することは重要な意味を持っています。不正アクセスを早期に識別したり、誰がいつどのようにシステムに変更を加えたかを追跡することで特権ユーザーによる権限の乱用を検出したりするのに役立ちます。

 

そして、ユーザーの追加・削除の情報を収集するのが、Linuxで動く監査デーモンのauditdです。auditdを利用することで、Linuxシステム上での様々なイベントを追跡し、記録することができます。

 

 

■auditdとは?

auditdとは、Linuxシステムで動作する監査デーモンで、auditシステムの一部です。 auditシステムは、システム上でのイベントを監視し、記録し、セキュリティ監査のための詳細なログを生成することを目的としています。今回利用するauditdは、特にシステムセキュリティポリシーの遵守、侵入検知、システム変更の追跡、および問題のトラブルシューティングにおいて重要な役割を果たします。

 

【主な機能と利点】

  • 詳細な監査ログの提供:auditdはシステムコール、ファイルアクセス、認証試行など、システム上で発生するさまざまなイベントに関する詳細な情報を提供します。
  • セキュリティ監査とコンプライアンス:セキュリティポリシーの遵守を確認し、規制要件(例:PCI DSSやHIPAA)に対するコンプライアンスをサポートします。
  • 侵入検知と問題解析:不審な活動やシステム上の問題を検出し、原因を解析するための詳細な情報を提供します。

セキュリティー関連の認定における要件についてはこちら

 

 

■auditdのインストールと設定

今回利用するRHEL9のAMIにはauditdがインストール・実行されています。もしインストールされていない場合は、こちらのガイドに沿ってインストールしてください。

 

 

■ユーザー追加・削除イベントの監査ルールの設定

ユーザーの追加・削除を実行すると、デフォルト機能としてauditdが情報を収集し、/var/log/audit/以下のログに記録されます。
sudo useradd testuser

 

# /var/log/audit/audit.log
type=ADD_USER msg=audit(1711763522.093:235): pid=4336 uid=0 auid=1000 ses=2 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 msg='op=add-user acct="testuser" exe="/usr/sbin/useradd" hostname=ip-10-0-1-106.ap-southeast-1.compute.internal addr=? terminal=pts/0 res=success'^]UID="root" AUID="ec2-user"

 

上記のaudit.logは関係個所のみ抜粋したもので、実際は膨大な量です。grepで検索して確認することも可能ですが、auditシステムには監視を楽にする便利な機能があります。それは、識別タグの付与と、識別タグを用いた検索機能です。

 

 

●監査ルールの追加

まずはauditctlコマンドで監査ルールを追加し、識別タグの付与を実施します。

 

1. useraddコマンドの監査

ユーザーの追加の監査ルールを設定します。
sudo auditctl -w /usr/sbin/useradd -p x -k user_added

 

-w: /usr/sbin/useraddは監査するファイルのパスを指定
-p x: 実行(execution)を監査
-k: user_addedはこのルールにuser_addedというキー(識別タグ)を割り当て

 

2. useraddコマンドの監査

ユーザーの削除の監査ルールを設定します。
sudo auditctl -w /usr/sbin/userdel -p x -k user_deleted

 

 

●監査ログの確認

上記ルールを設定しましたら、useraddやuserdelコマンドが実行されると、関連イベントは/var/log/audit/audit.logに記録されます。設定したキー(タグ)を使って、関連する監査ログを検索してみましょう。

 

まずは、ユーザーを追加します。
sudo useradd testuser1

 

つづいて、ausearchコマンドで識別タグを利用しユーザー追加したログだけ見てみましょう。
sudo ausearch -k user_added

 

[ec2-user@ip-10-0-1-106 ~]$ sudo useradd testuser1
[ec2-user@ip-10-0-1-106 ~]$ sudo ausearch -k user_added
----
time->Sat Mar 30 02:33:30 2024
type=PROCTITLE msg=audit(1711766010.345:374): proctitle=617564697463746C002D77002F7573722F7362696E2F75736572616464002D700078002D6B00757365725F6164646564
type=SYSCALL msg=audit(1711766010.345:374): arch=c000003e syscall=44 success=yes exit=1084 a0=4 a1=7ffcb315e8a0 a2=43c a3=0 items=0 ppid=4701 pid=4703 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts2 ses=5 comm="auditctl" exe="/usr/sbin/auditctl" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null)
type=CONFIG_CHANGE msg=audit(1711766010.345:374): auid=1000 ses=5 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 op=add_rule key="user_added" list=4 res=1
----
time->Sat Mar 30 02:33:43 2024
type=PROCTITLE msg=audit(1711766023.290:395): proctitle=7573657261646400746573747573657231
type=PATH msg=audit(1711766023.290:395): item=1 name="/lib64/ld-linux-x86-64.so.2" inode=8534874 dev=103:04 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:ld_so_t:s0 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=PATH msg=audit(1711766023.290:395): item=0 name="/sbin/useradd" inode=8389224 dev=103:04 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:useradd_exec_t:s0 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=CWD msg=audit(1711766023.290:395): cwd="/home/ec2-user"
type=EXECVE msg=audit(1711766023.290:395): argc=2 a0="useradd" a1="testuser1"
type=SYSCALL msg=audit(1711766023.290:395): arch=c000003e syscall=59 success=yes exit=0 a0=559229d2fc78 a1=559229d1a488 a2=559229d58750 a3=0 items=2 ppid=4718 pid=4720 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts2 ses=5 comm="useradd" exe="/usr/sbin/useradd" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="user_added"

 

本来ならaudit.logの膨大な量の中から探さないといけませんが、監査ルールで識別タグを付与していますので、必要な部分のみ出力されていますね。

 

ユーザー削除も見てみます。
sudo userdel -r testuser1

 

ユーザー削除した活動に識別タグ[user_deleted]を付与するようにしていますので、以下のコマンドで検索してみましょう。
sudo ausearch -k user_deleted

 

[ec2-user@ip-10-0-1-106 ~]$ sudo userdel -r testuser1
[ec2-user@ip-10-0-1-106 ~]$ sudo ausearch -k user_deleted
----
time->Sat Mar 30 02:33:36 2024
type=PROCTITLE msg=audit(1711766016.653:385): proctitle=617564697463746C002D77002F7573722F7362696E2F7573657264656C002D700078002D6B00757365725F64656C65746564
type=PATH msg=audit(1711766016.653:385): item=0 name="/usr/sbin/" inode=8389191 dev=103:04 mode=040555 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:bin_t:s0 nametype=PARENT cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=CWD msg=audit(1711766016.653:385): cwd="/home/ec2-user"
type=SOCKADDR msg=audit(1711766016.653:385): saddr=100000000000000000000000
type=SYSCALL msg=audit(1711766016.653:385): arch=c000003e syscall=44 success=yes exit=1088 a0=4 a1=7ffe9c7ba000 a2=440 a3=0 items=1 ppid=4708 pid=4710 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts2 ses=5 comm="auditctl" exe="/usr/sbin/auditctl" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null)
type=CONFIG_CHANGE msg=audit(1711766016.653:385): auid=1000 ses=5 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 op=add_rule key="user_deleted" list=4 res=1
----
time->Sat Mar 30 02:34:14 2024
type=PROCTITLE msg=audit(1711766054.810:411): proctitle=7573657264656C002D7200746573747573657231
type=PATH msg=audit(1711766054.810:411): item=1 name="/lib64/ld-linux-x86-64.so.2" inode=8534874 dev=103:04 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:ld_so_t:s0 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=PATH msg=audit(1711766054.810:411): item=0 name="/sbin/userdel" inode=8389225 dev=103:04 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:useradd_exec_t:s0 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=CWD msg=audit(1711766054.810:411): cwd="/home/ec2-user"
type=EXECVE msg=audit(1711766054.810:411): argc=3 a0="userdel" a1="-r" a2="testuser1"
type=SYSCALL msg=audit(1711766054.810:411): arch=c000003e syscall=59 success=yes exit=0 a0=56361f461c78 a1=56361f44c488 a2=56361f48a750 a3=0 items=2 ppid=4731 pid=4733 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts2 ses=5 comm="userdel" exe="/usr/sbin/userdel" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="user_deleted"

 

audtdを利用し、ユーザー追加・削除ログが監視できそうですね。

 

 

まとめ

ユーザーの追加・削除の監視はセキュリティの観点からどのプロジェクトでも監視要件に入ってきます。auditシステムにあるauditdを利用することでログ収集が可能となり、その他の機能で監視を楽にすることができます。

 

便利な反面、注意すべき点もあります。ルールを複雑にしたり、複数のルールを追加すると、その分ログが過剰に生成されます。大量のログはディスクスペースを消費し、システムのパフォーマンスに悪影響を及ぼす可能性がありますので、監査ルールを慎重に設定して、必要な情報のみを収集するようにしましょう。

 

 

参考リンク:RedHat公式ドキュメント

 

 

Last modified: 2024-03-30

Author