【入門編】 メモリ上のネットワーク接続情報(Socket/TCP Endpoint)の抽出と相関分析 – インシデントレスポンス & フォレンジック(DFIR)防御ガイド

こんにちは!セキュリティやインフラの勉強を始めたばかりの新人エンジニアの皆さん、日々の業務お疲れ様です。

システムを作ったり運用したりしていると、「なんだか最近、サーバーの動きがおかしいぞ…?」とヒヤッとする瞬間に出くわすことがありますよね。まるで、自宅の鍵を閉めたはずなのに、夜中に玄関のドアノブがガチャガチャと揺らされているような、得体の知れない恐怖を感じることもあるかもしれません。

そんなとき、サイバー攻撃の足跡をピタリと暴くための強力な武器が 「メモリフォレンジック」 です。

今回は、その中でも少しマニアックだけど最高にクールな技術、「メモリ上のネットワーク接続情報の抽出と相関分析」 について、身近な例えを交えながら一歩ずつ優しく紐解いていきましょう!

—

1. なぜ「メモリ」を見る必要があるの?(防犯カメラの例え)

皆さんは、家やオフィスのセキュリティを考えるとき、何を思い浮かべますか?多くの人は、玄関の鍵や、ドアの前に設置した防犯カメラを想像するのではないでしょうか。

コンピュータの世界でも同じです。ハードディスク(SSD)のログファイルは、いわば「玄関の出入りを記録したノート」や「防犯カメラの映像」です。しかし、狡猾なハッカー(泥棒)は、侵入した後に自分の足跡を消すために、この記録ノートを綺麗に書き換えてしまったり、そもそもノートに記録を残さないように隠れて悪さをしたりします。

ここで登場するのが 「メモリ(RAM)」 です。
メモリとは、パソコンが電源を入れて動いている最中に、頭の中で一時的に記憶を広げている「作業机」のようなもの。

泥棒がどんなに上手に玄関の防犯カメラ(ハードディスクのログ)を避けて通ったとしても、リビングの作業机の上で作業をしていたら、その瞬間使っていた道具や、どこかへ電話をかけたメモ(ネットワーク接続情報)は、電源を切るまでしっかりと机の上(メモリ)に散らばったままになっています。

この散らばったメモをそっと拾い集めて、「この泥棒、どこへ連絡を取っていたんだ?」と突き止めるのが、メモリフォレンジックの醍醐味なんです!

—

2. 消えたはずの通信の残骸を探せ!アクティブとクローズドの秘密

サーバーが怪しい動きをしているとき、まずは「今、どこにつながっているか(アクティブな接続)」を確認しますよね。これは、家の中にまだ泥棒がいないかを確かめる作業です。

しかし、巧妙な攻撃者は、短時間だけ悪さをして、すぐに通信を切断(クローズ)してしまいます。通常のネットワーク監視ツールだと、「あ、通信が終わったから安全だな」と見逃してしまうことがあります。

ここで驚くべき事実があります。
ネットワークの通信が「終了しました(Closed)」とOSが判断した後でも、その通信が使っていたデータ構造の残骸は、しばらくの間メモリの奥深くにこびりついて残っている んです。

泥棒が電話を切って受話器を置いたとしても、ダイヤルの履歴や、通話相手の電話番号がメモ用紙の端っこにうっすらと残っているようなイメージですね。メモリフォレンジックを使えば、この「クローズされた接続の残骸」まで綺麗に復元し、「数分前に、あやしい海外のサーバーとこっそり会話していたな?」という事実を暴くことができるのです。

—

3. 実践!メモリからネットワーク情報を抽出しよう

「でも、メモリの中身を見るなんて、特別な超能力が必要なんじゃないの?」と思われるかもしれませんが、大丈夫です!オープンソースの強力な解析ツールである Volatility(ボラティリティ) を使えば、誰でも簡単にメモリの調査を行うことができます。

ここでは、実務でよく使われる Volatility 3 を使って、メモリからネットワーク接続情報を抽出する基本的な手順を見ていきましょう。

ステップ1:メモリの全体像をファイルとして保存する(メモリダンプ)

まずは、怪しい挙動をしているサーバーの「現在の脳みそ(メモリ)」をごっそりファイルに保存します。これを「メモリイメージの取得」と呼びます。

ステップ2:ネットワーク接続のコマンドを実行する

取得したメモリイメージ(例: server_memory.raw)に対して、ネットワーク情報を引き出すコマンドを叩きます。

