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デーモンの構成ファイルです。このファイルには、グローバル・ディレクティブ、モジュール・ディレクティブ、およびデーモンまたはサービスのルールが含まれています。デフォルトでは、rsyslogsyslogメッセージのみ処理し、アーカイブします。ただし、必要に応じて、rsyslogを構成して、カーネル、ブート、initrdstdoutおよび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つの部分があります。ファシリティ・キーワードとしては、authauthprivcrondaemonkernなどがあります。プライオリティ・キーワードとしては、debuginfonoticewarningなどがあります。したがって、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を使用するルールを作成するとします。次の手順では、このサンプル・ルールを実装する方法を示します。

  1. 次のような、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は、ファイル名に適切な接頭辞を付けてディスク上にファイルを作成します。

  2. /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")
  3. ファイルを保存して終了します。

  4. rsyslogサービスを再起動します。

    systemctl restart rsyslog

正しいログのローテーションとアーカイブを管理するには、/etc/rsyslog.confRULESセクションで定義した各ログ・ファイルを参照するよう/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)の各マニュアル・ページを参照してください。