痕跡は消せない:Prefetchファイルが暴く「死角」のフォレンジック・アーキテクチャ
インシデントレスポンスの現場において、攻撃者は常に「ログの消去」という古典的かつ有効な一手に出る。イベントログをクリアし、MFTを改ざんし、タイムスタンプを偽装する。だが、Windowsの深い階層に潜む「Prefetch(プリフェッチ)」という存在を忘れている攻撃者は多い。
Prefetchファイルは、アプリケーションの起動高速化のためにOSが生成する最適化データだが、フォレンジックの観点から見れば、それは「実行プロセスの足跡」そのものだ。今日は、この泥臭いアーティファクトを、高度な脅威ハンティングの文脈でどう活用するかを論じる。
Prefetchファイルが保持する「攻撃の確証」
Prefetchファイル(C:\Windows\Prefetch)には、単なるファイル名以上の情報が刻まれている。
- 実行回数(Execution Count): 単発のテスト実行か、定常的なC2通信のビーコンか。
- 最終実行時刻: 攻撃のタイムラインの起点。
- ロードされたDLLリスト: 攻撃者がどのライブラリを悪用し、どのような権限昇格やエクスプロイトを実行しようとしたか(例:
wininet.dllの頻繁なロードとC2通信の相関)。 - 関連ファイルパス: 実行ファイルがどのディレクトリから呼び出されたか。
特に、svchost.exeやrundll32.exeといった正規プロセスに偽装した悪意あるバイナリが、どのDLLを読み込んだかを特定することは、EDRが検知できなかった「ファイルレス攻撃」の残滓を追跡する上で決定的な証拠となる。
Prefetch解析の自動化:Pythonによる抽出ロジック
商用の解析ツールを使うのも一つの手だが、真のフォレンジック・エンジニアは、独自のパースロジックを持つべきだ。以下は、Prefetchファイル(拡張子 .pf)から必要最小限のメタデータを抽出するための簡易的な構造解析の概念コードである。
import struct
import os
# Prefetchファイルは最初の数バイトがヘッダー構造になっている
# Windowsのバージョンによって仕様が異なるが、基本構造は以下の通り
def parse_prefetch_header(file_path):
with open(file_path, 'rb') as f:
data = f.read()
# 0x48バイト目から実行回数が格納されている(Windows 8/10/11共通仕様)
# リトルエンディアンで4バイト読み込み
exec_count = struct.unpack('<I', data[0x48:0x4c])[0]
# 0x60バイト目からは、最後に実行された時刻がFILETIME形式で格納されている
# 1601年1月1日からの100ナノ秒単位のカウント
last_run_time_raw = struct.unpack('<Q', data[0x60:0x68])[0]
return {
"execution_count": exec_count,
"last_run": last_run_time_raw
}
# 使用例: 指定したディレクトリ内の全PFをスキャンする
# 実際の運用では、これにDLLパス抽出ロジックを統合し、
# 異常なパス(Temp配下等)からのロードをアラートさせる
なぜこれが「耐量子時代」のセキュリティにも重要なのか
現在、我々は耐量子暗号(PQC)への移行期にあり、通信プロトコルの脆弱性や暗号実装の不備ばかりが議論されている。しかし、攻撃の本質は「エンドポイントの実行制御」に帰結する。
仮にプロトコル層を強固にしても、攻撃者がメモリ上でペイロードを構築し、正規プロセスを悪用する攻撃(Process Hollowing等)を防げなければ意味がない。Prefetch解析は、こうした「低レイヤのメモリ挙動」と「OSレベルの実行制御」の隙間を埋めるための不可欠な監査ログだ。
特に、生成AIを用いた自動化攻撃が主流となる近未来において、プロンプトインジェクションにより出力された難読化スクリプトが、どのコンテキストで実行されたのかを突き止めるには、PrefetchのようなOS側の物理的アーティファクトが唯一の「動かぬ証拠」となる。
防衛のアーキテクチャ設計への提言
テックリードとして現場に望むなら、以下の実装を推奨する。
1. Prefetchファイルの集中管理: 各エンドポイントの C:\Windows\Prefetch を、SIEMへ定期的にバックアップ・ログ転送する仕組みを構築せよ。
2. 異常行動の相関分析: svchost.exe が通常読み込まないDLL(例: wer.dll 以外の外部ライブラリ)をロードしたログと、Prefetchの実行回数の急増を突き合わせる。
3. ガードレイルの適用: PowerShellやWMIによる「ファイルレス」な実行を許容する環境であっても、OSが生成するPrefetchの整合性をトリガーにした隔離フローを自動化すること。
セキュリティとは、最新の暗号理論を語るだけではない。泥臭いファイルシステムの末端にまで目を光らせ、攻撃者が「消したつもり」の痕跡を拾い上げる。その執念こそが、組織を侵害から救う最後の防壁となる。
次回の調査では、このPrefetchデータに加えて、Shimcache(AppCompatCache)やAmcacheを組み合わせた多次元的なタイムライン生成について深掘りしよう。デジタルフォレンジックの世界に、偶然はない。すべては記録されているのだ。
コメント