# Volatility 3 を使って、Windowsのメモリイメージからネットワーク接続情報を抽出する例
python3 vol.py -f server_memory.raw windows.netscan.NetScan

このコマンドを実行すると、以下のような情報が画面にガーッと表示されます。

  • Offset: メモリ上のどこにそのデータが存在するか
  • Proto: プロトコル(TCPやUDPなど)
  • Local Address / Port: 自サーバーのIPアドレスとポート番号
  • Foreign Address / Port: 接続先(外部)のIPアドレスとポート番号
  • State: 状態(ESTABLISHED=接続中、CLOSE_WAIT=終了処理中 など)

ここで注目すべきは、State が CLOSED や TIME_WAIT になっている、「すでに終わったはずの通信の残骸」 です。ここに、攻撃者がC2(コマンド&コントロール)サーバーと交信していた痕跡が隠れていることが多いのです。

—

4. 点と点を繋ぐ「相関分析」の魔力

さて、怪しい接続先のIPアドレス(例: 203.0.113.50)が見つかりました。でも、これだけでは「偶然怪しいサイトに繋がってしまっただけ」かもしれませんよね。

ここで重要になるのが 「相関分析(そうかんぶんせき)」 です。
相関分析とは、バラバラのピースをパズルのように組み合わせて、真実のストーリーを浮かび上がらせる作業です。

例えば、以下のような流れでデータを繋ぎ合わせていきます。

1. ネットワーク接続の抽出: メモリから、特定の怪しいIPへの通信履歴を発見する。
2. プロセスとの紐付け: 「その通信を一体どのプログラムが使っていたのか?」を調べる(例: 普段見慣れない update.exe という変な名前のプログラムが通信していた!)。
3. タイムライン分析: そのプログラムがいつ起動し、どのファイルを触り、いつネットワーク通信を行ったのかを一本の時系列に並べる。

家の防犯に例えるなら、「夜中の2時に勝手口の鍵が開き(プロセス起動)、知らない人がリビングに入ってきて(ファイル操作)、外の仲間と電話で合図を取り合っていた(ネットワーク接続)」という一連の一部始終を、バラバラの証言から見事に一本のドラマとして復元するようなものです。

これらを効率よく調査するために、実務では以下のような手順でPythonスクリプトなどを用いてログの相関を見ることもあります。

# 【参考】抽出したネットワーク情報とプロセスを簡易的に紐付けるイメージコード
def correlate_network_and_process(net_connections, active_processes):
    """
    メモリから得られたネットワーク情報とプロセス情報を突合し、
    怪しい通信を行っているプロセスを特定する関数
    """
    print("[-] ネットワークとプロセスの相関分析を開始します...")
    
    for conn in net_connections:
        pid = conn['pid']
        foreign_ip = conn['foreign_address']
        
        # 該当するPIDを持つプロセスを検索
        process = active_processes.get(pid)
        
        if process:
            print(f"[発見] PID: {pid} ({process['name']) が 外部IP: {foreign_ip} と通信しています。")
            
            # もしプロセス名がホワイトリストにないものだったら警告
            if process['name'] not in ['nginx.exe', 'sshd.exe']:
                print(f"[!] 警告: 予期しないプロセスが外部と通信しています!要詳細調査。")

# (実際の現場では、Volatilityの出力結果をパースしてこのようなロジックで怪しいものを絞り込みます)

このように、ただ数字やIPアドレスを見るだけでなく、「どのプログラムが」「いつ」「どこへ」繋いでいたのかをセットで考えることで、攻撃の本質が見えてくるんです。

—

一歩ずつ対策を学んでいきましょう!

メモリフォレンジックやネットワークの相関分析と聞くと、なんだかハッカー映画に出てくるような難解な技術に思えるかもしれません。

でも、基本の考え方はとてもシンプルです。

  • 「目に見えるログだけでなく、作業机(メモリ)の上の散らかり具合を見る」
  • 「終わったはずの通信の残骸(クローズされた接続)も見逃さない」
  • 「誰が、どこへ、何のために繋いでいたのかを点と線で繋ぐ(相関分析)」

この3つを意識するだけで、インシデント発生時の調査スキルは劇的に向上します。もし実務でサーバーの挙動に不安を感じたら、ぜひ今回の話を思い出して、一歩ずつ冷静に証拠を辿ってみてくださいね。

皆さんのセキュリティライフが安全で楽しいものになるよう、これからも応援しています!

コメント

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