ShimCache vs Prefetch:プログラムが実行されたことをどちらが証明するか

読了 1 分

TL;DR. Prefetch は実行回数と実行時刻を伴う本物の実行証拠です。ShimCache はファイルが存在し検査されたことしか証明しません。「実行されたか、いつか?」が必要なら、まず Prefetch を見ます。Prefetch が無効化または消去されていれば、ShimCache が存在についての予備証人になります。

ShimCache と Prefetch は、どちらも「Windows ホスト上のプログラム」を浮かび上がらせるため、絶えず比較されます。しかし両者は同じ種類の証拠ではなく、互換とみなすと誤った結論を生みます。以下が直接比較です。

概要

ShimCachePrefetch
場所HKLM\SYSTEM\…\AppCompatCacheC:\Windows\Prefetch\*.pf
何を証明するかファイルが存在した/検査されたファイルが実行された
実行回数なしあり
実行タイムスタンプなし(ファイル mtime のみ)あり — 直近 8 回の実行時刻
参照ファイルなしあり — 読み込まれた DLL・データファイル
書き込み時点クリーンシャットダウン時のみ実行後 約 10 秒以内
サーバーでの既定有効しばしば無効
容量最大 1,024 エントリ1,024 個の .pf(Win8 以降)

Prefetch が勝る点

Prefetch はより強力な実行アーティファクトです、以上。各 .pf は最終実行時刻(Windows 8 以降は最大 8 回)、総実行回数、プロセスが読み込んだファイル一覧を提供します。これは「この binary はこれらの時刻に実行された」と断言するのに十分です — ShimCache には決してできないことです。その唯一のタイムスタンプはファイルの最終更新時刻であり、実行時刻ではないからです。

ShimCache が勝る点

Prefetch には致命的な弱点があります。サーバー、SSD 向けに調整されたイメージ、そして攻撃者によって頻繁に無効化されます(EnablePrefetcher = 0)。クリーンアップツールにより能動的に削除もされます。一方 ShimCache は常に有効で、実行される前に投下され削除された binary すら記録できるほど鋭敏です。Prefetch が空のとき、ShimCache はなお**「このファイルはこのホストに触れたことがあるか?」**にしばしば答えます — その推論をどこまで押せるかはShimCache はプログラムが実行されたことの証明になるか?を参照。

一緒に使う方法

  • 両方あり、パス一致: 強力な実行証拠。Prefetch の実行時刻をイベントタイムラインに、ShimCache の mtime はファイル同一性の固定にのみ使う。
  • Prefetch のみ: 実行は証明済み。ShimCache は単にまだフラッシュされていないだけかもしれません(シャットダウン時のみ書き込み — ShimCache の保存場所参照)。
  • ShimCache のみ: ファイルは存在し検査された。裏付けなしに実行を主張しないこと — AmCache、BAM、イベントログを収集する(完全な対応表はこちら)。
  • どちらもないが実行を疑う: アンチフォレンジックを探す。Prefetch の削除と ShimCache フラッシュの欠如は、それ自体が所見であり、ShimCache アンチフォレンジックで扱っています。

ShimCache 側を何もインストールせずに読むには、SYSTEM ハイブを Shimcache Parser にドロップしてください — すべてブラウザ内で完結します。

さらに読む

関連記事