auditdでユーザー追加・削除の活動を確認する【RHEL9】

Linux,Tech

audidアイキャッチ画像
ブログ運営者
さいとう

閲覧いただきありがとうございます!"さいとう"と申します。わたしは異業種・未経験からIT業界に転職し、現在インフラエンジニアとしてクラウド環境の設計や構築・運用の支援を行っています。


セキュリティの観点や監査要件から、サーバ内でのユーザの行動を記録することがあります。プロジェクトにおいて、稼働中のサーバでユーザの追加や削除を記録することは、重要な意味を持っているからです。ユーザーの追加・削除の行動を監視し、記録することで、セキュリティ、コンプライアンス、システム管理の面で大きな利点がありますね。今回の記事では、AMIがRHEL9のAmazon EC2で、auditdを利用しユーザー追加・削除の活動を確認する方法を紹介します。

はじめに

稼働中サーバにおいて、ユーザの追加や削除を記録することは重要な意味を持っています。不正アクセスを早期に識別したり、誰がいつどのようにシステムに変更を加えたかを追跡することで特権ユーザーによる権限の乱用を検出したりするのに役立ちます。そして、ユーザーの追加・削除の情報を収集するのが、Linuxで動く監査デーモンのauditdです。auditdを利用することで、Linuxシステム上での様々なイベントを追跡し、記録することができます。

auditdとは?

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

【主な機能と利点】

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


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

auditdのインストールと設定

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

auditdがインストールされているか確認
$ which auditd

されていな場合は、rootユーザーで次のコマンドを実行します。
$ sudo yum install audit

インストールが完了したら、実行します。公式にならって、systemctlではなく、serviceコマンドを利用します。
$ sudo service auditd start

システムの起動時に auditd が起動するように設定するには、次のコマンドを実行します。
$ sudo systemctl enable auditd


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

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

sudo useradd testuser


auditdで収集されるログは/var/log/audit/audit.log に記録されます。さきほど作成したユーザーのログが出力されているか確認してみましょう。

# /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コマンドの監査

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コマンドの監査

ユーザー削除コマンドであるuserdelも監視ルールに追加します。

$ 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を利用し、ユーザー追加・削除ログを確認することができました。実務ではさらに、cronや自動化ツールを使って、さきほどのログに対して文字列の監視を行い、メール通知などを組み合わせていきます。

監査ルール追加注意点

前節でauditdで収集された情報を検索しやすくするために、タグ付けする監査ルールを追加しました。しかし、この監査ルールはメモリ上にのみ存在し、auditdサービスを再起動すると失われます。つぎのコマンドを実行すると、さきほど追加した2つのルールが表示されるはずです。

$ sudo auditctl -l


[ec2-user@ip-10-0-1-106 ~]$ sudo auditctl -l
-w /usr/sbin/useradd -p x -k user_added
-w /usr/sbin/userdel -p x -k user_deleted


つづいて、auditdを再起動してみます。

$ sudo service auditd restart


もう一度、ルールの確認コマンドを実行すると、

[ec2-user@ip-10-0-1-106 ~]$ sudo auditctl -l
No rules


ルールが失われ、設定した監査機能がうまく利用できませんね。ルールを失わないようにするためには、/etc/audit/rules.d/ディレクトリにルールファイルを作成する必要があります。

次のコマンドでファイルを作成し、編集します。

$ sudo vi /etc/audit/rules.d/user_rules.rules


以下のテキストを貼り付けてください。

# Monitor user additions
-w /usr/sbin/useradd -p x -k user_added

# Monitor user deletion
-w /usr/sbin/userdel -p x -k user_deleted


[Esc]キーを押し、以下のコマンドで保存・終了します。

:wq


auditdを再起動し、ルールを適用しましょう。

$ sudo service auditd restart


ルールを確認してみましょう。

[ec2-user@ip-10-0-1-106 ~]$ sudo auditctl -l
-w /usr/sbin/useradd -p x -k user_added
-w /usr/sbin/userdel -p x -k user_deleted


ルールファイルに監査ルールを記述しましたので、再起動してもルールが失われなくなりました。

まとめ

ユーザーの追加・削除の監視はセキュリティの観点からどのプロジェクトでも監視要件に入ってきます。auditシステムにあるauditdを利用することでログ収集が可能となり、その他の機能で監視を楽にすることができます。便利な反面、注意すべき点もあります。ルールを複雑にしたり、複数のルールを追加すると、その分ログが過剰に生成されます。大量のログはディスクスペースを消費し、システムのパフォーマンスに悪影響を及ぼす可能性がありますので、監査ルールを慎重に設定して、必要な情報のみを収集するようにしましょう。


【参考】

RedHat -第12章 システムの監査