auditdでソフトウェア更新を確認する方法【RHEL9】

サービス稼働中のサーバにおけるソフトウェアの更新監視は、セキュリティ強化、システムの信頼性維持、法規制遵守の確保の観点から重要です。

 

RHEL8以降で採用されているパッケージマネージャーのdnfでは、パッケージのインストールやアップデートが行われると"dnf.log"や"dn.rpm.log"に活動が出力されます。しかし、プロジェクトではdnfやyum、aptなどの各ディストリビューションの標準パッケージマネージャーだけではなく、pip,npm,cpanなどの特定言語のパッケージマネージャーを利用する場合があるかもしれません。パッケージマネージャーが増えると、監視しなければいけないログファイルの種類が増えます。auditdを利用すれば、各パッケージマネージャーで行われたソフトウェア更新が一元的に監視することが可能です。

 

今回の記事では、auditdを利用して、ソフトウェア更新を確認する方法を紹介します。

 

 

ソフトウェア更新の監視をしてみる

稼働中サーバにおいて、ソフトウェアの更新を監視することは重要な意味を持っています。例えば、パッチ適用が適切に行われたかや脆弱性への対応、監査証跡の管理において役立ちますよね。

 

しかし、ソフトウェアの更新方法は複数あり、それに対応してログファイルも複数存在します。RHEL9で採用されている監査システムauditには、ソフトウェアの更新を監視するため設定が備わっています。情報収集を担うauditdに監査ルールを追加し、ソフトウェアの更新を一元的に記録できるようにしてみましょう。

 

 

■auditdとは?

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

 

【主な機能と利点】

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

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

 

 

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

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

 

 

■ソフトウェア更新監査の設定とログ確認

auditdを使用してソフトウェア更新プロセス(例:dnfコマンド、pipコマンド)を監視するための具体的な監査ルールの設定方法を紹介します。

 

1.dnfの場合

sudo auditctl -w /usr/bin/dnf-3 -p x -k software-installer

 

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

 

[ec2-user@ip-10-0-1-13 ~]$ sudo auditctl -w /usr/bin/dnf-3 -p x -k software-installer

 

nginxをインストールしてみます。
sudo dnf install -y nginx

 

[ec2-user@ip-10-0-1-13 ~]$ sudo dnf install -y nginx
Updating Subscription Management repositories.
Unable to read consumer identity

This system is not registered with an entitlement server. You can use subscription-manager to register.

========<省略>========

Installed:
  nginx-1:1.20.1-14.el9_2.1.x86_64             nginx-core-1:1.20.1-14.el9_2.1.x86_64         nginx-filesystem-1:1.20.1-14.el9_2.1.noarch
  redhat-logos-httpd-90.4-2.el9.noarch

Complete!

 

ausearchを利用して、ログを確認してみましょう。
sudo ausearch -k software-installer

 

[ec2-user@ip-10-0-1-13 ~]$ sudo ausearch -k software-installer
----
time->Sat Apr  6 05:22:46 2024
type=PROCTITLE msg=audit(1712380966.134:232): proctitle=617564697463746C002D77002F7573722F62696E2F646E662D33002D700078002D6B00736F6674776172652D696E7374616C6C6572
type=SYSCALL msg=audit(1712380966.134:232): arch=c000003e syscall=44 success=yes exit=1088 a0=4 a1=7fff237f3f60 a2=440 a3=0 items=0 ppid=4313 pid=4315 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=2 comm="auditctl" exe="/usr/sbin/auditctl" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null)
type=CONFIG_CHANGE msg=audit(1712380966.134:232): auid=1000 ses=2 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 op=add_rule key="software-installer" list=4 res=1
----
time->Sat Apr  6 05:22:59 2024
type=PROCTITLE msg=audit(1712380979.018:240): proctitle=2F7573722F62696E2F707974686F6E332E39002F62696E2F646E6600696E7374616C6C002D79006E67696E78  
type=PATH msg=audit(1712380979.018:240): item=2 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(1712380979.018:240): item=1 name="/usr/bin/python3.9" inode=1367 dev=103:04 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:bin_t:s0 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=PATH msg=audit(1712380979.018:240): item=0 name="/bin/dnf" inode=832 dev=103:04 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:rpm_exec_t:s0 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=CWD msg=audit(1712380979.018:240): cwd="/home/ec2-user"
type=EXECVE msg=audit(1712380979.018:240): argc=5 a0="/usr/bin/python3.9" a1="/bin/dnf" a2="install" a3="-y" a4="nginx"
type=SYSCALL msg=audit(1712380979.018:240): arch=c000003e syscall=59 success=yes exit=0 a0=55f4e3b40c78 a1=55f4e3b2b488 a2=55f4e3b69750 a3=0 items=3 ppid=4317 pid=4319 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=2 comm="dnf" exe="/usr/bin/python3.9" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="software-installer"

 

 

