Audit フレームワーク

提供: ArchWiki
2018年6月2日 (土) 23:15時点におけるKusakata (トーク | 投稿記録)による版 (同期)
ナビゲーションに移動 検索に移動

Linux の audit フレームワークは CAPP (Controlled Access Protection Profile) に準拠した監査システムであり、システム上のセキュリティに関係した(または無関係な)イベントを収集できます。audit を使うことにより、システム上で行われた動作を追跡できるようになります。

Linux audit はシステム上で何が起きているかを詳細に分析できる手段であり、システムをよりセキュアにするために役に立ちます。しかしそれ自体がなにかセキュリティを強化するものではありません。つまり、それ自体が悪意のあるコードや様々な悪用からシステムを守ってくれるものではありません。そうではなく、これらの問題を追跡し、セキュリティ対策を施すための情報を audit は提供します。

audit フレームワークはカーネルが報告するイベントを受信し、ログファイルに書き込みます。

ノート:
  • Linux 3.12 の時点では、audit フレームワークは名前空間の実装と互換性がありません。名前空間を使っている場合は audit フレームワークを使わないでください。
  • audit フレームワークはシステムのパフォーマンスに影響を与える可能性があります。

インストール

CONFIG_AUDIT を有効にしたカスタムカーネルをインストールします。もしくは linux-hardened パッケージをインストールしてカーネルパラメータaudit=1 を追加してください。

audit をインストールし、 auditd.service起動有効化します。

ノート: linux-hardened パッケージはデフォルトでカーネルパラメータとして audit=0 を設定するため、/usr/lib/systemd/system/auditd.serviceConditionKernelCommandLine=!audit=0 設定と衝突します。上書きするために auditd.service 設定を以下のように編集してください:
# systemctl edit auditd.service

編集内容:

/etc/systemd/system/auditd.service.d/override.conf
[Unit]
ConditionKernelCommandLine=
ConditionKernelCommandLine=audit=1

audit フレームワークは auditd デーモンから構成されます。アプリケーションやシステムの動作によりカーネルの audit インターフェイスが発動し、audit インターフェイスが生成した audit メッセージを auditd が書き込みます。

このデーモンはいくつかのコマンドとファイルにより制御されます:

  • auditctl : その場でデーモンの挙動をコントロールします。ルールを追加するなど
  • /etc/audit/audit.rules : ルールや auditd のパラメータを記述します
  • aureport : システムの動作レポートを生成します
  • ausearch : イベントを検索します
  • auditspd : イベント通知をディスク上のログに書き込む代わりに他のアプリケーションに中継するデーモンです
  • autrace : プロセスをトレースするためのコマンド。straceに似ています
  • /etc/audit/auditd.conf : ログに関する設定ファイルです

ルールの追加

ルールを追加する前に注意しなければならないのは、audit フレームワークは非常に饒舌で、ルールを実際に運用する前に注意深くテストする必要があることです。実際、たった1つのルールにより2,3分でログを溢れてしまうこともあり得ます。

ファイルとディレクトリへのアクセスを監査する

audit フレームワークの一番簡単な使い方は、特定のファイルへのアクセスをログに記録することです。それには -w オプションを使います。一番簡単なルールの例として passwd ファイルへのアクセスを追跡する例:

# auditctl -w /etc/passwd -p rwxa

フォルダへのアクセスを追跡するには:

# auditctl -w /etc/security/

最初のルールは /etc/passwd への読み込み r、書き込み w、実行 x、属性変更 a を追跡します。2番目のルールは /etc/security/ への全てのアクセスを追跡します。

有効なルールのリストを表示するには:

# auditctl -l

全てのルールを削除するには:

# auditctl -D

ルールが正しく動作することを確認したら、それを /etc/audit/audit.rules に書きます:

-w /etc/audit/audit.rules -p rwxa
-w /etc/security/

システムコールを監査する

-a オプションをつけると、システムコール呼び出しを監査できます。

セキュリティに関連したルールの例として、chmod システムコール を追跡し、ファイル所有権の変更を検出する例:

auditctl -a entry,always -S chmod

全てのシステムコールのリスト: syscalls(2)

たくさんのルールと方法が考えられます。auditctl(8)audit.rules(7) を参照してください。

ログを検索する

audit フレームワークにはシステム上で発生したイベントを調べるためのツールがいくつか含まれています。

PID を指定する

特定の PID に関係するイベントを検索するには ausearch を使います:

# ausearch -p 1

このコマンドを実行すると、ルールに応じて記録されたイベントの中から PID 1 (systemd) に関係するものすべてを表示します。

キーの使い方

イベントを管理するためにキーを使うことが推奨されます。

イベントの検索を容易にするために、ルールに -k オプションをつけます:

# auditctl -w /etc/passwd -p rwxa -k KEY_pwd

するとキー KEY_pwd を使ってイベントを検索できるようになります。次のコマンドにより /etc/passwd に関係するイベントだけを表示できます:

# ausearch -k KEY_pwd

異常を探す

aureport を使うと異常なイベントの発生を素早く報告させることができます。異常なイベントとは、ネットワークインターフェイスがプロミスキャスモードに設定された、プロセスまたはスレッドが ENOMEM エラーで異常終了した、などです。

aureport の一番簡単な使い方は :

# aureport -n

aureport を使ってカスタムレポートを生成することもできます。aureport(8) を参照してください。

どのファイル・システムコールを監査すべきか?

ルールを追加するとログの量も増えます。その情報量が処理できる範囲内でなければならないことを忘れないで下さい。基本的に、セキュリティに関係したイベント・ファイルは監視しなければなりません。ids、ips、anti-rootkits などです。逆に、全ての write システムコールを追跡することはまったく無意味です。ちょっとコンパイルしただけでログが溢れてしまうでしょう。

粒度を非常に小さくして複雑なルールセットを構成することもできます。もしそうしたい場合は auditctl(8) の man ページは読む価値があります。

他のホストからのログを収集する

audit フレームワークはプラグインシステムを備えており、それによりローカルのログファイルをリモートの auditd に送ることができます。

ログファイルを送信する

ログファイルをリモートホストに送るには、audisp-remote プラグインが必要です。これは audit パッケージにより自動的にインストールされます。このパッケージを有効にするには:

/etc/audisp/plugins.d/au-remote.conf
active = yes
direction = out
path = /usr/bin/audisp-remote
type = always
format = string

そしてログの送り先になるリモートホストを設定します:

/etc/audisp/audisp-remote.conf
remote_server = domain.name.or.ip
port = 60
##local_port = optional
transport = tcp

ログファイルを受け取る

リモートの audispds からのメッセージを受信できるようにするには、tcp オプションをセットするだけです:

/etc/audit/auditd.conf
tcp_listen_port = 60
tcp_listen_queue = 5
tcp_max_per_addr = 1
##tcp_client_ports = 1024-65535 #任意
tcp_client_max_idle = 0

これで設定した全部のホストのログが受信する auditd のログファイルに書き込まれるようになります。