PR 本記事には広告(Amazonアソシエイト・もしもアフィリエイト・A8.net等)が含まれます。掲載情報の正確性には努めていますが、商品の詳細は必ずリンク先で最新情報をご確認ください。
CTF・セキュリティ学習

【メモリForensics編】Volatilityで「今この瞬間」を切り取る|CTF思考フレームワーク #43

かも次郎とアンペンが「メモリForensics」を解説するマスコットイラスト
安全に生きたい編集部

こんにちは、アンペンです!

今回はフォレンジック4領域のうち、最も揮発性が高いメモリフォレンジックを扱います。電源を切ると消えてしまう代わりに、『今この瞬間に何が起きているか』がそのまま残っている貴重な領域です。

定番ツールVolatilityを使い、メモリダンプから何が分かるかを整理しましょう。

メモリの中って、ファイルみたいに『開いて見る』ことできるの?

動いてるPCのメモリをダンプ(=丸ごとコピー)して、Volatilityで構造を読み解くんだ。プロセス一覧・ネット接続・認証情報まで取れる。

前回のディスクが“過去の記録”なら、今回のメモリは“今この瞬間の生中継”です。動いているPCのメモリには、今まさに実行中のプログラム、つながっている通信、入力されたパスワードまで——その瞬間のすべてが詰まっています。ただし、電源を切ればすべて消える。だから最優先で“写真を撮る”。今日はその撮り方と読み解き方を見ていきます。

まず結論

メモリには『今動いているプロセス・ネット接続・認証情報・暗号鍵・Fileless攻撃の痕跡』が残ります。揮発性が高いため最優先でダンプし、Volatilityで構造を読み解くのが定石です。守りはCredential Guard等で『そもそも認証情報がメモリに残らないようにする』ことが効きます。

この記事で分かること

  • メモリに残る情報の種類
  • メモリダンプの取得手順(LiME / WinPmem)
  • Volatilityの代表プラグイン(pslist/pstree/netstat/malfind/lsadump)
  • 守る側の対策(Credential Guard / LSA Protection)
難易度:中級向け 所要時間:12分 体験:VMでダンプ→Volatility おすすめ:#42の後

📖 はじめてのWebセキュリティ #43|メモリForensics編
Volatilityでプロセスと認証情報を抜き出す手法を扱います。 シリーズ一覧を見る →

⚠️ 大事なお約束
他者の端末からメモリダンプを取得することは、業務上の権限や法律に違反する可能性があります。CTFや自分の検証環境のみで確認してください。

メモリは『今この瞬間』の写真

ディスクが『過去の蓄積』だとすれば、メモリは『今この瞬間』のスナップショットです。電源を切ると消えるため、インシデント対応では最優先で確保すべき領域です。

取れる情報の質も濃く、ディスクには残らないFileless攻撃(ファイルを残さずメモリ上だけで動くマルウェア)も、メモリなら捕まえられることがあります。

ここがメモリ調査の“切り札”になる場面です。最近の高度なマルウェアには、『ファイルをディスクに一切残さず、メモリの中だけで動く』タイプがあります(Fileless攻撃)。ディスクをいくら調べても、そこには何も無い。まるで足跡を残さない幽霊のようです。でも、メモリには“今動いている”姿がそのまま映っている。ディスク調査では見えない相手も、メモリなら現行犯で捕まえられる——これがメモリフォレンジックの強みです。

図解:メモリから取れる情報

メモリには、OSが管理する『プロセス情報』『ネット接続』『認証情報のキャッシュ』『開いているファイルハンドル』など、膨大な情報が残っています。

メモリがこれほど情報の宝庫なのは、“動いている状態そのもの”だからです。ディスクに保存されたファイルは、いわば冷凍保存された食材。一方メモリは、まさに調理中のキッチン——どの鍋に何が入っていて、誰が何を作っているかが一目で見える。プロセスも、通信も、入力された秘密も、“使っている最中”の生の姿でそこにある。だからこそ濃い情報が取れる反面、火を止めた(電源を切った)瞬間に消えてしまうわけです。

