オフラインの ShimCache 解析のために Windows SYSTEM ハイブを取得する方法

読了 1 分

TL;DR. Windows が稼働中は C:\Windows\System32\config\SYSTEM を単純に copy できません — ファイルがロックされているからです。稼働中ホストでは FTK ImagerKAPErobocopy /BVSS スナップショットVelociraptor のいずれかでフォレンジック・コピーを取得するか、マウントしたオフラインディスクから直接読み出します。どの方法でも、SYSTEM.LOG1SYSTEM.LOG2 も一緒に取得してください — これらがないと最新の書き込みが欠落します。

単純コピーが効かない理由

Windows カーネルは OS 稼働中、SYSTEM ハイブを排他アクセスで開き続けます。素の copycpプロセスはファイルにアクセスできません。別のプロセスが使用中です を返します。さらに悪いことに、ロックを回避してバイトを読み取れたとしても、稼働中の OS は次の正常シャットダウンまでレジストリの最新書き込みをメモリに保持します — 最も有用な ShimCache エントリを含めて。

そこで採るべき道は次の 3 つのいずれかです。

  1. 稼働中ホストでロックを綺麗に回避する(生 NTFS / VSS / フォレンジック・コピー)。
  2. マウントされたオフラインディスク・イメージ、または一時停止された VM から直接ファイルを読む。
  3. メモリイメージから In-Memory のコピーを復元する(ディスクに書かれなかったエントリを得る唯一の方法)。

方法 1 — デッドボックス / マウントしたオフラインディスク

電源を落とせる、あるいは読み取り専用でディスクをマウントできる場合、これが最も簡単です。

<ドライブ文字>:\Windows\System32\config\SYSTEM
<ドライブ文字>:\Windows\System32\config\SYSTEM.LOG1
<ドライブ文字>:\Windows\System32\config\SYSTEM.LOG2

3 つすべてをコピーしてください。.LOG1 / .LOG2トランザクションログです。堅牢なパーサーはメインハイブを読む前にこれらを再生するため、未マージの書き込みも見落としません。

方法 2 — 稼働中システム:フォレンジック・コピー

稼働中ホストでは、ボリュームレベルで施錠されたファイルを読める複数のツールがあります。

  • FTK Imager — GUI、無償。「Obtain Protected Files」→「Custom」→ SYSTEM, SYSTEM.LOG1, SYSTEM.LOG2 を選択、外部ディスクへ出力。
  • KAPE — CLI、スクリプト可能。RegistryHives ターゲットで関連ハイブとログを一括取得:
    kape.exe --tsource C: --target RegistryHives --tdest C:\out
    
  • robocopy の /B/Bバックアップモードでファイルを開きユーザー空間のロックを回避します(管理者権限と SeBackupPrivilege は必要)。DFIR ツールが手元にないときの応急策:
    robocopy C:\Windows\System32\config C:\out SYSTEM SYSTEM.LOG1 SYSTEM.LOG2 /B
    
  • VSS スナップショットvssadmin create shadow で特定時点のスナップショットを生成し、そこから読み取ります。整合性のある状態が必要で、システムを止められない場合に有効。

方法 3 — メモリイメージ(最新エントリに最も強い)

ディスク上の SYSTEM ハイブには、直近の正常シャットダウン時に永続化されたエントリしかありません。インシデント以降に正常終了していないホストでは、最新のエントリはメモリ内にのみ存在します。

メモリイメージ(WinPmem、Magnet RAM Capture、AVML)を取得し、Volatility で SYSTEM ハイブを取り出すか、ShimCache を直接読み出します:

# レジストリハイブを取り出す
vol -f memory.raw windows.registry.hivelist
vol -f memory.raw windows.registry.hivedump --offset <addr>

# あるいはメモリから ShimCache を直接読む
vol -f memory.raw windows.shimcachemem

メモリダンプから ShimCache を抽出するで詳述しています。

方法 4 — 大規模なライブ・トリアージ(Velociraptor)

フリート規模での収集には、Velociraptor が直接 NTFS アクセスで施錠ハイブを読み出し、オフライン解析用に返してくれます。Windows.Forensics.AppCompatWindows.Registry.NTUser のアーティファクト群を使うか、Generic.Forensic.LocalHashesaccessor: ntfs を指定してハイブファイルだけ収集してもよいでしょう。

トランザクションログを忘れない

最も多い失敗は、SYSTEM をコピーしたが SYSTEM.LOG1SYSTEM.LOG2 を取り忘れること。保留中の書き込みは次のチェックポイントまでログにとどまり、その差分こそ最も興味深いエントリを含むことがよくあります。堅牢なパーサー(Eric Zimmerman の AppCompatCacheParserShimCacheParser、本ツール)はハイブを読む前にログを再生します — ただしログを渡した場合に限ります。

そして解析へ

SYSTEM ハイブを Shimcache Parser にドロップしてください — すべてブラウザ内で動作し、アップロードは不要、XP から Windows 11 まで全バージョンに対応します。フォーマットの詳細は Windows 10 / 11 のバイナリフォーマット・リファレンスを参照。

さらに読む

関連記事