【入門編】 NetFlow / IPFIX / sFlowを活用したランサムウェアの横展開(ラテラルムーブメント)のトラフィック異常検知 – サイバーセキュリティとプライバシー保護実践ガイド

こんにちは!ネットワークの裏側を覗き見するのが大好きな、技術メディアの主筆ライターです。

皆さんは「ランサムウェア」という言葉を聞いて、どんなシーンを想像しますか?「怪しいメールの添付ファイルを開いちゃった」「変なウェブサイトからウイルスをダウンロードした」……うんうん、確かにそれが従来の感染のきっかけでしたよね。

でも、近年のランサムウェアは本当に厄介なんです。たった1台のPCが侵入されたが最後、オフィスのビルに忍び込んだ泥棒のように、社内のネットワークをコソコソと動き回り、次々と他のパソコンやサーバーを乗っ取っていく。この動きを「ラテラルムーブメント(横展開)」と呼びます。

「うちの会社にはウイルス対策ソフトが入っているから大丈夫!」……本当にそう言い切れますか? 泥棒がオフィスの廊下を歩いているとき、部屋の鍵(アンチウイルス)だけを信じていては、廊下の異変に気づけませんよね。

そこで今回は、パケットの中身(中身のデータ)を一つひとつ細かく見つめるのではなく、「誰と誰が、どれくらいの量の荷物をやり取りしているか」という通信の「通信簿」、つまりNetFlowやIPFIX、sFlowといったフローデータを使って、ランサムウェアのラテラルムーブメントをビシッと見つけ出す方法を、一緒に優しく紐解いていきましょう!一歩ずつ理解していきましょうね。

—

1. フローデータってなに? 身近な例えでイメージしよう

いきなり「NetFlow」「IPFIX」「sFlow」なんて横文字が出てくると、頭がクラクラしてしまいますよね。でも安心してください。難しく考える必要はありません。これらはすべて、ネットワーク機器(ルーターやスイッチ)が記録してくれる「通信の履歴書(または郵便配達の伝票)」のようなものです。

ちょっと想像してみてください。あなたは巨大なショッピングモールの総合受付にいます。
モールの中では、毎日数え切れないほどの人が行き交い、荷物をやり取りしていますよね。

  • パケットキャプチャ(Wiresharkなど)は、モールの中を飛んでいる「手紙の封を切って中身をすべて読む」ようなもの。詳細にわかりますが、プライバシーの問題もありますし、何よりモール全体の人流をチェックするには情報量が多すぎて頭がパンクしてしまいます。
  • 一方、NetFlowやsFlowは、防犯カメラや受付の記録帳のようなもの。「Aさんが、Bさん宛てに、14時15分から3分間、合計50通の荷物を送った」というメタデータ(付加情報)だけを記録します。中身は覗き見ないけれど、「誰と誰がどれくらいやり取りしたか」がひと目でわかるわけです。

これなら、ネットワーク全体で「あれ? あそこのPC、急に大量の人に手紙を配り歩いているぞ! 怪しいぞ!」という異常事態に、パッと気づくことができますよね。

—

2. ランサムウェアが社内で暴れるときの「不気味なサイン」

ランサムウェアが社内のネットワークに侵入し、他の端末へ感染を広げようとするとき、ネットワーク上では必ず「普段とは違うおかしな動き(兆候)」が現れます。主に以下の3つのパターンに注目すると、怪しい影を見つけやすくなります。

1. 急激な通信量の増加(スパイク)
感染した端末が、他のサーバーから不正なプログラムを一気にダウンロードしたり、自分のコピーをばら撒いたりするため、普段は静かな時間帯にものすごい量のデータが流れます。
2. 大量のスキャン動作(ポートスキャン・ホストスキャン)
「他に仲間(狙えるPC)はいないか?」と、社内のあちこちに「おーい、生きてる?」と声をかけまくる(死活確認やポートスキャン)ため、短時間に無数の宛先への通信が発生します。
3. 未知のポートや特定プロトコルへの固執
普段は業務で使わないようなポート(例えば、Windowsのファイル共有に使われる445番ポートなど)に対して、次々と接続を試みるようになります。

これらはすべて、フローデータの履歴書にハッキリと足跡が残ります。この足跡を見逃さないのが、今回のテーマの肝なんです!

—

3. フローデータを活用した具体的な検知アプローチ

では、実際にどうやってこれらの異常を検知するのでしょうか。実務の現場では、ルーターやスイッチから出力されたフローデータ(NetFlowやsFlow)を、専用のコレクター(収集サーバー)やSIEM(セキュリティ情報イベント管理)に集約し、分析します。

