TL;DR. ShimCache + AmCache + Prefetch + BAM/DAM + Security/Sysmon を融合したタイムラインを構築してください。ShimCache で キャスト(パス)を定義し、各行を他ソースのタイムスタンプで肉付けします。各タイムスタンプには必ず出典の意味(セマンティクス)を付与し、「ファイルの mtime」と「プロセス開始時刻」を同じ列に押し込まないこと。
プログラム実行タイムラインは、Windows IR の調査員が作る最も有用な単一アーティファクトです。うまくできていれば複数ソースを跨ぐ時系列の物語になります。粗雑であれば証拠を誇張し、反論を呼び込みます。本稿では、ShimCache を背骨としてタイムラインを構築する方法を示します。
なぜ ShimCache が背骨に向くのか
ShimCache は単一のフィールドにおいては最も精度の高いソースではありませんが、時間軸の錨としては固有の利点があります。
- ファイルパス を明示的に保持します(ハッシュや部分的なパスしかないアーティファクトもあります)。
- Windows が単に 検査した 実行ファイルを捕捉します — Prefetch や BAM が取りこぼす、短時間動いた後に削除されたバイナリを含みます。
- 他のアーティファクトを消すアンチフォレンジック手段の多くを生き延びます(重要な留保)。
ShimCache でタイムラインの キャスト を定義し、補強アーティファクトで各行を肉付けして信頼できる時刻を付与します。
統合する情報源
完全なプログラム実行タイムラインは、少なくとも次の 5 つから情報を取り込みます。
| ソース | 行に追加する情報 |
|---|---|
| ShimCache | パス + ファイル mtime |
| AmCache | SHA-1、サイズ、発行元、インストール日時、初回実行日時 |
| Prefetch | プロセス開始時刻(最後の 8 回まで)、ロードファイル |
| BAM/DAM | Win10/11 のユーザー別「最終実行」タイムスタンプ |
| Security/Sysmon | コマンドライン、親、ユーザー付きのプロセス作成イベント |
各々の詳細は プログラム実行アーティファクトのリファレンス を参照。
再現可能なワークフロー
- アーティファクトを収集する。 SYSTEM ハイブ(トランザクションログ込み)、
Amcache.hve、C:\Windows\Prefetch\*.pf、エクスポートした Security イベントログ、可能なら Sysmon ログ。 - それぞれを正規化テーブルへパースする。 Eric Zimmerman スイート(
AppCompatCacheParser、AmcacheParser、PECmd)か、ShimCache 部分をブラウザで処理する Shimcache Parser を使います。 - (パス、オプションで SHA-1) でジョインする。 結合キーはパスで、AmCache が提供する場合は SHA-1 を副次的シグナルにします。注意:ShimCache はパスがわずかに異なる場合があります(大小文字、正規化)。
- 各タイムスタンプにソースの意味をラベリングする。 「AmCache のインストール日時」と「Prefetch の実行時刻」を 1 つの列に混ぜないでください — 答える問いが違います。隣接させつつ別カラムに。
- 行単位の出典管理ができるツールで出力する。 Eric Zimmerman の Timeline Explorer (TLE) と Plaso / log2timeline はどちらも良好です。小規模なら CSV をスプレッドシートで扱うのでも十分です。
「良い」行の見え方
最終タイムラインで防御可能な行は次のような形です。
2026-04-12 09:14:33 UTC C:\Users\alice\AppData\Local\Temp\setup.exe
ShimCache mtime : 2026-04-12 09:14:30 UTC
AmCache : SHA-1 a3b8c9…、署名者「Acme Updates」、インストール 2026-04-12 09:14:33
Prefetch : 最終実行 2026-04-12 09:15:01 UTC(1 回)
Security 4688 : 2026-04-12 09:15:01 UTC、PID 4521、親 PID 1234 (svchost.exe)
各タイムスタンプには出典があり、行は反論に耐えます。逆に「ShimCache によれば setup.exe は 09:14:33 に実行された」と書くと、ファイル mtime と実行時刻を混同しています — まさに報告書が突き返される類の主張です。実行証明 を参照。
ソースが食い違うとき
衝突は有用なデータです。
- ShimCache の mtime ≠ Prefetch の初回実行。 正常です — 別物を測っています。両方を残し、選ばないこと。
- AmCache は実行ありと言い、ShimCache はそのファイルに対して空。 考えられる理由:アンチフォレンジックな消去(検出パターン)、1,024 件上限による追い出し、直近の正常シャットダウン後の実行。
- Prefetch が存在しない。 サーバ SKU や SSD 中心のホストでは Prefetch が無効化されていることが多いです — AmCache + BAM にフォールバックします。
適切な場所で止める
タイムラインは完全である必要はありません。「ホスト X 上で 2026-04-11 の 14:00〜18:00 に何が走ったか?」のように絞り込まれた窓を厳密に構築する方が、出典の弱い壮大なものより価値があります。窓選びには マルウェア・ハンティング・ワークフロー が役立ちます。
さらに読む
- Plaso / log2timeline — ShimCache、AmCache、Prefetch を含む数十の Windows アーティファクトを取り込めるオープンソースのタイムライン・エンジン。
- Eric Zimmerman ツール群 — リファレンス・パーサーと Timeline Explorer。
- Velociraptor
Windows.Registry.AppCompatCache— 大規模収集。