はじめに

Snort は、ネットワークトラフィックをリアルタイムで監視し、定義済みのルールセットと照合する強力なオープンソースの侵入検知システム(IDS)です。不審なアクティビティがルールに一致すると、Snort はアラートを生成します。これらのアラートを読み解き、解釈する方法を理解することは、サイバーセキュリティの専門家にとって不可欠なスキルです。

アラートの生成は、防御ワークフローの始まりに過ぎません。アナリストは、そのイベントが意味のあるものか、ネットワーク上で何が起きたのか、そして追跡調査が必要かどうかを判断しなければなりません。そのため、ルールの作成と同じくらい、アラートの解釈が重要になります。強力な検知スタックがあっても、人間がその出力を正確に読み取り、トリアージできなければ意味がありません。

この実験では、Snort のアラートを扱う方法を学びます。カスタム設定で Snort を起動し、特定の検知ルールをトリガーするネットワークトラフィックを生成した後、生成されたログファイルを分析します。Snort はさまざまな形式でログを出力できますが、ここではイベントの概要を 1 行で素早く確認できる fast ログと、詳細なパケットヘッダー情報を含む full ログに焦点を当てます。

複数のルールをトリガーする

このステップでは、Snort 侵入検知システムを起動し、あらかじめ設定されたカスタムルールをトリガーするためのネットワークトラフィックを生成します。

既知の正常なテストトラフィックを作成することは、検知エンジニアリングにおける標準的な習慣です。どのパケットがどのルールをトリガーすべきかを正確に把握していれば、監視パイプラインがエンドツーエンドで機能していることを検証するための明確な基準が得られます。

この環境には、2 つのシンプルな Snort ルールが設定されています。1 つは ICMP(Ping)トラフィックを検知するもの、もう 1 つはポート 80 での HTTP(Web)トラフィックを検知するものです。また、Snort に対してアラートを「fast」ログと「full」ログという 2 つの異なる形式で保存するように指示するカスタム設定ファイル /etc/snort/custom.conf も作成済みです。

まず、カスタム設定ファイルを使用して、Snort をデーモン(バックグラウンド)モードで起動します。-D フラグは Snort をバックグラウンドで実行するように指示し、-c は設定ファイルを指定し、-l はログディレクトリを指定し、-i eth0 はデフォルトのネットワークインターフェースでリッスンするように Snort に指示します。

sudo snort -c /etc/snort/custom.conf -l /var/log/snort -i eth0 -D

Snort が正常に初期化され、デーモン化されたことを示すメッセージが表示されるはずです。

次に、ルールをトリガーするためにネットワークトラフィックを生成します。パブリック DNS サーバー(8.8.8.8)に対して 3 つの ICMP ping パケットを送信し、ICMP ルールをトリガーします。

ping -c 3 8.8.8.8

続いて、curl コマンドを使用して Web ページを取得し、HTTP トラフィックを生成します。これにより HTTP ルールがトリガーされます。> /dev/null を使用して、HTML 出力がターミナルを乱さないようにします。

curl -s http://example.com > /dev/null

最後に、Snort がパケットを処理してログファイルに書き込むまで少し待ちます。Snort のログディレクトリの内容をリスト表示して、ログファイルが作成されたことを確認できます。

sleep 2
ls -l /var/log/snort

出力に fast_alert.log と full_alert.log が表示され、Snort がトラフィックを正常に検知してアラートを生成したことが確認できるはずです。

total 8
-rw-r--r-- 1 root root  345 Sep 15 10:00 fast_alert.log
-rw-r--r-- 1 root root 1250 Sep 15 10:00 full_alert.log

Fast ログの分析

このステップでは、fast_alert.log ファイルを調べます。「fast」アラート形式は、読みやすく簡潔になるように設計されています。アラートに関する最も重要な情報を 1 行で記録するため、迅速な確認や自動化スクリプトによる解析に最適です。

トリアージは通常、広範囲から始まるため、多くのアナリストが最初に接するのがこの形式です。より詳細なパケット情報が必要かどうかを判断する前に、何が発火したのか、いつ発火したのか、どのエンドポイントが関与しているのかを知る必要があります。

cat コマンドを使用して、fast ログファイルの内容を表示します。

cat /var/log/snort/fast_alert.log

出力は以下のようになります。