メモリダンプから取得できる情報をプロセス・ネット接続・認証情報・隠れたコードの4カテゴリで示した図解
図1:メモリから取れる4種類の情報(プロセス・ネット・認証・注入コード)
📸 たとえるなら、現場の瞬間写真

ディスクが防犯カメラの長時間録画なら、メモリは現場で撮った1枚の写真です。動きは止まっているけれど、その瞬間に『誰がどこで何を持っていたか』がすべて写っています。電源(=シャッターを閉じる)前に撮らないと、永遠に失われます。

電源を切る前にメモリの状態を瞬間写真として撮影するたとえを示したイラスト
図2:電源を切る前に『瞬間写真』を撮る – メモリは揮発性

ここで覚える用語:メモリダンプ
稼働中システムの物理メモリ(RAM)の内容を、丸ごとファイルに書き出したものです。サイズは搭載RAMと同じ(8GBなら8GB)。取得には専用ツール(Linux: LiME、Windows: WinPmem / DumpIt 等)を使います。仮想マシンなら、ハイパーバイザのスナップショット機能でもメモリを保全できます。

『ダンプ』という言葉は、要するに“動いている脳みそを、まるごとそっくりコピーする”こと。生きたまま、考えている内容ごと写し取るイメージです。ただし注意点が一つ——コピーを取る作業自体も、少しだけメモリを使います。つまり“観察すると、観察対象が少し変わる”。だから完璧は望めず、『取れるうちに、なるべく現場を荒らさず素早く取る』のが現実的な作法になります。

Volatilityで構造を読み解く

代表プラグインと使いどころ

Volatility(現行はVolatility3)は、メモリダンプを食わせるとOSのデータ構造を解析してくれるツールです。代表的なプラグインを覚えておきましょう。

  • pslist / pstree:プロセス一覧と親子関係(『explorer.exeから起動したcmd.exe』など)
  • netstat / netscan:ネットワーク接続(C2サーバへの接続が見える)
  • malfind:怪しいメモリ領域(注入コードの兆候)を検出
  • cmdline / consoles:実行されたコマンドライン
  • filescan / dumpfiles:メモリ上にあるファイルハンドル・キャッシュ
  • lsadump / hashdump:LSASSプロセスから認証情報を抽出

『プロセスの親子関係』は特に重要で、本来あり得ない親子関係(例:winword.exe → powershell.exe)はマクロ攻撃の典型的なサインです。

この『親子関係』、フォレンジックでは家系図のように使います。プログラムは、普通“決まった親”から生まれます。たとえばWord(winword.exe)が突然PowerShellという“子”を産んだら?——Wordが文書を開いてプログラムを動かすなんて、本来ありえません。これは『悪意あるマクロが仕込まれた文書を開いてしまった』典型的なサインです。誰が誰を起動したか、その家系図のおかしさが、攻撃をあぶり出します。

稼働中PCからメモリダンプを取得しVolatilityで解析して発見・報告に至る4ステップのパイプライン図
図3:稼働PC→ダンプ→Volatility解析→発見・報告のパイプライン

『認証情報がメモリに残る』問題

WindowsのLSASSプロセスには、ログイン中のユーザーの認証情報(NTLMハッシュ・Kerberosチケット等)がキャッシュされます。攻撃者がメモリにアクセスできれば、これを抜き出して横展開(Lateral Movement)に使えてしまいます。

これがMimikatzなどのツールがやっていることで、フォレンジック側もlsadump系プラグインで同じ情報を取得できます。

ここで面白い(そして示唆的な)のは、攻撃ツールのMimikatzと、フォレンジックのlsadumpが、“同じ場所から同じものを取っている”ということです。攻撃者は盗むために、調査員は調べるために、どちらもLSASSのメモリから認証情報を取り出す。道具の善悪は、使い手と目的で決まる——セキュリティを学ぶうえで、何度も出会う大事な感覚です。だからこそ、こうした技術は必ず自分の環境の中だけで試す、という一線が重要になります。

