Windows ShimCache(AppCompatCache)を理解する

読了 1 分

ほとんどのアナリストが ShimCache と出会うきっかけは同じです。チームの誰かが「AppCompatCache を引いてバイナリが入っているか見てみよう」と言い、それが十分に機能するため、このアーティファクトは本来値しない以上の評判を得てしまうのです。私はケースレビューで ShimCache の行について十分な時間議論してきたので、このアーティファクトには確かに価値があると考えています。ただし、それを正しく扱う場合に限ります。実行ログではありません。プロセス監査でもありません。Windows が互換性 shim を発動すべきか判断するために、十分に注視した実行ファイルのリストです。

それがフレーミングです。残りは仕組みの話です。

キャッシュが実際に記録するもの

Application Compatibility Cache(ほぼ常に ShimCache あるいは AppCompatCache と略されます)は SYSTEM ハイブに存在し、最新の Windows では最大約 1,024 件のエントリを保持します。各エントリには、実行ファイルのフルパス、ファイルの $STANDARD_INFORMATION 最終更新時刻、そして(古いバージョンでは)バイナリが実際に実行されたかを示すフラグが含まれます。Windows 10 と 11 ではそのフラグは廃止されました。存在しなかったものとして扱ってください。

Windows は毎回の起動時にキャッシュをメモリ上に構築し、クリーンシャットダウン時にのみディスクに書き出します。BSOD、ハードリセット、ハイパーバイザーレベルでの VM 強制終了は、揮発性メモリにあったエントリをすべて消し去ります。この一点が、「本番でバイナリを見たのに」が「ディスク上のハイブには何もない」になるストーリーの半分を説明します。

保存場所

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

末尾の AppCompatCache はサブキーではなく値です。その中身は単一のバイナリ Blob で、レイアウトは Windows のメジャーリリースごとに変化してきました。XP、7、8、8.1、そして 10/11 ファミリは、すべて異なるスキーマを使用します。オフライン解析では、SYSTEM ハイブ(およびその SYSTEM.LOG1 と SYSTEM.LOG2 トランザクションログ)を取得し、正しいバージョンに対して Blob をデコードする必要があります。本ツールはその単一の SYSTEM ハイブファイルをブラウザ内で解析し、アップロードは一切ありません。ログの再生は行わないため、ハイブが dirty の場合は先に Eric Zimmerman の rla.exe でログを再生してください。

調査員がこれを使う理由

ShimCache が価値を持つのは、それが生き残るからです。攻撃者がバイナリをドロップし、実行し、削除し、Prefetch フォルダを消去しても、ShimCache はフルパスを保持します。次のような場合に強力な存在の証人となります。

  • すでにディスクから消去されたマルウェア。
  • リネームされたシステムバイナリで Living-off-the-Land のペイロードとして使われたもの。
  • ネットワーク共有からステージングされ、ローカルには引き出されなかったツール群。

パス情報を AmCache のハッシュ帰属と組み合わせれば、ファイルがとうに消えていても脅威インテリジェンスに展開できます。

ハマりやすい 3 点

  1. タイムスタンプはファイルの mtime であり、プログラムが実行された時刻ではありません。タイムストンピングはキャッシュが記録する内容を変えます。
  2. エントリは実行の証拠ではありません。Win10/11 のキャッシュには実行フラグそのものがありません。
  3. キャッシュはクリーンシャットダウン時にのみフラッシュされます。ハードリブートは最近のエントリを音もなく破壊します。

各行を仮説として扱ってください。レポートに断定的に書く前に、Prefetch、AmCache、EVTX / Sysmon、または レジストリハイブ で裏付けてください。

次に読むなら

ブログの残りは 2 つのクラスタに整理されています。

ShimCache を理解する

調査で使いこなす