2.pipの場合

sudo auditctl -w /usr/bin/pip3 -p x -k software-installer

 

[ec2-user@ip-10-0-1-108 ~]$ sudo auditctl -w /usr/bin/pip3 -p x -k software-installer

 

pipでpandasをインストールしてみます。
pip3 install pandas

 

[ec2-user@ip-10-0-1-108 ~]$ pip3 install pandas
Defaulting to user installation because normal site-packages is not writeable
Collecting pandas
  Using cached pandas-2.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (13.0 MB)

========<省略>========

  WARNING: Additional context:
  user = True
  home = None
  root = None
  prefix = None
Successfully installed pandas-2.2.1

 

ausearchを利用して、ログを確認してみましょう。
sudo ausearch -k software-installer

 

[ec2-user@ip-10-0-1-108 ~]$ sudo ausearch -k software-installer
----
time->Sat Apr  6 03:36:41 2024
type=PROCTITLE msg=audit(1712374601.270:277): proctitle=617564697463746C002D77002F7573722F62696E2F70697033002D700078002D6B00736F6674776172652D696E7374616C6C6572
type=SYSCALL msg=audit(1712374601.270:277): arch=c000003e syscall=44 success=yes exit=1088 a0=4 a1=7ffc89df4f40 a2=440 a3=0 items=0 ppid=4394 pid=4396 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=2 comm="auditctl" exe="/usr/sbin/auditctl" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null)
type=CONFIG_CHANGE msg=audit(1712374601.270:277): auid=1000 ses=2 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 op=add_rule key="software-installer" list=4 res=1
----
time->Sat Apr  6 03:37:05 2024
type=PROCTITLE msg=audit(1712374625.345:280): proctitle=2F7573722F62696E2F707974686F6E33002F7573722F62696E2F7069703300696E7374616C6C0070616E646173
type=PATH msg=audit(1712374625.345:280): item=2 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(1712374625.345:280): item=1 name="/usr/bin/python3" inode=1367 dev=103:04 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:bin_t:s0 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=PATH msg=audit(1712374625.345:280): item=0 name="/usr/bin/pip3" inode=632747 dev=103:04 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:bin_t:s0 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=CWD msg=audit(1712374625.345:280): cwd="/home/ec2-user"
type=EXECVE msg=audit(1712374625.345:280): argc=4 a0="/usr/bin/python3" a1="/usr/bin/pip3" a2="install" a3="pandas"
type=SYSCALL msg=audit(1712374625.345:280): arch=c000003e syscall=59 success=yes exit=0 a0=55aaa7c4f450 a1=55aaa7c864d0 a2=55aaa7c4d050 a3=8 items=3 ppid=4287 pid=4398 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts0 ses=2 comm="pip3" exe="/usr/bin/python3.9" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="software-installer"

 

 

まとめ

ソフトウェア更新の監視はセキュリティや、監査項目の管理において重要です。パッケージマネージャーが増えると、監視しなければいけないログファイルの種類が増えます。今回紹介したauditdを利用すれば、各パッケージマネージャーで行われたソフトウェア更新を、一元的に監視することが可能です。

 

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

 

 

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

 

 

Last modified: 2024-04-07

Author