VolatilityによるRAM(メモリ)ダンプのフォレンジック解析
重要な用語(1行定義):
- メモリフォレンジック: RAM(揮発性メモリ)を解析して実行時の状態を復元する調査手法。
- Volatility: Pythonで実装されたメモリ解析フレームワーク。
- malfind/cmdscan/netscan: Volatilityの代表的プラグインで、それぞれコード注入検出、コマンド履歴抽出、ネットワーク接続検出を行う。
概要
マルウェア解析や侵害調査でRAM解析は非常に重要です。ディスク上に残らないプロセス、インジェクションされたコード、攻撃者のコマンドや一時的なネットワーク接続は、メモリ内に最も鮮明に残っています。Volatilityは生メモリやクラッシュダンプ、VMスナップショットなど多数のメモリ形式を解析可能で、調査の初動から証拠抽出まで実務で広く使われます。本稿は実例に基づき、Windows向けメモリダンプ(memdump3.raw)を解析するワークフローを示します。
対応メモリフォーマット
最新のVolatilityは以下のようなメモリ形式をサポートしています(代表例、環境による):
- Raw/Padded Physical Memory(生ダンプ)
- Firewire (IEEE 1394)
- Expert Witness (EWF)
- 32-および64ビット Windows クラッシュダンプ
- 32-および64ビット Windows ハイバネーション
- 32-および64ビット MachO ファイル(macOS)
- VirtualBox Core Dumps
- VMware Saved State (.vmss) と Snapshot (.vmsn)
- HPAK Format (FastDump)
- QEMU メモリダンプ
(注)実運用では元イメージの取得方法とフォーマットを明確にし、チェーン・オブ・カストディを保つことが重要です。
インストール
VolatilityはWindows, Linux, macOSで利用可能です。Windows/macOS向けにスタンドアロン実行ファイルも配布されています。Ubuntu系ではパッケージから導入できます:
apt-get install volatility
解析対象の準備と整合性確認
フォレンジック調査ではまず取得イメージの整合性を検証します。対象メモリダンプのMD5などハッシュを取得して、以降の作業ログと併せて保管します。例:
MD5: ee043142485a83f4d49a3a7899408500
ハッシュを保存しておけば、解析前後でファイルが改変されていないことを立証できます。
Volatilityによる基本ワークフロー
- imageinfoでプロファイルと推奨設定を把握
- pslist / pstreeでプロセス一覧・親子関係を確認
- malfindで不自然なメモリ領域・コード注入をダンプ
- cmdscanでコマンド履歴を回収
- netscanでソケット/接続情報を取得
- 抽出したDLL/実行ファイルをアンチウイルスやサンドボックスで確認
- 証拠保全・レポーティング
以下、実例コマンドと出力の読み方を詳述します(Windowsスタンドアロン実行ファイルを使用した例)。
imageinfoでプロファイル特定
最初にimageinfoを実行して、Volatilityが推奨するプロファイル(OS/サービスパック/アーキテクチャ)を確認します。これによりプラグインの解釈が正しく行われます。
"E:\volatility_2.4.win.standalone\volatility-2.4.standalone.exe" imageinfo -f memdump3.raw
出力例では以下のプロファイルが推奨されています:
Win7SP0x86 , Win7SP1x86
プロファイルはメモリ構造(カーネルシンボル、オフセット)を解釈するために必須です。誤ったプロファイルを使うと誤検知やデータ欠落が起きます。
プロセス一覧の取得(pslist)
次にpslistでメモリ上のプロセス一覧を確認します。
"E:\volatility_2.4.win.standalone\volatility-2.4.standalone.exe" --profile=Win7SP0x86 pslist -f memdump3.raw
出力から、不審な実行ファイル名(例: 0KqEC12.exe や iexplore.exe の複数インスタンス)を特定します。Windows純正のプロセス名に似たファイル名(iexplore / iexplorer など)や、ランダム文字列名は疑わしい兆候です。
画像: プロセス一覧の一部(part-1)
画像: プロセス一覧の一部(part-2)
親子関係の確認(pstree)
pstreeでプロセスの親子関係を表示すると、どのプロセスが親で子を生成したかが分かります。マルウェアが正規プロセスに注入されている場合、注入先の親プロセスを特定できます。
"E:\volatility_2.4.win.standalone\volatility-2.4.standalone.exe" --profile=Win7SP0x86 pstree -f memdump3.raw
画像: 親子関係の表示(part-1)
出力により、explorer.exeがいくつかの疑わしいiexplore系プロセスの親になっていることが分かりました。これは「explorer.exe」にプロセスインジェクションされている可能性を示します。
malfindによるコード注入領域の抽出
malfindはプロセス内の実行可能属性が付いた不自然なメモリ領域(典型的にはインジェクション領域)を検出し、その領域をダンプできます。疑わしいPIDごとに実行して、抽出ファイルを後続分析に回します。
プロセスID: 1120 (svchost.exe)
E:\>"E:\volatility_2.4.win.standalone\volatility-2.4.standalone.exe" --profile=Win7SP0x86 malfind -D E:\output/pid-1120 -p 1120 -f memdump3.raw
上記ではsvchost.exeに対してmalfindが何も検出しませんでした。
プロセスID: 1788 (rdpclip.exe)
E:\>"E:\volatility_2.4.win.standalone\volatility-2.4.standalone.exe" --profile=Win7SP0x86 malfind -D E:\output/pid-1788 -p 1788 -f memdump3.raw
プロセスID: 2104 (explorer.exe)
E:\>"E:\volatility_2.4.win.standalone\volatility-2.4.standalone.exe" --profile=Win7SP0x86 malfind -D E:\output/pid-2104 -p 2104 -f memdump3.raw
malfindの出力は、注入領域のダンプ(バイナリ断片)を指定ディレクトリに保存します。保存されたダンプのバイナリをアンチウイルス/サンドボックスで確認します。
プロセスID: 2240 (0KqEC12.exe)
E:\>"E:\volatility_2.4.win.standalone\volatility-2.4.standalone.exe" --profile=Win7SP0x86 malfind -D E:\output/pid-2240 -p 2240 -f memdump3.raw
抽出ダンプ例:
プロセスID: 2840(iexplore.exe)/2364(iexplore.exe)/3728(iexplore.exe)など
E:\>"E:\volatility_2.4.win.standalone\volatility-2.4.standalone.exe" --profile=Win7SP0x86 malfind -D E:\output/pid-2840 -p 2840 -f memdump3.raw
抽出されたダンプはバイナリとして保存され、後続でサンドボックス解析や静的分析(PEヘッダ、インポート関数、文字列抽出)を行います。
抽出物のスキャンと分類
抽出したDLL/実行ファイルは必ずオフライン環境(隔離されたサンドボックス)で解析し、アンチウイルス製品やオンラインサービスで確認します。今回の例ではWindows DefenderとMalwareBytesを用いて検査しました。
Windows Defenderの検出
この例では「Trojan:Win32/EyeStye.N」「Trojan:Win32/EyeStye.plugin」として検出されました。Microsoftのシグネチャ説明によると、EyeStye系はキーロガーや情報窃取、追加ペイロードダウンロード、ルートキットによる隠蔽といった振る舞いを持つことが示唆されています。注入やコードインジェクション手法を用いるため、explorer.exeやcmd.exeに注入されていることがあります。
解析対象の痕跡は、explorer.exeが親プロセスとして機能し、そこにマルウェアが注入されて実行されていることを示していました。
MalwareBytesの検出
両ツールでマルウェアとして検出されれば分類と優先対応が可能ですが、未検出の場合でも振る舞い(ネットワーク接続、コマンド履歴、注入痕跡)で判断する必要があります。
コマンド履歴の抽出(cmdscan)
cmdscanはWindowsのコマンドプロンプト履歴をメモリから抽出します。攻撃者が実行したコマンドや実行ファイル名、痕跡を把握できます。
E:\>"E:\volatility_2.4.win.standalone\volatility-2.4.standalone.exe" --profile=Win7SP0x86 cmdscan -f memdump3.raw
出力例では攻撃者がiexplorer.exeやieplore.exeを実行した痕跡、さらに「_lt112.spn」という不審ファイル名が確認されました。オンラインのサンプルリポジトリ(Malwr, Hybrid-Analysis等)で該当文字列を検索すると、類似のマルウェア解析報告がヒットしました。
これらは追加の文脈情報(C2ドメイン、振る舞い、I/O)を得るために有用です。
ネットワーク接続の把握(netscan)
netscanはメモリ内のソケット構造を走査して、どのプロセスがどのIP/ポートに接続していたかを列挙します。外部C2接続やHTTP経由のデータ送信の有無を確認できます。
E:\>"E:\volatility_2.4.win.standalone\volatility-2.4.standalone.exe" --profile=Win7SP0x86 netscan -f memdump3.raw
画像: netscan出力(part-1)
画像: netscan出力(part-2)
今回の解析ではiexplore.exeが外部へTCP/80で接続している痕跡があり、HTTP経由でC2やコマンド取得を行っている可能性が示唆されました。
総合的な結論
本例のメモリ解析により、対象マシンはマルウェアに感染しており、以下の事実が得られました:
- explorer.exeにコード注入があり、iexplore.exeに見える複数のプロセスが実行されていた
- malfindで抽出した断片がWindows DefenderやMalwareBytesでトロイの木馬として検出された
- cmdscanで攻撃者が実行したコマンド痕跡が得られ、_lt112.spn等のマルウェア関連ファイル名が見つかった
- netscanで外部へのHTTP接続が観察された
これらの観察は相互に補強し合い、侵害とデータ窃取(キー入力やブラウザデータ収集)の挙動があったと結論づけられます。
実務向けチェックリスト(役割別)
調査担当者(アナリスト)
- 取得したメモリイメージのハッシュを保存する
- imageinfoで適切なプロファイルを特定する
- pslist/pstreeで疑わしいプロセスをピックアップする
- malfindで不正領域を抽出し、ファイル名・タイムスタンプを記録する
- cmdscanでコマンド履歴を回収する
- netscanで接続先・ポートを特定する
- 抽出物は隔離した環境でアンチウイルス/サンドボックスで確認する
インシデント対応(IR)
- 被害範囲(横展開)、C2の有無を特定する
- 必要に応じてネットワーク隔離、パスワードリセットを実施する
- 証拠保持のためディスクイメージやメモリイメージの取り扱いログを残す
マネジメント
- 法的報告要否の判断(個人情報流出等)を行う
- 復旧計画(OS再構築、パッチ適用、アクセス権見直し)を指示する
決定フロー(簡易)
以下は初動での意思決定を支援する簡易フローです。
flowchart TD
A[メモリイメージを取得] --> B[ハッシュで整合性確認]
B --> C[imageinfoでプロファイル特定]
C --> D{pslistで疑わしいプロセスがあるか}
D -- Yes --> E[malfindで抽出]
D -- No --> F[cmdscan/netscanで更に確認]
E --> G{抽出物が悪性か}
G -- Yes --> H[隔離・封鎖・アラート]
G -- No --> F
F --> I[追加ログ/ディスク調査]
H --> J[レポート作成・法的対応検討]
小メソッド(ミニ手順書)
- 取得→保全: ハッシュを保存し、読み取り専用で扱う。
- 分析→抽出: imageinfo→pslist/pstree→malfind→cmdscan→netscanの順で実行。
- 検証→分類: 抽出物はAV、サンドボックス、文字列解析、PE解析で優先度を判断。
- 報告→対応: 侵害のスコープに応じて隔離・パスワード変更・再イメージを指示。
代替手段と制約
- 代替ツール: Rekall(Volatilityと類似のオープンソース)、商用ではEnCase、FTK Imager、X-Waysなどもメモリ解析機能を提供する。
- 限界: 暗号化されたペイロードやポリモーフィズムの高いマルウェアは静的列挙では判別困難。メモリダンプに対象コードがスワップアウトしているケースや、プロファイルが合わないと解析精度が落ちる。
- カウンター例: マルウェアがメモリを破壊(クリーニング)していたり、メモリ取得が遅延して攻撃者プロセスが終了している場合、痕跡が残らないこともある。
事実ボックス(Key facts)
- VolatilityはWindows/Linux/macOS/AndroidのRAM解析をサポートする汎用ツールで、プラグインベースで拡張可能。
- 代表的な解析対象: 実行プロセス、注入領域、コマンド履歴、ネットワークソケット、スレッド、ハンドル等。
- 主要プラグイン: imageinfo, pslist, pstree, malfind, cmdscan, netscan, dlllist, filescan。
1行用語集
- memdump: 物理メモリの生ダンプファイル。
- プロファイル: VolatilityがOS構造を解釈するための情報セット。
- コード注入: 正規プロセスに悪性コードが埋め込まれ実行される手法。
ローカルでの注意点(日本向け)
- オンラインサービス(VirusTotal等)にアップロードする前は組織のポリシーを確認する。機密情報や個人情報を含む可能性があるため、外部送信は慎重に。
- 法的対応が想定される場合は、証拠の取り扱いと報告窓口を事前に確定する。
まとめ
- Volatilityはメモリに残る実行時痕跡を回収して、ディスク上だけでは見えない侵害の証拠を提示できる。
- imageinfo→pslist/pstree→malfind→cmdscan→netscanの流れで、感染の有無、感染プロセス、通信先、攻撃者が実行したコマンドを体系的に把握できる。
- 抽出したバイナリは隔離環境で解析、検出結果は複数ツールで相互補完して判断することが重要。
重要: 本記事に記載のコマンドや手順は、調査対象の取り扱い(法令や社内ポリシー)を順守した上で実行してください。