ノート:
- このチュートリアルは、Oracle提供の無料ラボ環境で提供されています。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントの値の例を使用します。演習を完了するときは、これらの値をクラウド環境に固有の値に置き換えます。
監査対象のOracle Linuxの監査
イントロダクション
Auditdは、Oracle Linuxで実行される様々なアクティビティに関するログをバックグラウンドで生成するユーザー空間システム・デーモンです。
このチュートリアルでは、インストール、構成およびauditdの使用について説明します。
目的
この演習では、次のことを学習します。
- 監査パッケージのインストール
- 監査サービスの管理
- 監査ルールの作成
- 監査ログの検索
前提条件
- 次の構成で Oracle Linux 8がインストールされているシステム。
sudo
権限を持つroot以外のユーザー
監査パッケージのインストール
ノート:無料ラボ環境を使用する場合、接続およびその他の使用手順については、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
ここでは:
-w
:指定されたパスにウォッチを作成します。-p
:ウォッチをトリガーする権限[read、write、execute、attribute]を設定します。-k
:ルールによって生成された監査レコードを一意に識別するキー・フィルタを設定します。
ルールを表示します。
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を参照してください。