「犯人はいつ、何をした?」メモリフォレンジックで紐解く、サイバー空間のタイムライン分析
こんにちは!セキュリティの世界へようこそ。
突然ですが、皆さんの家で「大切なアクセサリーが消えた」とします。警察官がやってきて、真っ先に確認するのは何でしょうか?そう、「いつ、誰が、どこから入って、何を持ち出したか」という時系列の記録ですよね。
サイバーセキュリティの世界でも全く同じことが起きています。サーバーやPCが乗っ取られたとき、僕たちDFIR(インシデントレスポンス専門家)が最初に行うのは、バラバラに散らばったパズルのピースを「時間軸」に沿って並べ直す作業です。
今日は、メモリ(PCの作業机)に残された断片的な情報を手がかりに、攻撃者の足取りを追いかける「メモリフォレンジックによるタイムライン分析」について、一緒に学んでいきましょう!
—
1. なぜ「メモリ」を見る必要があるの?
皆さんのPC上のファイル(ハードディスク)は「本棚」です。電源を切っても本はそこに残りますよね。でも、メモリは「作業中の机の上」です。
攻撃者は、痕跡を残さないように「ファイルレス攻撃」を好みます。つまり、ハードディスクには何も書き込まず、メモリの中だけで悪意のあるプログラムを動かすのです。「机の上のメモ」が消える前に、その内容を記録(ダンプ)して分析すること、これがメモリフォレンジックの極意です。
2. タイムライン分析は「防犯カメラの映像」
攻撃者は巧妙に「タイムスタンプ(作成日時や更新日時)」を偽装します。しかし、メモリ内には、OSが管理する複雑なオブジェクトの履歴が「偽装しきれないレベル」で刻まれています。
これを時系列に並べることは、複数の防犯カメラ映像を突き合わせて、犯人の移動ルートを特定する作業と同じです。
分析で追いかける主なポイント
- プロセスの起動時刻: どのプログラムが、どのタイミングで動き出したか。
- ネットワーク接続履歴: 犯人が外部の指令サーバー(C2サーバー)といつ会話したか。
- メモリ内の文字列(ヒストリー): 犯人が実行したコマンドラインの「打ち間違い」や「履歴」は残っていないか。
—
3. 実践!メモリから情報を引き出す「ツール」の基礎
プロがよく使うツールに『Volatility Framework』というものがあります。まずは、メモリダンプファイルから「いつ、どのプロセスが起動したか」を抽出するイメージを掴んでみましょう。
以下は、Volatility3を使用した際のコマンド例をイメージしたものです。
# メモリダンプファイル(memdump.raw)から、プロセスの一覧と開始時間を抽出します
# 攻撃者はよく「cmd.exe」や「powershell.exe」を隠れ蓑にします
python3 vol.py -f memdump.raw windows.pslist
# 特定のプロセスがいつネットワークに繋いだかを確認します
python3 vol.py -f memdump.raw windows.netscan
- ポイント:
windows.pslistでリスト化した際、「異常に開始時間が遅いプロセス」や「親プロセスが怪しい(例: Webサーバーのプロセスからいきなりcmd.exeが生えている)」場合、そこが侵入の突破口です!
—
4. 開発者・運用担当者が今日からできること
「フォレンジックなんて自分にはまだ早い…」と思っていませんか?大丈夫です。日頃のログ管理が、いざという時のタイムライン分析を劇的に楽にします。
おすすめの防衛対策:ログの「時刻同期」を徹底する
もし、サーバーの時計が数分ズレていたら、すべての分析が台無しになります。
- NTPの設定: すべてのサーバー・デバイスで正確な時刻(NTPサーバー)を参照しましょう。
- イベントログの集約:
Sysmonなどのツールを導入し、プロセス起動時のコマンドライン引数(-encで難読化されたPowerShellコマンドなど)を外部のログサーバーへ飛ばす設定を行いましょう。
ログ収集のヒント(Windows Sysmon設定例)
以下のような設定(config.xml)をSysmonに適用することで、怪しい動きを詳細に記録できます。
<!-- プロセスの作成を監視する設定のイメージ -->
<ProcessCreate onmatch="include">
<!-- PowerShellの実行を詳細に記録 -->
<Image condition="end with">powershell.exe</Image>
<CommandLine condition="contains">-enc</CommandLine> <!-- 難読化されたコマンドを検知 -->
</ProcessCreate>
—
最後に:セキュリティは「答え合わせ」の連続
インシデントハンドリングは、最初から完璧に犯人を特定できるものではありません。「あ、このコマンドが実行されたのは14:02分か。じゃあ、その1分前にログインログがあるはずだ…」と、パズルのピースを一つずつ埋めていく地道な作業です。
でも、その泥臭い調査の積み重ねこそが、次の攻撃を防ぐための最強の武器になります。
まずは、自分の環境で「今、どんなプロセスが動いているか?」を眺めることから始めてみてください。それが、セキュリティの深い森へ踏み出す第一歩になりますよ!
一歩ずつ、一緒に強くなっていきましょう。また次回の記事でお会いしましょう!
コメント