この記事はフォレンジック初心者の筆者が、同じく初心者向けにメモリフォレンジックの概要と、代表的ツールVolatilityの使い方をまとめたものです。
メモリフォレンジックの流れ
事件発生後のメモリフォレンジックは、だいたい次の流れで進めます。
- メモリダンプの取得(現場でRAMを丸ごと保存)
- 解析環境の準備(Volatilityや必要ツールを用意)
- プロファイル情報の取得(対象OSを特定)
- OS情報の調査(バージョンやカーネル情報)
- プロセス解析(不審なプロセスや親子関係を調べる)
- タイムゾーンや時刻情報の取得(時系列分析の基準)
- ネットワーク調査(外部通信先の確認)
- 詳細解析(レジストリ、DLL、コマンド履歴など)
この記事では、③〜⑦の基本操作をVolatilityで行っていきます。
Volatilityとは?
メモリフォレンジックの代表的な解析ツールです。
- オープンソース & 無料
- Windows / Linux / MacOS のメモリ解析に対応
- 豊富なプラグインでプロセス、ネットワーク、レジストリなどを調査可能
- コマンドラインベースで軽量
Volatility 2 と Volatility 3 の違い
項目 | Volatility 2 | Volatility 3 |
---|---|---|
言語 | Python 2(2.7) | Python 3 |
プロファイル指定 | 必須(--profile ) |
不要(自動判別) |
コマンド形式 | volatility <options> <plugin> |
vol <plugin> <options> |
プラグイン互換性 | 豊富だが古いOS中心 | 新しいOS対応が進むがプラグイン数は少なめ |
学習コスト | 比較的低い | コマンド体系がやや変化 |
開発状況 | メンテ終了 | 継続開発中 |
初心者が既存記事や資料を参考に学びたい場合はVolatility 2、
最新OSや将来性を考えるならVolatility 3を選ぶと良いです。
この記事ではVolatility 2を例にします。
基本的な書式(Volatility 2)
volatility -f <メモリダンプファイル> --profile=<プロファイル名> <プラグイン名> [オプション]
例:
volatility -f memdump.raw --profile=Win7SP1x64 pslist
実践 — Volatilityでの調査手順
1. プロファイル情報の取得
まず対象OSのプロファイルを確認します。
volatility -f memdump.raw imageinfo
サンプル結果
Volatility Foundation Volatility Framework 2.6
INFO : Suggested Profile(s) : Win7SP1x64, Win7SP0x64
INFO : Number of Processors : 2
INFO : Time of capture : 2023-08-21 14:35:02 UTC+0000
候補として出た Win7SP1x64
を使用します。
2. OSの調査
カーネルデバッグ情報を表示します。
volatility -f memdump.raw --profile=Win7SP1x64 kdbgscan
3. 不審なプロセスの特定(pstree)
pstree
はプロセスの親子関係をツリー表示します。
マルウェアが explorer.exe
の子プロセスとして潜んでいることもあります。
volatility -f memdump.raw --profile=Win7SP1x64 pstree
サンプル結果
System(4)
smss.exe(228)
csrss.exe(300)
wininit.exe(400)
services.exe(500)
svchost.exe(1120)
svchost.exe(1180)
lsass.exe(600)
explorer.exe(1500)
malware.exe(2340) ← 不審
4. timezoneの調査(hivelist使用)
Volatility 2には timezone
プラグインがありますが、ここではレジストリ解析の流れも紹介します。
- レジストリハイブの場所を調べる
volatility -f memdump.raw --profile=Win7SP1x64 hivelist
- SYSTEMハイブをダンプ
volatility -f memdump.raw --profile=Win7SP1x64 dumpregistry -o 0xfffff8a000024010 -D ./dump/
-
レジストリからタイムゾーン情報を確認
SYSTEMハイブ内の
ControlSet001\Control\TimeZoneInformation
を解析します。
(解析は reg.py
やオフラインレジストリエディタで確認可能)
例:
TimeZoneKeyName : Tokyo Standard Time
Bias : -540
5. 送信元IPの所在地の特定
volatility -f memdump.raw --profile=Win7SP1x64 netscan
サンプル結果
TCP 192.168.1.10:49213 → 203.0.113.45:80 (ESTABLISHED)
TCP 192.168.1.10:49214 → 198.51.100.25:443 (ESTABLISHED)
外部IPを調査:
geoiplookup 203.0.113.45
GeoIP Country Edition: JP, Japan
まとめ
- Volatility 2は情報が豊富で学びやすい
- 調査は プロファイル確認 → OS調査 → pstreeで不審プロセス確認 → timezone解析 → ネットワーク調査 の順が基本
- hivelistを使うと、タイムゾーンや他のレジストリ値も直接取得可能