この回も手を動かすのがいちばん。自分のVMでいくつかプログラムを立ち上げ、メモリをダンプして、Volatilityでプロセス一覧を眺めてみましょう。「さっき開いたブラウザ、ちゃんと写ってる!」という体験が、理解を一気に深めます。対象は必ず自分のVMやCTFだけ。他人のPCのメモリを無断で抜くのは厳禁です。

CTFでやってみよう:Volatilityで侵入を再構成

やってみよう / 自分の環境・CTFのみ

自分のVMでメモリダンプを解析する

目的は『メモリから何が見えるか』を体感することです。

  1. 検証用VMを起動し、複数プロセス(ブラウザ・cmd・powershell等)を立ち上げる
  2. WinPmem / DumpIt(Windows)またはLiME(Linux)でメモリをダンプ
  3. Volatility3windows.pslistwindows.netstat を実行
  4. プロセス親子関係を pstree で確認(怪しい親子はないか?)
  5. 余裕があれば malfind で注入コードの検出を試す
他人のPCや本番サーバから無断でメモリダンプを取らないこと。検証は必ず自分の隔離環境で行ってください。

守る側の発想は、これまでと少し違います。“消える前に撮る”は調査側の話。守る側は、その逆を狙います。

メモリに認証情報が残るのが問題なら、残らないようにはできないの?

まさにそこを狙うのが現代の守りなんだ。#36でも出たCredential Guardは、認証情報をOS本体から切り離した“隔離部屋”に置く仕組み。だから、攻撃者がメモリを抜いても、肝心の鍵束はそこに無い。さらにLSA Protectionで、そもそもLSASSのメモリに“手を伸ばす”行為自体をブロックする。調査側にとっては撮りたい写真でも、守る側にとっては“最初から写したくない秘密”。残さなければ、抜かれようがないんだよ。

守る側の対策:『そもそも残らないようにする』

メモリに認証情報が残らない設計が、近年のWindowsで強化されています。

平時にできるメモリ防御
  • Credential Guardを有効化(LSASS資格情報を仮想化で隔離)
  • LSA Protection(RunAsPPL)でLSASSを保護プロセス化
  • EDRでLSASSへのハンドル取得を監視・ブロック
  • 管理者ログオン後のキャッシュ無効化(GPO)
  • 定期的にメモリ保全演習(ダンプ→Volatility読み解き)を実施
  • クラウドVMはハイパーバイザのスナップショットで取得可能か確認

『電源を切ると消える』だから先に撮るんだね。

そう。だからメモリは最優先。次回はネットワークフォレンジックを扱うよ。pcapで通信を読み解いていく。

ここまでをひと言で言うと、メモリフォレンジックは『消える前に撮り、構造で読む』。揮発性が高いぶん最優先で確保し、Volatilityでプロセスの家系図や通信、注入コードを読み解く。そして守る側は“そもそも秘密をメモリに残さない”設計で応じる。調査と防御、両方の視点を持てると、メモリという領域が一気に立体的に見えてきます。

まとめ:『ダンプ→Volatility→構造解析』

今回のポイント
  • メモリは揮発性最高、最優先で保全
  • Volatilityでプロセス・接続・認証情報・注入コードを抽出
  • プロセスの親子関係は攻撃検知の鍵
  • 守りはCredential Guard / LSA Protection / EDRで残さない設計

今日の持ち帰りは『メモリは、最優先で撮る一枚の写真』です。ディスクと違って、ためらっている間に消えてしまいます。だから侵入が疑われたら、慌てて再起動せず、まずメモリを保全する。そして守る側は、その写真に“秘密が写り込まない”ようにしておく。撮る側と撮らせない側、両方の準備が、いざという時に効いてきます。

次回はネットワーク領域、pcap解析でC2通信や情報窃取の足跡を読み解いていきます。

次に読みたい記事

参考資料

記事URLをコピーしました