ShimCache はどこに保存され、いつ書き込まれるのか?

読了 1 分

TL;DR. ShimCache は HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache\AppCompatCache に存在します。Windows はセッションごとにメモリ上で再構築し、正常シャットダウン時にのみ SYSTEM ハイブへ書き出します — 強制再起動では最新のエントリが丸ごと失われることがあります。SYSTEM.LOG1 / SYSTEM.LOG2 の再生を忘れずに。

ShimCache に関する事故の多くは、たったひとつの誤解に行き着きます — 「キャッシュはログファイルのように更新され、発生に応じてエントリがディスクへ書かれる」という思い込みです。実際は違います。本稿では、ShimCache が正確にどこに存在し、Windows がいつ書き込むのかを解説します。

ShimCache:メモリ書き込みとディスクへの書き出しのタイミング

レジストリ上のパス

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

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

末尾の AppCompatCache であり、サブキーではありません。データは単一のバイナリ Blob で、その構造は Windows のバージョンごとに異なります(XP、7、8、8.1、10、11 でレイアウトが微妙に違います)。バイナリフォーマットの解説 で現行 Windows 10/11 のスキーマを詳しく扱っています。

オフラインで同じ値を読むには、SYSTEM ハイブを取り出し(C:\Windows\System32\config\ 下のファイルのひとつ)、そこにパーサを向けます。本ツールの Shimcache Parser はまさにこれをブラウザ内で行い、ファイルをどこにもアップロードしません。

「現行」ControlSet のトリック

Windows は実際には複数の ControlSet(ControlSet001ControlSet002、ときにはさらに)を保持しています。任意の時点で、ちょうどひとつが アクティブ であり、HKLM\SYSTEM\Select\Current の値で示されます。CurrentControlSet はアクティブな ControlSet へのランタイムエイリアスです。

オフラインで解析する場合は、

  1. HKLM\SYSTEM\Select\Current(DWORD、通常 1 か 2)を読む
  2. 該当する ControlSetXXX\Control\Session Manager\AppCompatCache\AppCompatCache の値を辿る
  3. Select\Current が読めない場合は ControlSet001ControlSet002 に順次フォールバックする

多くのパーサ(このツールを含む)は、これを自動的に処理します。

いつキャッシュは書き込まれるか

ここが意表を突く点です — システム稼働中、ShimCache は メモリ上 に存在します。Windows が SYSTEM ハイブに ShimCache を書き出すのは、正常シャットダウン時のみ です。したがって、

  • 強制再起動、停電、BSOD、ハイパーバイザ層での VM kill では、まだ永続化されていない 直近のエントリ がすべて失われます。
  • 稼働中システムの reg.exe や RegRipper による生き取りは、以前に永続化された ShimCache を見るだけで、メモリ上で構築中 のものは見えません。
  • メモリフォレンジック(例:Volatility の shimcachemem プラグイン)であれば、失われる前に 現在 メモリ上にあるキャッシュを復元できます。

このタイミングの問題こそ、ハイブのデッドボックス解析が最近の活動を取りこぼしがちな理由であり、調査員が空白を埋めるため AmCache に目を向ける理由でもあります(AmCache は継続書き込みです — ShimCache vs AmCache を参照)。

レジストリのトランザクションログは?

SYSTEM ハイブには、トランザクションログファイル(SYSTEM.LOG1SYSTEM.LOG2)が付随します。これらには、メインのハイブにまだ反映されていない未フラッシュの書き込みが残っていることがあります。堅牢なオフラインパーサは ShimCache を読む前にこれらのログを再生します。独自に解析する場合は、これらを考慮するか、再生する機能を備えたパーサを使用してください。

クイックチェックリスト

  • ShimCache の値:HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache\AppCompatCache
  • アクティブな ControlSet は HKLM\SYSTEM\Select\Current で選択
  • メモリに保持され、正常シャットダウン時のみ書き出し — 最近の活動は AmCache で裏付ける
  • 最新像を得るには、解析前に SYSTEM.LOG* を再生する

さらに読む

関連記事