7 監査の構成および使用
監査では、分析して不正なアクティビティを識別できるカーネル・レベルでデータを収集します。監査では、システム・ロギングよりもはるかに詳細なデータが収集されます。監査証跡を検査して関心のあるイベントを見つけるプロセスは非常に困難です。したがって、このプロセスを自動化することを検討してください。
監査構成ファイル/etc/audit/auditd.conf
内の定義の一部は、次の内容になります:
-
データ保存ポリシー
-
監査ボリュームの最大サイズ
-
監査ボリュームの容量を超えた場合に実行するアクション
-
ローカルおよびリモートの監査証跡ボリュームの場所
デフォルトの監査証跡ボリュームは、/var/log/audit/audit.log
です。詳細は、auditd.conf(5)
マニュアル・ページを参照してください。
監査では、デフォルトで、システム・ログイン、アカウントに対する変更、sudoアクションなどの特定のイベントがキャプチャされます。詳細なシステム・コール・アクティビティ、または特定のファイルに対する変更を取得するように、監査を構成できます。カーネル監査デーモン(auditd
)は、イベント・タイプ、タイムスタンプ、関連付けられているユーザーID、システム・コールの成功または失敗などの、ユーザーが構成したイベントを記録します。
監査ルール・ファイル/etc/audit/audit.rules
のエントリにより、監査対象イベントが決定されます。各ルールは、auditctlコマンドに渡されるコマンドライン・オプションです。組織のセキュリティ・ポリシーに一致するようにこのファイルを構成します。
次に、/etc/audit/audit.rules
ファイルで設定できるルールの例を示します:
-
ファイルに対する
open
およびtruncate
システム・コールの終了の失敗をすべて記録し、その情報を/etc
ディレクトリ階層に格納します。-a exit,always -S open -S truncate -F /etc -F success=0
-
UID 10のユーザーによって開かれたすべてのファイルを記録します。
-a exit,always -S open -F uid=10
-
UIDが500以上の当初サインインしていたユーザーによって改訂されたか属性が変更されたファイルをすべて記録します。
-a exit,always -S open -F auid>=500 -F perm=wa
-
書込みまたはファイル属性変更アクセスのリクエストを記録します。レコードを
/etc/sudoers
ファイルに格納し、そのようなレコードに文字列sudoers-change
というタグを付けます。-w /etc/sudoers -p wa -k sudoers-change
-
書込みおよびファイル属性変更アクセスのリクエストを記録し、記録を
/etc
ディレクトリ階層に格納します。-w /etc/ -p wa
-
監査構成の変更後にリブートが必要です。
-e 2
ノート:
リブートするためのルールを、
/etc/audit/audit.rules
ファイルの最後に定義することをお薦めします。
監査ルールの例について、auditctl(8)
およびaudit.rules(7)
マニュアル・ページも参照してください。
厳格な監査要件を設定すると、大量の監査データが生成され、パフォーマンス・オーバーヘッドが大きくなります。一部のサイト・セキュリティ・ポリシーでは、監査ボリュームが容量を超えるためにイベントを記録できない場合は、システムをシャットダウンする必要があることを明文化しています。一般的に、オーバーフローを防ぎ、バックアップを促進するために、監査データを順番に別個のファイル・システムに置くことをお薦めします。
監査レコードにタグを付けると、それらのタグを参照することでausearch
コマンドで監査ボリュームを簡単に検索できるようになります。たとえば、文字列sudoers-change
とうタグが付いたレコードを調べるには、次のように入力します。
sudo ausearch -k sudoers-change
aureportコマンドは、監査データのサマリーを生成します。たとえば、次のコマンドは、前日の午前0時の1秒後から現在時刻までのすべてのサインイン・イベントを示すレポートを生成します。
sudo aureport -l -i -ts yesterday -te now
aureportを定期的に実行するcron
ジョブまたはsystemd
タイマーを設定して、対象のレポートを生成できます。Oracle Linuxでのcrontabユーティリティを使用したタスクのスケジュールおよびOracle Linuxでのsystemdの使用を参照してください。
詳細は、ausearch(8)
およびaureport(8)
のマニュアル・ページを参照してください。
Oracle Linuxでの監査ツールの使用に関する実践的なチュートリアルは、auditdによるOracle Linuxの監査を参照してください。
システム・ログ・ファイルの使用
ログ・ファイルには、システム、カーネル、サービスおよびアプリケーションについてのメッセージが含まれます。systemd
の一部であるjournald
ロギング・デーモンは、システム・メッセージをメモリー内の非永続ジャーナル・ファイルに記録します。journald
デーモンは、メッセージをシステム・ロギング・デーモンrsyslog
に転送します。
/run
内のファイルは揮発性です。そのため、ディレクトリ/var/log/journal
を作成しない場合は、リブート後にログ・データが失われます。journalctlコマンドを使用して、ジャーナル・ログの問合せを実行できます。
詳細は、journalctl(1)
およびsystemd-journald.service(8)
の各マニュアル・ページを参照してください。
システム・ロギング・ツールを紹介する実践的なチュートリアルは、Oracle Linuxでのシステム・ロギングを参照してください。
ロギング構成について(/etc/rsyslog.conf)
/etc/rsyslog.conf
ファイルは、rsyslogd
デーモンの構成ファイルです。このファイルには、グローバル・ディレクティブ、モジュール・ディレクティブ、およびデーモンまたはサービスのルールが含まれています。デフォルトでは、rsyslog
はsyslog
メッセージのみ処理し、アーカイブします。ただし、必要に応じて、rsyslog
を構成して、カーネル、ブート、initrd
、stdout
およびstderr
のメッセージなど、journald
から転送されるその他のメッセージをアーカイブできます。
rsyslog
に関する最新情報を入手するには、https://www.rsyslog.com/doc/を参照してください。または、rsyslog-doc
パッケージをローカルにインストールするという方法もあります。
sudo dnf install -y rsyslog-doc
ドキュメントは、/usr/share/doc/rsyslog/html
にインストールされます。
重要:
/etc/rsyslog.conf
内でパラメータを構成するための書式が変更されました。以前の構成との下位互換性を確保するために次の書式がサポートされています。
- システム・ロギングの導入当初から使用されてきた、基本書式または
sysklogd
書式。 - レガシー書式。この場合、ディレクティブはファイル内のそれ固有の行で定義され、各ディレクティブの前にドル記号(
$
)が付きます($MainMsgQueueSize
など)。 - 拡張書式。この場合は、
rsyslog
を構成するためにRainerScript
スクリプト言語が使用されます。
これらの書式の詳細は、https://www.rsyslog.com/doc/において、関連する項を参照してください。
/etc/rsyslog.conf
ファイルは、次の主要セクションに分かれています:
- モジュール
-
モジュールには、メッセージを処理するための構成パラメータが含まれています。処理または変換されたメッセージは、その後、必要に応じて様々なターゲットに送信できます。モジュールは、出力、入力、パーサー、ライブラリなどの様々なカテゴリに分類されます。これらのモジュール・クラスをすべて示すリストについては、https://www.rsyslog.com/doc/において、該当する項を参照してください。モジュールのリストについては、
rsyslog.conf(5)
マニュアル・ページを参照してください。モジュールにより、様々な
rsyslog
機能を動作可能にすることができます(これらのモジュールがロードされている場合)。モジュールは、次のようにmodule load
ディレクティブを使用してロードします。module(load="module-name")
ノート:
このディレクティブは、モジュールのロードの場合は拡張書式が使用されます。これは、
$ModLoad module-name
というレガシー書式のかわりとなるものです。 - グローバル・ディレクティブ
-
グローバル・ディレクティブは、
rsyslogd
デーモンに適用する構成オプションを指定します。ディレクティブにより、補助ファイルの場所を指定できます。ディレクティブは、次の例で示すように、すべてのメッセージに使用するタイムスタンプ書式など、グローバル設定を適用するmodule(load" ")
文にもできます。module(load="builtin:omfile" Template=RSYSLOG_TraditionalFileFormat")
このモジュールはすべてのメッセージに適用されるため、このディレクティブはグローバル・ディレクティブセクションで指定します。
- ルール
-
ルールまたはルール・セットにより、ログに記録されたメッセージの管理方法が決まります。
ルールは、セレクタ・フィールドとアクション・フィールドという2つのフィールドからなります。これら2つのフィールドは、1つ以上のスペースまたはタブで区切ります。
-
セレクタ・フィールドには、ピリオドで区切られた、ファシリティ・キーワードとプライオリティ・キーワードという2つの部分があります。ファシリティ・キーワードとしては、
auth
、authpriv
、cron
、daemon
、kern
などがあります。プライオリティ・キーワードとしては、debug
、info
、notice
、warning
などがあります。したがって、kern.*
とすると、すべてのプライオリティ・レベルのカーネル・メッセージが選択され、kern.emerg
とすると、緊急カーネル・メッセージのみが選択されます。ファシリティ・セレクタとプライオリティ・セレクタを両方とも示すリストについては、
rsyslog.conf(5)
マニュアル・ページを参照してください。 -
アクション・フィールドでは、通常は、メッセージの内容を書き込むログ・ファイルを示します。たとえば、次のルールは、
cron
メッセージを/var/log/cron
に記録することを示しています:cron.* /var/log/cron
-
rsyslog
構成は、次の2つの方法でカスタマイズできます。
/etc/rsyslog.conf
ファイル自体を直接変更します。- 構成ファイルを作成し、それを
/etc/rsyslog.d
に格納します。このオプションを選択すると、システム・パッケージが更新された場合にカスタム構成が上書きされないようにすることができます。
特定のセレクタについてログを変更するなど、変更内容によっては、/etc/rsyslog.conf
ファイルに簡単に実装できます。たとえば、cron
メッセージのログをcron_new
に変更するには、次のように入力します。
cron.* /var/log/cron_new
その後、rsyslog
サービスを再起動すると、変更内容が適用されます。
その他の変更には、さらにパラメータ定義および手順が必要になる場合があります。
メッセージのログ記録先となる別のサーバーにメッセージを転送するためにTCPを使用するルールを作成するとします。次の手順では、このサンプル・ルールを実装する方法を示します。
-
次のような、TCP転送のパラメータを設定する別のファイル(例:
/etc/rsyslog.d/forwarding
)を作成します:*.* action(type="omfwd" queue.filename="fwdRule1" queue.maxdiskspace="1g" queue.saveOnShutdown="on" queue.type="linkedlist" action.resumeRetryCount="-1" target="remote-host.com" port="30514" protocol="tcp" )
- queue.filename
-
バックアップ・ファイルに付加される接頭辞。接頭辞付きバックアップ・ファイルは、
workDir
グローバル・ディレクティブで指定された場所に作成されます(例:global(workDirectory="/var/log")
)。 - queue.maxdiskspace
-
ログ・ファイル用の領域制限。
- queue.saveOnShutdown
-
rsyslog
が停止した場合に、データをメモリーに保存します。 - queue.type
-
LinkedListインメモリー・キューを有効にします。
- action.resumeRetryCount
-
-1
に設定すると、そのホストが使用不可の場合に無期限に再試行されます。 - target
-
ホスト名またはIPアドレスを指定できます。
このサンプル構成に基づいて、
rsyslog
は、メッセージをリモート・サーバーremote-host.com
に転送します。また、rsyslog
サービスは、このリモート・サーバーが使用不可の場合にはメッセージをメモリー内に保持します。rsyslog
が停止するか、割り当てられたメモリーを使い果たした場合、rsyslog
は、ファイル名に適切な接頭辞を付けてディスク上にファイルを作成します。 -
/etc/rsyslog.conf
を開き、次のことを確認します:-
TCP syslog受信用のモジュールがロードされることを確認します。次の行からコメント記号が削除されていることを確認します。
module(load="imtcp") input(type="imtcp" port="514")
-
rsyslog
構成に/etc/rsyslog.d
ファイルを含めるグローバル・ディレクティブが有効になっていることを確認します。次の行がコメントアウトされていないことを確認します。include(file="/etc/rsyslog.d/*.conf" mode="optional")
-
-
ファイルを保存して終了します。
-
rsyslog
サービスを再起動します。systemctl restart rsyslog
正しいログのローテーションとアーカイブを管理するには、/etc/rsyslog.conf
のRULES
セクションで定義した各ログ・ファイルを参照するよう/etc/logrotate.d/syslog
を編集します。/etc/logrotate.conf
を編集して、ログのローテーション頻度およびアーカイブするログの過去のコピー数を構成できます。
詳細は、logrotate(8)
、logwatch(8)
、rsyslogd(8)
およびrsyslog.conf(5)
のマニュアル・ページを参照してください。
Logwatchの構成
Logwatchは、システム・ログ内の対象分野に関してレポートするように構成できる監視システムです。logwatch
パッケージをインストールすると、/etc/cron.daily/0logwatch
スクリプトが毎日実行され、電子メール・レポートがroot
に送信されます。/etc/logwatch/conf/logwatch.conf
のローカル構成オプションを設定して、次を含むメイン構成ファイル/usr/share/logwatch/default.conf/logwatch.conf
をオーバーライドできます:
-
監視対象のログ・ファイル(他のホスト用に格納されたログ・ファイルを含む)。
-
監視対象のサービス、または監視対象から除外するサービスの名前。
-
レポートする詳細のレベル。
-
電子メール・レポートの送信先のユーザー。
ベスト・プラクティスとしては、ログ・サーバーでLogwatchを構成して不審なメッセージのログを監視し、ログ・クライアントではLogwatchを無効にします。ただし、Logwatchを使用する場合は、次のエントリを各システムの/etc/rsyslog.conf
のGLOBAL DIRECTIVESセクションに追加して、高精度タイムスタンプを無効にします:
module(load="builtin:omfile" Template=RSYSLOG_TraditionalFileFormat")
logwatchはコマンドラインから直接実行することもできます。
詳細は、logwatch(8)
マニュアル・ページを参照してください。
プロセス・アカウンティングの使用
psacct
パッケージは、プロセス・アクティビティの監視に使用できる次のユーティリティとともに、プロセス・アカウンティング・サービスを実装します。
- ac
-
wtmp
ファイルに記録されているとおりに、ユーザーの接続時間を時間単位で表示します(デフォルトでは、/var/log/wtmp
)。 - accton
-
指定したファイルに対してプロセス・アカウンティングをオンにします。ファイル名引数を指定しないと、プロセス・アカウンティングは停止されます。デフォルトのシステム・アカウンティング・ファイルは
/var/account/pacct
です。 - lastcomm
-
システム・アカウンティング・ファイルに記録されているとおりに、前に実行されたコマンドの情報を表示します。
- sa
-
システム・アカウンティング・ファイルに記録されているとおりに、前に実行されたコマンドの情報を要約します。
ノート:
ロギング・アクティビティでは、ファイル・システムにシステム・アカウンティング・ファイルおよびwtmp
ファイルを格納するための十分な領域があることを確認してください。ファイルのサイズを監視し、必要に応じて切り捨てます。
詳細は、ac(1)
、 accton(8)
、lastcomm(1)
およびsa(8)
の各マニュアル・ページを参照してください。