Windows ShimCache(AppCompatCache)を正しく理解する

読了 1 分

Windows の ShimCache(別名 Application Compatibility Cache / AppCompatCache)は、現代の Windows インシデント・レスポンスで最も頻繁に参照されるアーティファクトの一つです。同時に、最も誤解されているアーティファクトの一つでもあります。本稿では、実際に何を記録するのか、どこに存在するのか、そして調査員がどう解釈すべき(あるいはすべきでない)かを短く解説します。

ShimCache が記録するもの

Windows は実行ファイルに互換性シムを適用すべきか判断する際に検査を行い、その検査内容を ShimCache に記録します。1 システムあたり最大 1,024 件のエントリが保持され、それぞれに少なくとも次の情報が含まれます。

  • 実行ファイルの 完全パス
  • ファイルの $STANDARD_INFORMATION 最終更新タイムスタンプ
  • そして古いバージョンの Windows では、ファイルが実行されたかを示すフラグ

このキャッシュは稼働中は揮発性メモリに保持され、シャットダウン時にのみ レジストリへフラッシュされます。このタイミングは重要です。強制再起動や電源を落とした VM では、最近のエントリが丸ごと失われる可能性があります。

保存場所

ShimCache は SYSTEM ハイブの次の場所に存在します。

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache\AppCompatCache

値は単一のバイナリ Blob ですが、その構造は Windows のバージョンごとに異なります(XP、7、8、8.1、10、11 でレイアウトが少しずつ違います)。オフラインで解析するには、値を抽出して正しいスキーマで復号する必要があります。本ツールがブラウザ内で完結して行うのは、まさにこの処理です。ファイルのアップロードは一切ありません。

フォレンジックにおける価値

ShimCache は主に プログラムの存在 を示すために使われます。つまり、ある時点でその特定のバイナリが対象ホストのディスク上に存在していた、という事実です。これは次の場面で役立ちます。

  • ファイルが消去された後でもマルウェアの存在を立証する
  • Prefetch や AmCache から構築した実行タイムラインを補強する
  • EDR や Sysmon テレメトリの所見を裏付ける

気をつけたい 3 つの落とし穴

  1. タイムスタンプはファイルの mtime であり、実行時刻ではありません。 タイムスタンプを保ったままコピーされた実行ファイルは、元の mtime をそのまま表示します。
  2. エントリの存在は実行の証拠ではありません。 Windows 10 / 11 ではキャッシュ内の実行フラグが完全に廃止されました。実行を主張するなら、Prefetch・AmCache・イベントログと組み合わせてください。
  3. キャッシュは埋まり、古いエントリを追い出し、シャットダウン時にフラッシュされます。 ディスクに書き出されなかった直近のエントリは単純に失われます。

慎重に扱い、他のアーティファクトで裏付ければ、ShimCache はシグナルの高いピボット点です。各エントリは「確認すべき仮説」として扱い、結論として鵜呑みにしないでください。

次に読むなら

さらに踏み込みたい方へ。ブログは大きく 2 つのクラスタに分かれています。

ShimCache を理解する

調査で使いこなす