攻撃者は ShimCache を消せるか?アンチフォレンジックと検出

読了 1 分

TL;DR. 攻撃者が ShimCache に対抗する主な手段は、クリーンシャットダウンを避けることです(書き出されない)。レジストリの直接編集はたいてい Blob を不正な状態にします。改ざんの兆候は、異常に短いキャッシュ、定常に存在すべき Windows バイナリの欠落、エントリサイズの異常、メモリとディスクの食い違いです。

ShimCache はほとんどの Windows アーティファクトより改ざんが難しいですが、無敵ではありません。本稿では攻撃者が実際に試す手段、それらの大半が痕跡を残す理由、そして分析中に改ざんを検出する方法を整理します。

攻撃者のアンチフォレンジック・ツールキット

1. フラッシュ前のハード再起動。 ShimCache に対する最もきれいな「アンチフォレンジック」は、Windows にそれを書き出す機会を与えないことです。攻撃者がハード電源断(あるいはハイパーバイザ層での VM kill)を強行すれば、そのセッションのメモリ内 ShimCache は単純に失われます。ディスク上のハイブには 前回の 正常シャットダウンで書き出された分が残ります。仕組みは いつキャッシュは書き込まれるか を参照。

2. レジストリ値 Blob の直接編集。 特権を持つ攻撃者は HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache\AppCompatCache を上書き可能です。理論上は特定のエントリを除去できますが、バイナリ・レイアウト は素朴な編集を許さない複雑さがあるため、雑な編集は Blob を不正な状態にすることが普通です。

3. オフラインでの SYSTEM ハイブ差し替え。 攻撃者がシステムをオフラインにできるなら、ハイブ・ファイルを差し替え得ます。日和見的な侵入では稀ですが、国家関与のケースでは見られます。

4. バイナリのタイムスタンプ偽装。 ShimCache は $STANDARD_INFORMATION の mtime を保存するため、Windows が検査する前にバイナリのタイムスタンプを偽装すれば、キャッシュ上のタイムスタンプもずれます。ShimCache 自体が嘘をついているのではなく、捕捉したメタデータが先に改ざんされているのです。

5. AmCache と Prefetch の消去。 補強アーティファクトを知る攻撃者はそれらも消去し、ShimCache を孤立した証人として残し、実行証明の記事 で述べた理由で却下されることを期待します。

検出の兆候

改ざんを疑う場合、次のサインを探します。

  • 異常に短い ShimCache。 Windows は通常使用で約 1,024 件までキャッシュを満たします。数日稼働しているシステムで数件しかない Blob は、改ざんを強く示唆します。
  • 常駐エントリの欠落。 多くの ShimCache に高い確率で現れる Windows のバイナリ(バージョン依存:シェル、スケジュールタスクのヘルパー、Windows Update 関連)があります。利用された端末でそれが欠けていれば疑わしいです。
  • 不整合なエントリ・サイズ。 途中でパースに失敗し、残りバッファが 0 で埋められているか乱雑になっている Blob は、雑な編集の古典的な指標です。Shimcache Parser は明示的なエラーとして表面化します。
  • メモリ / ディスクの乖離。 メモリから取り出した ShimCache(手順)とディスク上のハイブを比較してください。メモリにあってディスクにないエントリはハード再起動を示唆しますが、ディスクにあって同じスロットがメモリでは異なる(パスや mtime が違う)場合、ハイブへの書き込みが疑われます。
  • AmCache と ShimCache の食い違い。 AmCache が実行を示しているのに、本来そこにあるはずの ShimCache エントリが欠けている場合、その理由を問う必要があります。攻撃者は AmCache の存在を知らないことが多いため、AmCache に触れずに ShimCache だけ消すケースはよく見られます。

これが調査員に意味するもの

実務的なルール:

  • 空または準・空の ShimCache を「証拠の不在」ではなく証拠として扱う。 必ず記録に残してください。
  • 可能ならメモリイメージを取得する。 ハイブが失ったものをよく拾います。
  • 常に AmCache と Prefetch で裏取りするリファレンス)。3 種類のアーティファクトを一貫して消すのは、1 つだけ消すよりはるかに困難です。
  • 「攻撃者が ShimCache を消した」と主張する場合は、何が 消えたかを示せること。 エントリ数の欠落、ベースライン・バイナリの欠落、メモリ/ディスクの乖離など、根拠を示してください。

さらに読む

関連記事