mcpField
C
conducting-memory-forensics-with-volatility

conducting-memory-forensics-with-volatility

github.com/mukul975セキュリティ35.2k129 回インストール8 週間前に更新
リポジトリ

conducting-memory-forensics-with-volatility について

メモリイメージ内の揮発性証拠を調べる、インシデント対応担当者やフォレンジック分析者向けの Volatility 3 スキルです。プロセス、ネットワーク接続、コードインジェクション、認証情報を分析します。ディスクイメージやファイルシステムの調査は対象外です。

主な機能

  1. 01OS とシンボル情報の特定
  2. 02プロセス一覧とツリーの分析
  3. 03現行および最近のネットワーク接続の抽出
  4. 04プロセスインジェクションとメモリ上のマルウェア検出
  5. 05認証情報とメモリアーティファクトの抽出
  6. 06構造化されたフォレンジックレポートの作成

活用シーン

  1. 01メモリ上だけに存在するマルウェアの調査
  2. 02不審なプロセスインジェクションやルートキットの確認
  3. 03プロセスと C2 接続の関連付け
  4. 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 と一緒にインストールされる参考資料やスクリプト。

LICENSE
references/
api-reference.md
scripts/
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 が不審な名前付きパイプのアクティビティを検出しましたが、発生元を特定できません。分析のため、疑わしいエンドポイントからメモリダンプを取得します。

アプローチ:

  1. windows.pstree を実行してプロセス階層を特定し、異常な親子関係を見つけます
  2. windows.malfind を実行して、特に svchost.exe や rundll32.exe 内の挿入されたコード領域を検出します
  3. 挿入されたメモリ領域をダンプし、YARA ルールで Cobalt Strike Beacon のシグネチャをスキャンします
  4. windows.netscan を実行して C2 接続を特定し、挿入されたプロセスの PID と照合します
  5. CobaltStrikeParser を使用して Beacon の設定(C2 URL、スリープ時間、ジッター、ウォーターマーク)を抽出します
  6. 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

コメント