@port139 Blog

基本的にはデジタル・フォレンジックの技術について取り扱っていますが、記載内容には高確率で誤りが含まれる可能性があります。

Windows XP のプレフェッチ機能

Windows XP/Server 2003 には、アプリケーションの起動を高速化させる目的でプレフェッチ*1機能がありますが、これはフォレンジック調査でも興味深い機能だったりします。

Microsoft Windows XP パフォーマンス
http://www.microsoft.com/japan/technet/prodtechnol/winxppro/evaluate/xpperf.mspx
Windows XPとは何か?18.アプリケーション起動の高速化
http://www.atmarkit.co.jp/fwin2k/special/winxp_over/winxp_over_19.html

簡単に説明すると、XP上でプログラムを実行するとプレフェッチ用のフォルダ(例:C:\WINDOWS\Prefetch)に「実行ファイル名-16進数番号.pf」というファイルが自動的に作成されます。
例えば IE を起動すると以下のようなファイルが作成されます。

IEXPLORE.EXE-27122324.pf

このファイルの作成時刻*2を確認することで、何時そのプログラム用の .pf ファイルが作成されたのかを確認できます。PFファイルは、プログラムを実行したタイミングで(すでに.pfファイルが無ければ)新規に作成され、すでに該当プログラム用のPFファイルが存在する場合には、プログラムの実行時に既存PFファイルの M*3A*4E*5 がその時刻になります。*6
<追記>
16進数部分はプログラム名のハッシュだと“http://blogs.msdn.com/ryanmy/archive/2005/05/25/421882.aspx”に書いてあるのですが、ハッシュ関数が何かとか対象範囲がどうなっているのかはわかりません、最大で128個まで.pfファイルは作成されるようですね。<追記2>
インサイド MS WINDOWS 第4版 上 (マイクロソフト公式解説書)を読んでいたら、.pf ファイルが作成されるまでのタイムラグが約10秒ほどあるということが書かれていたので実験してみる。本では Filemon が使われているのですが、「プロセス追跡の監査」を有効にしてイベントログで時刻を確認してみる。

Notepad.exe-336351A9.pfが新規に作成された場合
イベントログの時刻 7:51:10
MAE の時刻 7:51:20
Notepad.exe-336351A9.pfが存在する場合
イベントログの時刻 7:54:12
MAE の時刻 7:54:22

なるほど10秒ですね〜

*1:「プリ」なのか「プレ」なのか表記が記事によって違うのですが、MSのドキュメントではプレになってるようですね

*2:File Created

*3:Last Written

*4:LastAccessed

*5:Entry Modified

*6:同一のプログラム名だと、16進数番号で区別された .PF ファイルが作成されます

PFファイルの中身

PFファイルの中身はバイナリファイルの為、目視で確認しても意味不明の部分が大半です。しかし、istrings などで Unicode(UTF-16LE) 文字列を抽出すると、いろいろ読み取り可能な文字列を取り出すことができますが、これがなかなか興味深いです。
例えば、外付け USB-HDD から起動したプログラムの PF ファイルの中には以下のような文字列が存在していたりします。

\DEVICE\HARDDISKVOLUME2\

外付けデバイスからプログラムが起動されていたのかなどの調査にも使えそうですね。

NTFS代替データストリームとPFファイル

NTFSの代替データストリーム(ADS)からプログラムを起動した場合でも Prefetch フォルダに.pfファイルが作成されます。例えば、a.txt:notepad.exe を実行した場合、
Prefetch フォルダには以下のファイルが作成されます。

例)A.TXT:NOTEPAD.EXE-1F3C4875.pf

PFファイルの内容(データ)は代替データストリーム上に置かれているので、エクスプローラからは A.TXT だけが見えます。ちなみに、Prefetch フォルダに作成されるファイル名はすべて大文字で統一されるようです。

調査員が読み違えてミスった事例

なかなか使えそうな情報ですが、Prefetch フォルダに置かれたファイルの実行ユーザを調査員が読み違えてしまった事例が紹介されています。

Digital Forensic Readiness: Are You In?
http://www.esecurityplanet.com/best_practices/article.php/3572896

調査員は、犯人と思しき人間が証拠隠滅のためにデフラグを実行したと推測したわけですが、システムが実行していたもので調査員の推測が間違っていたということのようです。
Prefetch フォルダにファイルがあるからといって、必ずしもユーザが実行したものではなく、システムが実行したものも含まれている点に注意が必要つーことですね。
もう少し詳細に検証したスライドが以下にあります。

Wrong Conclusions, Bad Testimony
http://www.techsec.com/TF-2005-PDF/GregKelley.pdf
http://www.techsec.com/html/ForensicsAgenda.html
Evaluating Commercial Counter-Forensic Software(スライド18)
http://www.dfrws.org/2005/proceedings/geiger_counterforensics_slides.pdf

確認は大切ですね。

関連URL

ウイルスファイルが「Prefetch」フォルダ内で発見される
http://esupport.trendmicro.co.jp/supportjp/viewxml.do?ContentID=jp-28565
Windows XP で Prefetcher コンポーネントを無効にする方法
http://support.microsoft.com/?id=307498
フロッピーディスク ドライブに、意図しないアクセスが発生する場合があります
http://support.microsoft.com/kb/892871/ja
CHKDSK拡張子に PF がついたファイルを削除したというメッセージを表示することがある。
http://support.microsoft.com/kb/436341/ja
Pref_ver、Pref
http://www.windows-ir.com/tools.html
Prefetch file metadata
http://windowsir.blogspot.com/2005/07/prefetch-file-metadata.html
5826 » What is the Windows XP Prefetch?
http://www.jsifaq.com/subL/tip5800/rh5826.htm

レイアウト情報(Layout.ini)

Prefetch フォルダには、Layout.ini というテキストファイル(文字コードは UTF-16LE)もあります。このファイルに関する説明がマイクロソフトの資料に記述されています。
Microsoft Windows XP パフォーマンス*1より引用ここから

Windows XP は既定で 3 日に 1 回、部分最適化を実行して、現在の使用に応じてディスク レイアウトを調整します。移動するファイルは Layout.ini ファイルに書き込まれます。このファイルはシステム ルート ディレクトリ下の Prefetch ディレクトリにあります。

引用ここまで。
起動時のパフォーマンスを上げるために、デフラグ時によく使うファイルを最適化するためのファイルのようですが、これはこれで(プログラムファイルのパスなどの)参考になりそうですかね。

More about the Prefetcher
http://windowsir.blogspot.com/2005/03/more-about-prefetcher.html

Googleで検索すると、商用のデフラグツールでも Layout.ini を参照してデフラグするのがあるようですね。