ShimCache はプログラムが実行されたことの証明になるか?

読了 1 分

TL;DR. いいえ。ShimCache のエントリは Windows がそのファイルを 検査した ことを示すに過ぎず、通常は実行を伴いますが必ずではありません。Windows 10/11 ではキャッシュ内の実行フラグは完全に廃止されました。Prefetch、AmCache、またはプロセス作成イベント(Security 4688 / Sysmon 1)で実行を確認してください。

「ShimCache が示しているから実行された」は、インシデント対応で最もよく使われる近道のひとつであり、同時に、法廷で調査員を窮地に追いやれるほど誤りに導く頻度が高い言い回しでもあります。本稿では、「ShimCache のエントリはプログラムが実行されたことの証明になるか?」という問いに丁寧に答え、代わりに何をすべきかを示します。

ShimCache が実際に記録するもの

ShimCache(正式には Application Compatibility Cache / AppCompatCache)は、Windows が 検査した 実行ファイル、典型的には互換性シムを適用するか判断するために調べた実行ファイルのエントリを保持します。検査することは、実行することと同じではありません。Windows は次のような場合にもファイルを検査します。

  • ユーザーがダブルクリックする(多くの場合実行に至りますが、必ずしもではない)
  • エクスプローラがディレクトリを列挙してバイナリを点検する
  • ツールがファイルシステムをスキャンする(AV、インデクサ、セキュリティエージェント)
  • 右クリック「プロパティ」など同様のシェル動作でファイルが開かれる

これらの大半は実行と同時に起こりますが、関係は統計的であって論理的ではありません。攻撃者が投下して実行せずに削除したバイナリでも、システム上の何かがそれを 触った ために ShimCache に出現する可能性があります。

重要な Windows 10 / 11 の変更点

旧バージョンの Windows では、ShimCache の各エントリにバイナリが実行されたときに立てる Executed フラグがありました。このフラグは「実行されたか?」を判断する大まかなシグナルとして広く使われていました。

Windows 10 / 11 ではこのフラグが 削除されました。現行の ShimCache には、実行が起きたことを示すキャッシュ内マーカーはありません。旧フラグを信用していた人も、Windows 現行版に踏み込んだ瞬間にその前提を捨てる必要があります。

現行の ShimCache エントリがどのフィールドを公開するかは、バイナリフォーマットのリファレンス でオフセットごとに辿れます。

実行を確認する方法

ShimCache のヒットは 仮説 として扱い、実行を実際に記録するアーティファクトで裏付けてください。

  • Prefetch (C:\Windows\Prefetch\*.pf) — プロセス起動時に書き出され、再起動を越えて永続化します。一致する Prefetch ファイルは、実行の強い証拠です。
  • AmCache (Amcache.hve) — 実行・インストール済みプログラムを SHA-1 ハッシュ付きで記録する別個のレジストリハイブで、ファイルを一意に特定できます。(なぜ両方?ShimCache vs AmCache を参照
  • Security / Sysmon イベントログ — プロセス作成イベント(4688、Sysmon 1)は得られる中で最も高精度の実行証拠です。
  • UserAssist、BAM/DAM、RecentApps — レジストリベースの追加的な実行シグナル。

プログラム実行アーティファクトのリファレンス には、各アーティファクトが何を捕捉し、実際にどれほど信頼できるかをまとめています。

まとめ

ShimCache のエントリが示すのは、Windows がある特定のファイルを 覗いた 事実です。これは「存在」の証明としては強力な手掛かりですが、「実行」の証明ではありません。プログラムが実行されたと主張するためには、ShimCache を Prefetch、AmCache、あるいはプロセス作成ログと組み合わせ、手元の証拠に見合った言葉で結論を書きましょう。

SYSTEM ハイブの ShimCache をすぐに解析するなら、Shimcache Parser にドロップしてください。すべてブラウザ内で完結し、ファイルはページの外に出ません。

さらに読む

関連記事