TL;DR. ShimCache はファイルがディスク上に存在したことを示し、AmCache は実行されたことを示し、SHA-1 でファイルを特定します。ShimCache はクリーンシャットダウン時のみフラッシュされ、AmCache は継続的に書き込まれます。両方とも収集してください — 互いに代替ではなく共同証人です。
ShimCache と AmCache は、Windows のプログラム実行調査で最も頻繁に引用されるレジストリベースのアーティファクトです。一見、互換性があるように見えますが、実際には違います。本稿は、答えたい問いに応じて「どちらを開くべきか」を判断するためのクイックリファレンスです。
概要
| ShimCache | AmCache | |
|---|---|---|
| 場所 | HKLM\SYSTEM\…\AppCompatCache | C:\Windows\AppCompat\Programs\Amcache.hve |
| 容量 | 最大 1,024 エントリ | 数千エントリ、固定上限なし |
| エントリごとの情報 | パス、mtime、(旧版のみ)実行フラグ | パス、SHA-1、サイズ、発行元、インストール日付、その他多数 |
| 書き出しタイミング | シャットダウン時のみ | 継続的(および定期的な間隔) |
| クラッシュ耐性 | なし — 最近のエントリは失われる | あり — すでにディスク上 |
| 最適な用途 | ファイルがディスクに存在したことの証明 | ファイルが実行されたことの証明 + ハッシュによる特定 |
ShimCache が有利な場面
ShimCache は、Windows が互換性のために単に検査しただけの実行ファイルに対してもエントリを保持します。これは強力な性質です:攻撃者が投下して直ちに削除したバイナリでも、ShimCache に痕跡が残る可能性があります。問いが 「このファイルはこのホストに存在したことがあるか?」 であれば、ShimCache が味方になります。
また、ShimCache はファイルの $STANDARD_INFORMATION の mtime を捕捉する唯一の方です。この時刻は実行時刻 ではありません(よくある誤解は 別の記事で取り上げています)が、ファイルのアイデンティティを時間軸に錨付けします。
AmCache が有利な場面
問いが 「このファイルは本当に実行されたのか、また厳密にはどのファイルか?」 であれば、AmCache を見るべきです。各 AmCache エントリは SHA-1 ハッシュ、ファイルサイズ、発行元、インストール日付を保持し、ディスク上のファイルが置き換えられたり消去されたりした後でもバイナリを一意に特定できます。
AmCache は永続性も高いです。Windows はシャットダウン時のみではなく継続的に書き込むため、クラッシュした、あるいは強制再起動されたシステム上の最近の活動は、ShimCache よりも AmCache に残っている可能性が高いです。
一緒に使う方法
実務的には、相互証拠 として扱ってください:
- ShimCache と AmCache 両方 にエントリがあり、パスが一致し、AmCache のタイムスタンプが最近であれば、実行を強く裏付けます。
- ShimCache のみ のエントリは、ファイルが少なくともある時点でディスク上にあったことを示します。実行を主張する前に、補強証拠(Prefetch、AmCache、イベントログ)を探しましょう。
- AmCache のみ で Prefetch も ShimCache もない場合、通常はアクティビティ以降にホストが正常終了していないことを意味します — ShimCache がディスクに書き出されていません。
ShimCache のバイナリレイアウトの技術的詳細は、ShimCache を解析する:Windows 10 と 11 のバイナリフォーマット をご覧ください。インストール不要で今すぐハイブを解析したい場合は、ブラウザ上で完結する Shimcache Parser をお試しください。
さらに読む
- Eric Zimmerman の AppCompatCacheParser — リファレンスとなる C# 実装。
- Velociraptor の
Windows.Registry.AppCompatCacheアーティファクト — ライブシステム収集ロジック。 - ShimCache & AmCache forensic analysis (Mehrnoush) — ケーススタディを伴う詳細な解説。