09/15-10:00:01.123456  [**] [1:1000001:1] ICMP Ping Detected [**] {ICMP} 192.168.1.10 -> 8.8.8.8
09/15-10:00:01.123456  [**] [1:1000001:1] ICMP Ping Detected [**] {ICMP} 8.8.8.8 -> 192.168.1.10
09/15-10:00:05.654321  [**] [1:1000002:1] HTTP Traffic Detected [**] {TCP} 192.168.1.10:45678 -> 93.184.216.34:80

fast アラートの各要素を分解してみましょう。

  • タイムスタンプ: 09/15-10:00:01.123456 は、パケットがキャプチャされた正確な日時を示します。
  • ジェネレーター、SID、リビジョン: [1:1000001:1] は、ジェネレーターID(1 は標準の Snort ルールであることを意味します)、ルールを一意に識別する Snort ID(SID: 1000001)、およびルールのリビジョン番号(1)を表します。
  • メッセージ: ICMP Ping Detected は、ルール内で定義された人間が読める形式のメッセージです。
  • プロトコル: {ICMP} または {TCP} は、使用されたネットワークプロトコルを示します。
  • 送信元と宛先: 192.168.1.10:45678 -> 93.184.216.34:80 は、送信元 IP とポート、トラフィックの方向を示す矢印、および宛先 IP とポートを示します。

このログを読むことで、セキュリティアナリストは誰が攻撃しているのか(送信元 IP)、ターゲットは何なのか(宛先 IP とポート)、どのような種類の攻撃が疑われるのか(メッセージ)を迅速に判断できます。

フルパケットダンプの調査

fast ログは概要を把握するには優れていますが、徹底的な調査に必要な詳細な技術情報が不足しています。このステップでは、full_alert.log ファイルを調べます。

full ログは、「どのアラートが発火したか」だけでなく、「トリガーとなったパケットは実際どのようなものだったか」という別の問いをサポートします。この深いコンテキストは、アナリストがアラートを検証し、プロトコルの動作を理解し、誤検知や回避の可能性を調査するのに役立ちます。

「full」アラート形式には、完全なパケットヘッダー情報が含まれています。これにより、アナリストは Time to Live (TTL)、Type of Service (TOS)、パケット長、TCP フラグなどの詳細を検査できます。これらは、攻撃の性質を理解したり、誤検知を特定したりする上で非常に重要です。

full ログにはアラートごとに複数行が含まれるため、非常に長くなる可能性があります。head コマンドを使用してファイルの最初の 30 行を表示し、最初のアラートの詳細を確認します。

head -n 30 /var/log/snort/full_alert.log

出力は以下のようになります。

[**] [1:1000001:1] ICMP Ping Detected [**]
09/15-10:00:01.123456 192.168.1.10 -> 8.8.8.8
ICMP TTL:64 TOS:0x0 ID:12345 IpLen:20 DgmLen:84 DF
Type:8  Code:0  ID:15  Seq:1  ECHO
...
[**] [1:1000002:1] HTTP Traffic Detected [**]
09/15-10:00:05.654321 192.168.1.10:45678 -> 93.184.216.34:80
TCP TTL:64 TOS:0x0 ID:54321 IpLen:20 DgmLen:60 DF
******S* Seq: 0x1A2B3C4D  Ack: 0x0  Win: 0xFAF0  TcpLen: 40

full ログで提供される追加の詳細に注目してください。

  • IP ヘッダー情報: TTL:64 (Time to Live)、TOS:0x0 (Type of Service)、ID:12345 (IP 識別子)、DgmLen:84 (データグラム長)。
  • ICMP の詳細: Type:8 Code:0 は ICMP エコー要求(標準的な ping)を示します。
  • TCP の詳細: ******S* はパケットに設定された TCP フラグを表します(この場合、SYN フラグが設定されており、接続の開始を示しています)。また、シーケンス番号 (Seq)、確認応答番号 (Ack)、ウィンドウサイズ (Win) も表示されます。

これらのフルパケットダンプを分析することで、IDS アラートをトリガーしたネットワークトラフィックについて、より深い理解を得ることができます。

まとめ

この実験では、Snort 侵入検知システムを設定し、ネットワークトラフィックを監視するために実行することに成功しました。ICMP ping や HTTP リクエストなど、特定の種類のネットワークトラフィックを生成することで、カスタム検知ルールをトリガーする方法を学びました。さらに、Snort の fast ログと full ログの違いを探求し、基本的な送信元/宛先 IP から詳細なパケットヘッダーフラグまで、それらに含まれる重要な情報を読み解く実践的な経験を積みました。これらのスキルは、ネットワークセキュリティを効果的に監視し、潜在的な脅威に対応するために不可欠です。