ノート:

監査対象のOracle Linuxの監査

イントロダクション

Auditdは、Oracle Linuxで実行される様々なアクティビティに関するログをバックグラウンドで生成するユーザー空間システム・デーモンです。

このチュートリアルでは、インストール、構成およびauditdの使用について説明します。

目的

この演習では、次のことを学習します。

前提条件

監査パッケージのインストール

ノート:無料ラボ環境を使用する場合、接続およびその他の使用手順については、Oracle Linux Labの基本を参照してください。

Oracle Linuxはデフォルトで監査パッケージをインストールします。

まだ接続していない場合は、端末を開き、ssh経由でol8-serverシステムに接続します。

ssh oracle@<ip_address_of_ol8-server>

システムでauditパッケージがプリインストールされているかどうかを確認します。

sudo dnf list installed "audit"

システム上にない場合は、インストールします。

sudo dnf install -y audit

auditdデーモンのデフォルトの構成ファイルは、/etc/audit/auditd.confにあります。

監査サービスの管理

監査パッケージをインストールしたら、auditdサービスを起動します。最初に、現在のステータスを確認します。

sudo systemctl status auditd

出力例:

[oracle@ol8-server ~]$ sudo systemctl status auditd
* auditd.service - Security Auditing Service
   Loaded: loaded (/usr/lib/systemd/system/auditd.service; enabled; vendor pres>
   Active: active (running) since Fri 2022-04-01 23:59:52 GMT; 2min 38s ago
     Docs: man:auditd(8)
           https://github.com/linux-audit/audit-documentation
 Main PID: 1385 (auditd)
    Tasks: 2 (limit: 100140)
   Memory: 2.5M
   CGroup: /system.slice/auditd.service
           `-1385 /sbin/auditd

Apr 01 23:59:52 localhost.localdomain augenrules[1388]: backlog_wait_time 60000
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: enabled 1
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: failure 1
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: pid 1385
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: rate_limit 0
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: backlog_limit 8192
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: lost 0
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: backlog 0
Apr 01 23:59:52 localhost.localdomain augenrules[1388]: backlog_wait_time 60000
Apr 01 23:59:52 localhost.localdomain systemd[1]: Started Security Auditing Ser>
lines 1-21/21 (END)

この出力は、サービスが(running)およびenabledであることを示しています。

enabledステータスは、起動時にサービスを開始するように構成したことを示します。そうでない場合は、監査情報を収集し、ログに書き込むようにrootユーザーとしてサービスを起動します。

サービスを開始します。

sudo service auditd start

ブート時に起動するようにauditdを構成します。

sudo systemctl enable auditd

ノート: auditdデーモンと適切に対話するのみの方法は、serviceコマンドを使用します。

serviceコマンドは、auid値を記録します。systemctlコマンドは、enableおよびstatusアクションでのみ使用します。

監査を一時的に有効化および無効化

監査制御ユーティリティauditctlは、カーネル監査コンポーネントと対話してルールを管理し、イベント生成プロセスの多くの設定およびパラメータを制御します。

カーネル監査サブシステムのステータスを確認します。

sudo auditctl -s

出力例:

[oracle@ol8-server ~]$ sudo auditctl -s
enabled 1
failure 1
pid 1399
rate_limit 0
backlog_limit 8192
lost 0
backlog 0
backlog_wait_time 60000
loginuid_immutable 0 unlocked

auditdを一時的に無効にします。

sudo auditctl -e 0

auditdを再度有効にします。

sudo auditctl -e 1

ノート: pidは、auditdサービス・プロセスIDを示しています。pid値の0は、サービスが実行されていないことを示します。

auditctl -e enableフラグは、監査構成をロックする2の値も受け入れます。

この方法で監査構成がロックされている場合は、ロックを解除するにはリブートが必要です。詳細は、man auditctlを参照してください。

監査ルールおよびログの検索

デフォルトでは、Oracle Linuxは監査ログを/var/log/audit/audit.logに格納します。

監査ルールは/ect/audit/audit.rulesにあります。Oracle Linuxは、/etc/audit/rules.d/audit.rulesファイルからデフォルトのルールセットを生成します。

sudo cat /etc/audit/audit.rules
sudo cat /etc/audit/rules.d/audit.rules

出力例:

## First rule - delete all
-D

## Increase the buffers to survive stress events.
## Make this bigger for busy systems
-b 8192

## This determine how long to wait in burst of events
--backlog_wait_time 60000

## Set failure mode to syslog
-f 1

監査制御ユーティリティを使用したルール

auditctlプログラムを使用して、動作の制御、ステータスの取得、ルールの追加または削除を行います。

/etc/ssh/sshd_configファイルの読取りまたは変更の試行を記録する監査ルールを追加します。

sudo auditctl -w /etc/ssh/sshd_config -p rwxa -k sshd_config

ここでは:

ルールを表示します。

sudo auditctl -l

新しいルールがリストの最下部に追加されますが、上部に追加することもできます。

新しいルールが/etc/audit/audit.rulesファイルに追加されたかどうかを確認します。

sudo cat /etc/audit/audit.rules

出力例:

[oracle@ol8-server ~]$ sudo cat /etc/audit/audit.rules
## This file is automatically generated from /etc/audit/rules.d
-D
-b 8192
-f 1
--backlog_wait_time 60000

ルールはファイルに表示されません。その理由は?

auditctlによって作成されたルールは、audit.rulesファイルに追加されません。したがって、これらの変更は一時的なものであり、システムのリブートには耐えられません。

/etc/audit/rules.d/my.rulesのカスタム・ルールセット・ファイルに追加して、ルールを永続的にします。追加したルールの形式は、auditctlを使用せずにauditctlコマンドの構文に一致します。パフォーマンスを最適化するには、ルールを1行ごとに記述し、結合する必要があります。

sudo tee /etc/audit/rules.d/my.rules > /dev/null <<'EOF'
-w /etc/ssh/sshd_config -p rwxa -k sshd_config
EOF

ルールを表示します。

sudo cat /etc/audit/rules.d/my.rules

ルールをテストします。

cat /etc/ssh/sshd_config

このコマンドはcat: /etc/ssh/sshd_config: Permission deniedを戻し、audit.logに次のイベントを生成します。

sudo cat /var/log/audit/audit.log | grep sshd_config

出力例:

type=CONFIG_CHANGE msg=audit(1648918923.746:266810): auid=1001 ses=15792 
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 op=add_rule key="sshd_config" list=4 res=1AUID="oracle"
type=SYSCALL msg=audit(1648923583.793:268315): arch=c000003e syscall=257 success=no exit=-13 a0=ffffff9c a1=7ffd08b6c575 > a2=0 a3=0 items=1 ppid=3406680 pid=3428336 auid=1001 uid=1001 gid=1001 euid=1001 suid=1001 fsuid=1001 egid=1001 
sgid=1001 fsgid=1001 tty=pts0 ses=15792 comm="cat" exe="/usr/bin/cat" 
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="sshd_config"ARCH=x86_64 SYSCALL=openat AUID="oracle" 
UID="oracle" GID="oracle" EUID="oracle" SUID="oracle" FSUID="oracle" EGID="oracle" SGID="oracle" FSGID="oracle"
type=PATH msg=audit(1648923583.793:268315): item=0 name="/etc/ssh/sshd_config" inode=67688941 dev=fc:00 mode=0100600 
ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 
cap_frootid=0OUID="root" OGID="root"

監査ログの検索

ログを検索する別の方法は、ausearchコマンドを使用することです。

このコマンドを使用して同じ情報を取得します。

sudo ausearch --key sshd_config

出力例:

Email option is specified but /usr/lib/sendmail doesn't seem executable.
----
time->Sat Apr  2 17:02:03 2022
type=CONFIG_CHANGE msg=audit(1648918923.746:266810): auid=1001 ses=15792 
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 op=add_rule key="sshd_config" list=4 res=1
----
time->Sat Apr  2 18:19:43 2022
type=PROCTITLE msg=audit(1648923583.793:268315): proctitle=636174002F6574632F7373682F737368645F636F6E666967
type=PATH msg=audit(1648923583.793:268315): item=0 name="/etc/ssh/sshd_config" inode=67688941 dev=fc:00 mode=0100600 
ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 
cap_frootid=0
type=CWD msg=audit(1648923583.793:268315): cwd="/home/oracle"
type=SYSCALL msg=audit(1648923583.793:268315): arch=c000003e syscall=257 success=no exit=-13 a0=ffffff9c a1=7ffd08b6c575 > a2=0 a3=0 items=1 ppid=3406680 pid=3428336 auid=1001 uid=1001 gid=1001 euid=1001 suid=1001 fsuid=1001 egid=1001 
sgid=1001 fsgid=1001 tty=pts0 ses=15792 comm="cat" exe="/usr/bin/cat" 
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="sshd_config"

ausearchからの出力は、出力形式に基づいて使いやすく読み取られます。-iまたは --interpretオプションを追加して、ログを読みやすくすることができます。このオプションは、uidをアカウント名に変換するなど、数値エンティティをテキストに解釈します。

sudo ausearch -i -k sshd_config

出力例:

Email option is specified but /usr/lib/sendmail doesn't seem executable.
----
type=CONFIG_CHANGE msg=audit(04/02/2022 17:02:03.746:266810) : auid=oracle ses=15792 
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 op=add_rule key=sshd_config list=exit res=yes 
----
type=PROCTITLE msg=audit(04/02/2022 18:19:43.793:268315) : proctitle=cat /etc/ssh/sshd_config 
type=PATH msg=audit(04/02/2022 18:19:43.793:268315) : item=0 name=/etc/ssh/sshd_config inode=67688941 dev=fc:00 
mode=file,600 ouid=root ogid=root rdev=00:00 obj=system_u:object_r:etc_t:s0 nametype=NORMAL cap_fp=none cap_fi=none 
cap_fe=0 cap_fver=0 cap_frootid=0 
type=CWD msg=audit(04/02/2022 18:19:43.793:268315) : cwd=/home/oracle 
type=SYSCALL msg=audit(04/02/2022 18:19:43.793:268315) : arch=x86_64 syscall=openat success=no exit=EACCES(Permission 
denied) a0=0xffffff9c a1=0x7ffd08b6c575 a2=O_RDONLY a3=0x0 items=1 ppid=3406680 pid=3428336 auid=oracle uid=oracle 
gid=oracle euid=oracle suid=oracle fsuid=oracle egid=oracle sgid=oracle fsgid=oracle tty=pts0 ses=15792 comm=cat exe=/
usr/bin/cat subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=sshd_config 

audit.logの書式設定オプションおよび検索方法は、man ausearchを参照してください。

事前構成済ルールのロード

Oracle Linuxには、/etc/audit/rules.dにあるすべてのコンポーネント監査ルール・ファイルをマージするスクリプトが用意されています。マージ後、既存の/etc/audit/audit.rulesが新しいファイルに置き換えられます。このスクリプトは、auditdサービス・ファイルに組み込まれ、サービスの起動時に実行されます。

ロードする既存のルール変更があるかどうかを確認します。

sudo augenrules --check

出力状態Rules have changed and should be updated。この変更は、以前に/etc/audit/rules.dにあるmy.rulesファイルが作成されているためです。

以前に追加したsshd_configカスタム・ルールを削除して、新しいルールの追加を簡単に追跡します。

sudo auditctl -D -k sshd_config

my.rulesカスタム・ルール・ファイルをマージします。

sudo augenrules --load

出力例:

[oracle@ol8-server ~]$ sudo augenrules --load
No rules
enabled 1
failure 1
pid 1395
rate_limit 0
backlog_limit 8192
lost 0
backlog 0
backlog_wait_time 60000
enabled 1
failure 1
pid 1395
rate_limit 0
backlog_limit 8192
lost 0
backlog 0
backlog_wait_time 60000
enabled 1
failure 1
pid 1395
rate_limit 0
backlog_limit 8192
lost 0
backlog 0
backlog_wait_time 60000

アクティブな監査ルールを確認します。

sudo auditctl -l

出力例:

[oracle@ol-lab-2022-03-23-182415-0 ~]$ sudo auditctl -l
-w /etc/ssh/sshd_config -p rwxa -k sshd_config

新しいファイルnew.rulesにルールを追加します。

ノート: .rulesで終わるファイルのみがaugenrulesによって読み取られ、ロードされます。

sudo tee /etc/audit/rules.d/new.rules > /dev/null <<'EOF'
-w /etc/passwd -p wa -k passwd_changes
-w /etc/selinux/ -p wa -k selinux_changes
EOF

新しいルールをロードします。

sudo augenrules --load

アクティブなルールを再チェックします。

sudo auditctl -l

新しいルールがロードされ、audit.rulesファイルにマージされます。

sudo cat /etc/audit/audit.rules

システムは、マージの一部としてバックアップ・ファイル/etc/audit/audit.rules.prevを作成しました。

sudo ls -l /etc/audit

Oracle Linux監査システムによって提供される情報は、侵入の検出に役立ちます。

表示されているユーティリティについては、manページを確認してください。その後、学習した内容を使用して、特定のロギング・イベントについてシステムにカスタム監査ルールを追加します。

詳細情報

他の関連リソースを参照してください。

その他の学習リソース

他のラボをdocs.oracle.com/learnで探すか、Oracle Learning YouTubeチャネルでより無料の学習コンテンツにアクセスします。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。

製品のドキュメントは、Oracle Help Centerを参照してください。