【入門編】 メモリ上のネットワーク接続情報(netscan)を用いたC2通信の特定 – インシデントレスポンス & フォレンジック(DFIR)防御ガイド

こんにちは!SOCアナリストの筆者です。

今日は、皆さんのPCやサーバーの中で「今、何が起きているのか?」を突き止める、少しドキドキするような技術、「メモリフォレンジック」の世界へご案内します。

「インシデントレスポンス」なんて聞くと難しく感じるかもしれませんが、要は「犯人が残した足跡を、現場が片付けられる前に見つける技術」のこと。今回はその中でも、攻撃者との「裏の連絡網」を見つける方法を噛み砕いて解説しますね。

—

泥棒は「電話」をかけている?メモリ上のネットワーク通信

皆さんの家のドア(ファイアウォール)をこじ開けた泥棒が、家の中に侵入したとします。泥棒は、外にいる仲間に「ここ、いいカモがあるぞ!」と報告するために、こっそり電話をかけますよね。

コンピューターの世界で、この「電話」にあたるのが「ネットワーク接続」です。

攻撃者は、一度システムに侵入すると、外部にある「C2サーバー(指令サーバー)」と通信し、命令を受け取ったり、盗んだデータを送ったりします。この通信を特定することこそ、攻撃を食い止めるための最重要ミッションなんです。

なぜ「メモリ」を見る必要があるの?

普通のログファイルは、攻撃者が「証拠隠滅」のために消してしまうことがあります。でも、実行中のプログラムが使っている「メモリ(RAM)」の中身は、攻撃者にとっても隠しきれないリアルタイムの活動記録です。

ここに、今まさに繋がっている「怪しい電話番号(IPアドレス)」や「通話相手(ポート)」が全部残っているんです。

—

Volatilityを使って「怪しい通信」を炙り出す

メモリフォレンジックの現場で最も信頼されているツールに「Volatility」というものがあります。これを使って、アクティブな接続情報(netscan)を抜き出す手順を見ていきましょう。

※ここではメモリダンプファイル memory.dmp が手元にあると仮定します。

# Volatilityを使って、メモリ内のネットワーク接続一覧を抽出します
# 攻撃者が使っていそうな怪しい通信がないか一網打尽にします
vol.py -f memory.dmp windows.netscan

このコマンドを打つと、こんな感じのリストがズラリと並びます。

  • Proto: 通信の種類(TCPやUDP)
  • Local Address: 自分のPCの出口
  • Foreign Address: 相手(C2サーバー)の住所
  • State: 通信の状態(LISTENは待機中、ESTABLISHEDは通話中!)

ここで注目すべきは、ESTABLISHED(接続中)になっているのに、身に覚えのないIPアドレスや、見たこともないポート番号(例:80や443以外の変な数字)に繋がっているものです。

—

現場の視点:どんな通信が「アウト」なのか?

新人エンジニアの皆さんが、このリストを見た時に「これ、怪しくない?」と気づくためのヒントを3つ教えますね。

1. 不自然なポート番号:
本来Webサーバーなら80や443を使いますが、4444や8080など、よくある「バックドア(攻撃者の裏口)」に使われるポートが空いていたら要注意です。
2. 海外からの通信:
業務上、海外とのやり取りがないはずなのに、遠く離れた国のIPアドレスとずっと繋がっているなら……それは非常に怪しいサインです。
3. ブラウザ以外の通信:
「なんでメモ帳(notepad.exe)がインターネットに繋がっているの?」といった、本来通信しないはずのソフトがネットに繋がっている場合、それは高確率でマルウェアが潜り込んでいます。

—

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

もしメモリ上で「あ、これ怪しい通信だ!」と特定できたら、次はそのプロセスを停止したり、メモリダンプからその実行ファイルを抜き出して解析したりと、次のステップに進みます。

「怪しい通信を見つけたら、まずは物理的にLANケーブルを抜くか、ネットワークから隔離する」

これが現場での鉄則です。犯人の電話線を切ってしまうイメージですね。

最初はコマンドの結果を見るだけでも怖く感じるかもしれませんが、大丈夫です。何度も見ているうちに、「あ、この通信の並びはいつも見るやつだ」「お、これは見たことない動きだな」と、直感が働くようになります。

デジタルフォレンジックは、まるでパズルを解くような探偵仕事です。皆さんが守っているシステムが、今日も安全であることを祈っています。もし不安なことがあれば、いつでもまた聞きに来てくださいね!

コメント

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