ここでは、オープンソースのフロー解析によく使われる環境をイメージしながら、実務で使える検知のアイデアと簡単な設定・クエリの雰囲気を覗いてみましょう。

実務で役立つ!異常検知の観点と設定例

例えば、ネットワークの要であるCiscoルーターなどでNetFlowを有効化する場合、以下のようなイメージでフローの輸出設定を行います。

# 【Cisco IOSのサンプル設定】
# 1. フローの記録ルール(レコード)を定義する
ip flow-record ransomware-detect-record
 match match ipv4 source address
 match match ipv4 destination address
 match match transport source-port
 match match transport destination-port
 match match ip protocol
 collect counter bytes   # 送受信されたバイト数を記録
 collect counter packets # パケット数を記録

# 2. フローをどこに飛ばすか(エクスポーター)を設定する
ip flow-exporter ransomware-exporter
 destination 192.168.100.50  # 収集サーバー(SIEMなど)のIPアドレス
 transport udp 2055          # NetFlowの一般的なポート番号
 export-version 9            # 標準的なバージョン9を指定

# 3. 実際にインターフェースに適用して監視をスタートする
interface GigabitEthernet0/1
 ip flow monitor ransomware-detect-monitor input

このようにして集められたデータに対し、分析サーバー側(PythonやElasticsearchなどのSIEM)で次のようなルール(アラート条件)を設定します。

Python風の擬似コードによる検知ロジック例

「短時間にあまりにも多くの異なる宛先に通信している(スキャン行動)」を検知するイメージを掴んでみましょう。

# 疑似的なフローデータのストリーム処理
def detect_lateral_movement(flow_records):
    # 端末ごとの通信先IPアドレスのセットを管理する辞書
    connection_attempts = {}

    for flow in flow_records:
        src_ip = flow['source_address']
        dst_ip = flow['destination_address']
        dst_port = flow['destination_port']
        packet_count = flow['packets']

        # 例: Windowsのファイル共有ポート(445)へのスキャンを監視
        if dst_port == 445:
            if src_ip not in connection_attempts:
                connection_attempts[src_ip] = set()
            
            # 通信先のIPを記録していく
            connection_attempts[src_ip].add(dst_ip)

    # 閾値チェック:短時間に20台以上の異なる端末へ445ポートにアクセスしていたら警告!
    for src_ip, targets in connection_attempts.items():
        if len(targets) > 20:
            print(f"[警告!] 端末 {src_ip} がラテラルムーブメント(スキャン)の疑いがあります! 接触先数: {len(targets)}")

どうでしょう? パケットの中身を解読しなくても、「短時間にたくさんの異なるIPと喋っている」という事実だけで、ランサムウェアの不審な動きを十分に嗅ぎ取れることがお分かりいただけると思います。

—

4. 現場のインフラエンジニアが知っておくべき運用上のコツ

さて、理論はわかっても、いざ現場でこれを運用しようとすると、いくつか「おや?」とつまずきやすいポイントがあります。最後に、現場の泥臭い知見を少しだけシェアしますね。

  • 「ノイズ」との戦い

社内の脆弱性スキャナーや、一斉にWindows Updateをかける管理サーバーなどは、まさに「大量のスキャン通信」や「通信量の急増」を引き起こします。これらを悪者(ランサムウェア)と誤検知しないように、あらかじめ正当な管理端末のIPアドレスはホワイトリスト(除外設定)に登録しておくことが、運用の平穏を守るコツです。

  • サンプリング(間引き)の罠に注意

sFlowやNetFlowの設定では、負荷を下げるために「1000パケットに1回だけ記録する(サンプリング)」という設定にすることがよくあります。しかし、巧妙なランサムウェアがこっそり行う極端に遅いスキャンなどは、サンプリングの網をすり抜けてしまうことがあります。クリティカルな内部セグメントでは、可能な限りサンプリングレートを上げるか、全件記録(フルフロー)を検討しましょう。

—

まとめ

今回は、NetFlowやIPFIX、sFlowといったフローデータを使って、ランサムウェアの横展開(ラテラルムーブメント)をいかにして早期に検知するかを、郵便配達の例えを交えて優しく解説しました。

セキュリティ対策は、「侵入を100%防ぐ」ことだけがすべてではありません。「入られてしまったとしても、廊下を歩いている足音をいち早く聞きつけて、被害を最小限に食い止める」というゼロトラストの視点が今の時代には不可欠です。

今日からあなたのネットワークでも、ルーターのフロー設定や、眠っているログ分析基盤を見直してみませんか? 「おや、この通信はなんだろう?」という小さな気づきが、会社を救う大きな第一歩になりますよ。それではまた、次の技術の深掘りでお会いしましょう!

コメント

タイトルとURLをコピーしました