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

読了 1 分

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

「ShimCache が実行を示している」というのは、Windows インシデントレスポンスで最も高くつく一文です。レポートに書かれます。相手方の弁護士に異議を申し立てられます。アナリストが証言台で mtime がプロセス開始ではない理由を説明することになり、その間部屋の全員が Application Compatibility Cache について望んだ以上のことを学びます。そのアナリストになってはいけません。

ShimCache が実際に記録するもの

正式名称が HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache\AppCompatCache に格納される Application Compatibility Cache は、Windows が互換性 shim を適用すべきかを判断するために検査した実行ファイルを取り込みます。検査は実行ではありません。Windows がバイナリを検査するのは次のような場合です。

  • ユーザーがダブルクリックする。
  • Explorer がフォルダを列挙し、アイコンデータのために PE ヘッダを検査する。
  • AV スキャナ、インデクサ、または EDR がファイルシステムを巡回する。
  • 右クリックの「プロパティ」がバージョンリソースを取得する。
  • システムコールが .exe で終わるパスを解決する。

これらの大半は実行と並行して発生します。一部はそうではありません。攻撃者がドロップし、リネームし、起動せずに削除したバイナリでも、Defender が落ちてくる途中でスキャンしていれば、キャッシュに残る可能性があります。

Windows 10 が奪ったフラグ

古いビルド(XP から Windows 8.1 まで)は各エントリに Executed フラグを埋め込んでいました。多くのアナリストは「yes」を grep して終わらせるよう学びました。Windows 10 はそのフラグを削除しました。Windows 11 でも復活しませんでした。最新のキャッシュはパス、mtime、構造的メタデータを保持します。「これが実行された」と告げるキャッシュ内マーカーは存在しません。

レガシーハイブで訓練し、現在は Windows 10/11 の SYSTEM を読んでいるなら、再校正してください。覚えている「Executed」カラムは消えました。使用に値するすべてのパーサ(Eric Zimmerman の AppCompatCacheParser、Mandiant の Shim Cache Parser、本ツール)はその不在を正直に反映します。モダンなハイブで実行フラグを報告するツールがあれば、それは捏造しています。

フィールドレベルのレイアウトは Windows 10/11 バイナリフォーマット解説 を参照してください。

実行を確認するもの

ShimCache のヒットは仮説として扱ってください。そのうえで、プロセス作成を実際に記録する証拠を探しに行きます。

  • Prefetch. C:\Windows\Prefetch\*.pf ファイルはワークステーション SKU でプロセス開始の約 10 秒以内に書き込まれます。実行回数、直近 8 回の実行時刻、ロードされたモジュール。ファイルが存在すれば、バイナリは実行されました。Prefetch parser はフォーマットと無効化のケースを説明しています。
  • AmCache. Amcache.hve は SHA-1 ハッシュと明示的な初回実行タイムスタンプを保持し、継続的に書き込まれます。AmCache parser にフィールドガイドがあります。
  • EVTX / Sysmon. Security 4688(コマンドライン監査が有効な場合)と Sysmon Event ID 1 は、得られる中で最も忠実度の高い記録です。EVTX parser がトリアージワークフローをカバーします。
  • BAM / DAM. HKLM\SYSTEM\CurrentControlSet\Services\bam\State 配下のユーザーごとの最終実行時刻。読み取りが容易で、犯罪的に過少利用されています。
  • UserAssist. Explorer による対話的起動のみ、ROT13 でエンコードされた名前。「ユーザーがダブルクリックしたか?」には有用ですが、「バイナリが実行されたか?」には不適です。

相互参照のパターンは プログラム実行アーティファクトリファレンス にあります。

レポートでの表現

悪い例:「ShimCache は 2026-04-11 14:33:21 UTC に mimikatz.exe が実行されたことを示している。」

良い例:「ShimCache はファイル C:\Users\Public\mimikatz.exe を $STANDARD_INFORMATION mtime 2026-04-11 14:33:21 UTC で記録している。Prefetch エントリ MIMIKATZ.EXE-A1B2C3D4.pf は 14:34:02 UTC に 1 回の実行を示している。AmCache の SHA-1 は既知の mimikatz ビルド 2.2.0 と一致する。」

2 番目の文は反対尋問にも耐えます。1 番目はそうではありません。

ブラウザから出ずにハイブを解析する

SYSTEM ハイブを Shimcache Parser にドロップしてください。すべてクライアントサイドで動作します。アップロードはなく、規制環境や顧客の案件から来たハイブにとってはこれが重要です。

さらに読む

  • Mandiant の Caching Out the Val:このアーティファクトの最初の公開リバースエンジニアリング。
  • Eric Zimmerman の AppCompatCacheParser:その出力スキーマが事実上の業界標準となっているリファレンス C# パーサ。
  • Ø Security の Windows 10/11 AppCompatCache deep dive:削除されたフラグについて詳細に扱っています。

関連記事