conducting-memory-forensics-with-volatility について
メモリイメージ内の揮発性証拠を調べる、インシデント対応担当者やフォレンジック分析者向けの Volatility 3 スキルです。プロセス、ネットワーク接続、コードインジェクション、認証情報を分析します。ディスクイメージやファイルシステムの調査は対象外です。
主な機能
- 01OS とシンボル情報の特定
- 02プロセス一覧とツリーの分析
- 03現行および最近のネットワーク接続の抽出
- 04プロセスインジェクションとメモリ上のマルウェア検出
- 05認証情報とメモリアーティファクトの抽出
- 06構造化されたフォレンジックレポートの作成
活用シーン
- 01メモリ上だけに存在するマルウェアの調査
- 02不審なプロセスインジェクションやルートキットの確認
- 03プロセスと C2 接続の関連付け
- 04シャットダウン前のメモリ上の暗号鍵の復元
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill conducting-memory-forensics-with-volatilityインストール後、Claude Code で/conducting-memory-forensics-with-volatilityを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSEreferences/api-reference.mdscripts/agent.py詳細
Volatility によるメモリフォレンジックの実施
使用する場面
- アクティブなインシデントの最中にエンドポイントが隔離され、揮発性の証拠を保全する必要がある場合
- EDR アラートから、メモリ内にのみ存在するプロセスインジェクションやファイルレスマルウェアが疑われる場合
- ランサムウェアに感染したシステムのシャットダウン前に、暗号化キーを復元する必要がある場合
- 認証情報の窃取(Mimikatz、LSASS ダンプ)が疑われ、証拠を確認する必要がある場合
- ルートキットやカーネルレベルの侵害が疑われ、ディスクベースの分析では不十分な場合
使用しないでください。ディスクイメージやファイルシステムのアーティファクトの分析には使用せず、そうした作業にはディスクフォレンジックツール(Autopsy、FTK)を使用してください。
前提条件
- メモリ取得ツールが導入済み、または利用可能であること:WinPmem、Magnet RAM Capture、DumpIt、または AVML(Linux)
- Volatility 3 が Python 3.8 以降および必要なシンボルテーブルとともにインストールされていること
- メモリダンプ用に十分なストレージがあること(システム RAM と同等の容量。通常は 8~64 GB)
- メモリ内のマルウェア検出用 YARA ルールがあること(Florian Roth の signature-base、カスタムルール)
- 分析対象の OS バージョンにおける、正常なプロセスおよび DLL の参照ベースライン
- 証拠の取り扱いに関する証拠保管の連鎖の記録
ワークフロー
ステップ 1:メモリイメージを取得する
フォレンジック的に適切な方法で、対象システムから RAM を取得します。
Windows(WinPmem):
winpmem_mini_x64.exe output.raw
Windows(Magnet RAM Capture):
MagnetRAMCapture.exe
# GUI-based, select output path, generates .raw file
Windows(DumpIt):
DumpIt.exe
# Creates memory dump in current directory automatically
Linux(AVML - Acquire Volatile Memory for Linux):
./avml output.lime
取得時のメタデータを記録します。
Acquisition Record:
━━━━━━━━━━━━━━━━━
Target Host: WKSTN-042
RAM Size: 16 GB
Dump File: WKSTN-042_20251115_1445.raw
Dump Size: 16,843,612,160 bytes
SHA-256: a4b3c2d1e5f6...
Acquisition Tool: WinPmem 4.0
Acquired By: [Analyst Name]
Timestamp: 2025-11-15T14:45:00Z
ステップ 2:オペレーティングシステムとプロファイルを特定する
Volatility 3 は OS を自動的に特定しますが、確認してください。
# Get system information
vol -f WKSTN-042_20251115_1445.raw windows.info
# Output includes:
# OS: Windows 10 22H2 (Build 19045.3693)
# Kernel Base: 0xf8066c200000
# DTB: 0x1aa000
# Symbols: ntkrnlmp.pdb
ステップ 3:実行中のプロセスを分析する
プロセスツリーを調べて、不審なアクティビティを確認します。
# List all running processes
vol -f memory.raw windows.pslist
# Show process tree (parent-child relationships)
vol -f memory.raw windows.pstree
# Scan for hidden/unlinked processes (rootkit detection)
vol -f memory.raw windows.psscan
# Compare pslist vs psscan to find hidden processes
# Processes in psscan but NOT in pslist may be hidden by rootkits
プロセス分析における侵害の主な兆候:
svchost.exeが-kパラメーターなしで実行されている、または親プロセスが不適切(services.exeであるべき)csrss.exeまたはlsass.exeの親プロセスが異常- スペルミスのある名前のプロセス(
scvhost.exe、lssas.exe) outlook.exe、winword.exe、またはexcel.exeによって起動された不審なプロセス- 単一インスタンスであるべきプロセス(
lsass.exe、smss.exe)の複数のインスタンス
ステップ 4:ネットワーク接続を調査する
アクティブなネットワーク接続と、最近閉じられたネットワーク接続を抽出します。
# List all network connections
vol -f memory.raw windows.netscan
# Focus output fields:
# Offset Proto LocalAddr LocalPort ForeignAddr ForeignPort State PID Owner
# 0xe10... TCPv4 10.1.5.42 49721 185.220.101.42 443 ESTAB 3847 update.exe
不審な接続をプロセスツリーと照合し、C2 通信を特定します。次の点を確認してください。
- 予期しないプロセスから外部 IP への接続
- ブラウザー以外のプロセスからポート 443/80 に接続する高いポート番号
svchost.exeまたはシステムプロセスから外部 IP への接続
ステップ 5:プロセスインジェクションとマルウェアを検出する
malfind を使用して、インジェクトされたコードやメモリ常駐型マルウェアを特定します。
# Detect injected code in processes
vol -f memory.raw windows.malfind
# Output shows:
# PID Process Start End Tag Protection Hexdump/Disassembly
# 3847 explorer.exe 0x2a10000 0x2a14000 VadS PAGE_EXECUTE_READWRITE
# MZ header detected - injected PE
# Dump suspicious process memory
vol -f memory.raw windows.memmap --pid 3847 --dump
# List DLLs loaded by a suspicious process
vol -f memory.raw windows.dlllist --pid 3847
# Scan memory with YARA rules
vol -f memory.raw windows.yarascan --yara-file malware_rules.yar
ステップ 6:認証情報とアーティファクトを抽出する
メモリから機密データを復元します。
# Dump registry hives from memory (for password hash extraction)
vol -f memory.raw windows.registry.hivelist
vol -f memory.raw windows.hashdump
# Extract command line history
vol -f memory.raw windows.cmdline
# List handles (files, registry keys, mutexes)
vol -f memory.raw windows.handles --pid 3847
# Extract clipboard contents
vol -f memory.raw windows.clipboard
# Dump cached files from memory
vol -f memory.raw windows.dumpfiles --pid 3847
ステップ 7:フォレンジックレポートを作成する
メモリから抽出したすべての証拠を記録した、構成の整った分析レポートに調査結果をまとめます。
- PID、親プロセス、タイムスタンプを含むプロセスの異常
- 関連するプロセスのコンテキストを含むネットワーク接続
- メモリ保護フラグを含む、インジェクトされたコード領域
- 抽出された IOC(ハッシュ、IP、ドメイン、ミューテックス、レジストリキー)
- ルール名と一致オフセットを含む YARA ルールの一致結果
- 認証情報の露出(発見されたハッシュ、リスクにさらされたアカウント)
主要な概念
| 用語 | 定義 |
|---|---|
| 揮発性証拠 | RAM 内にのみ存在し、システムの電源を切ると失われるデータです。実行中のプロセス、ネットワーク接続、暗号鍵が含まれます |
| プロセスインジェクション | マルウェアが検出を回避するため、正規のプロセスのメモリ空間にコードを挿入する手法です(malfind で検出できます) |
| EPROCESS | プロセスを表す Windows カーネルのデータ構造です。psscan は、アクティブなプロセスリストからリンクが解除された場合でも、これらの構造を検索します |
| VAD(仮想アドレス記述子) | プロセスに割り当てられたメモリ領域を追跡する Windows カーネル構造です。malfind は VAD を調べ、実行可能でありながらファイルに裏付けられていない領域を検出します |
| シンボルテーブル | Volatility 3 がメモリを解析するために使用する、OS 固有のデータ構造です。検出された OS バージョンに基づいて自動的にダウンロードされます |
| PAGE_EXECUTE_READWRITE | 領域が読み取り、書き込み、実行可能であることを示すメモリ保護フラグです。挿入された悪意のあるコードを示す一般的な指標です |
| メモリ常駐型マルウェア | ディスクに永続的なファイルを書き込まず、完全に RAM 内で動作するマルウェアです。そのため、従来のディスクベースのウイルス対策ソフトウェアでは検出できません |
ツールとシステム
- Volatility 3:主要なオープンソースのメモリフォレンジックフレームワークです。シンボル解決を自動化した Python 3 による書き直し版です
- WinPmem / DumpIt / Magnet RAM Capture:Windows システム向けのメモリ取得ツールです
- AVML(Acquire Volatile Memory for Linux):Microsoft のオープンソース Linux メモリ取得ツールです
- YARA:マルウェアのシグネチャと動作ルールに照らしてメモリダンプをスキャンする、パターンマッチングエンジンです
- MemProcFS:メモリを仮想ファイルシステムとして表示し、直感的な閲覧を可能にするメモリ分析ツールです
一般的なシナリオ
シナリオ:メモリ内の Cobalt Strike Beacon の検出
コンテキスト:EDR が不審な名前付きパイプのアクティビティを検出しましたが、発生元を特定できません。分析のため、疑わしいエンドポイントからメモリダンプを取得します。
アプローチ:
windows.pstreeを実行してプロセス階層を特定し、異常な親子関係を見つけますwindows.malfindを実行して、特にsvchost.exeやrundll32.exe内の挿入されたコード領域を検出します- 挿入されたメモリ領域をダンプし、YARA ルールで Cobalt Strike Beacon のシグネチャをスキャンします
windows.netscanを実行して C2 接続を特定し、挿入されたプロセスの PID と照合します- CobaltStrikeParser を使用して Beacon の設定(C2 URL、スリープ時間、ジッター、ウォーターマーク)を抽出します
windows.cmdlineを実行して、エクスプロイト後に実行されたコマンドを特定します
注意点:
- malfind を実行せずにプロセスリストだけを分析する(正規のプロセス内に挿入されたコードを見逃します)
- エンドポイントを隔離する前にメモリを取得しない(EDR による封じ込めがマルウェアの自己削除を引き起こす可能性があります)
- 新しい Windows バージョンで Volatility 3 の自動シンボル解決ではなく、Volatility 2 のプロファイルを使用する
出力形式
MEMORY FORENSICS ANALYSIS REPORT
==================================
Incident: INC-2025-1547
Evidence File: WKSTN-042_20251115_1445.raw
SHA-256: a4b3c2d1e5f6...
OS Identified: Windows 10 22H2 (Build 19045)
Analysis Tool: Volatility 3.2.0
PROCESS ANOMALIES
PID Process Parent Anomaly
3847 update.exe powershell Suspicious executable in Temp directory
5102 svchost.exe explorer Wrong parent (expected services.exe)
--- [hidden] --- Found in psscan but not pslist
INJECTED CODE
PID Process Address Range Protection Finding
5102 svchost.exe 0x00A10000-0x00A14 PAGE_EXECUTE_READWRITE MZ header (PE injection)
NETWORK CONNECTIONS
PID Process Local Foreign State
3847 update.exe 10.1.5.42:49721 185.220.101.42:443 ESTABLISHED
5102 svchost.exe 10.1.5.42:51003 91.215.85.17:8443 ESTABLISHED
YARA MATCHES
Rule: CobaltStrike_Beacon_x64
Match PID: 5102 (svchost.exe)
Offset: 0x00A10240
EXTRACTED IOCS
Hashes: [SHA-256 of dumped injected code]
C2 IPs: 185.220.101.42, 91.215.85.17
C2 Domains: [extracted from beacon config]
Mutexes: Global\MSCTF.Shared.MUTEX.ZRQ