ShimCache は削除されたファイルを記録するか?

読了 1 分

TL;DR. はい。ShimCache エントリは、ファイルがディスク上にまだ存在するか否かに関わらずレジストリに残ります。binary を削除してもその ShimCache エントリは削除されません — だからこそ、攻撃者が投下・使用・消去したツールを捕捉するうえでこのアーティファクトは非常に価値があります。

「削除後も ShimCache はファイルを表示するか?」はプログラム実行フォレンジックで最もよくある質問の一つであり、その答えこそアーティファクトを収集する理由そのものです。

短い答え:はい

ShimCache はレジストリ値の中にパス+最終更新タイムスタンプを保存します。そのレコードはファイルシステムへの逆リンクを持ちません。実行ファイルが削除されると NTFS はファイルを解放しますが、レジストリ値はそのままです。エントリは、より新しいエントリに押し出される(キャッシュは最大 1,024 件)か、値そのものがクリアされるまで残ります。

したがって、攻撃者が C:\Users\Public\ に投下し、実行し、10 分後に削除した binary でも、かつて占めていた完全なパスを示す、きれいで読める ShimCache エントリを残せます。

なぜフォレンジック上強力なのか

削除済みファイルのエントリは、しばしば攻撃者ツールの唯一の生き残った証拠です。

  • 資格情報窃取後に削除された、リネームされた mimikatz.exe
  • 持ち出し後に除去されたステージング用アーカイブ。
  • ペイロードを設置後に自己削除したドロッパー。

いずれもファイルは消えていますが、ShimCache のパスは「存在したこと」「場所」、そして(最終更新タイムスタンプ経由で)ビルドへの結び付きを教えます。これはShimCache によるマルウェアハンティングと、攻撃者がツールを日常的に消去するランサムウェア調査の背骨です。

削除済みファイルのエントリはどれだけ残るか

2 つの制約があります。

  • 押し出し。 キャッシュは有限(最大 1,024 件)。多忙なホストでは実行ファイルの活動が多いと古いエントリが押し出されます。静かなサーバーでは数か月残ることもあります。
  • フラッシュのタイミング。 新しいエントリはクリーンシャットダウン時のみハイブに永続化されます。削除以降ホストがシャットダウンしていなければ、生き残ったエントリはまだメモリ内のみかもしれません — メモリイメージから取得します(方法)。保存/フラッシュモデルはShimCache の保存場所で扱っています。

それが証明しないこと

削除済みファイルのエントリは、ファイルがそのホストに存在し検査されたことを証明します。それ自体は実行を証明せず、いつ削除されたかも教えません(タイムスタンプはファイルの mtime であり削除時刻ではない)。強力な存在証人として扱い、実行は Prefetch/AmCache で裏付けてください — ShimCache は実行を証明するかを参照。

ハイブのどのエントリがもう存在しないファイルを指すか確認するには、Shimcache Parser で解析しパスを突き合わせてください — すべてブラウザ内でローカルに動作します。

さらに読む

関連記事