TL;DR. ShimCache + AmCache + Prefetch + BAM/DAM + Security/Sysmon を融合したタイムラインを構築します。ShimCache でキャスト(パス)を定義し、各行を実際にイベントを記録するソースのタイムスタンプで補強します。各タイムスタンプにそのソースのセマンティクスをタグ付けします。「ファイル mtime」と「プロセス開始」を 1 つの列に折りたたんではいけません。
プログラム実行タイムラインは、Windows IR 調査員が生み出す最も有用なアーティファクトです。よく作られていれば、複数のデータソースにわたって時系列の物語を伝えます。下手だと証拠を誇張し、mtime が何か知っている人なら誰でも異議を唱えるでしょう。私が ShimCache を背骨として実行するワークフローはこうです。
ShimCache が良い背骨である理由
キャッシュは単一フィールドのソースとしては最も正確ではないことが多いですが、タイムラインアンカーとして独自の利点があります:
- ファイルパスを明示的に保持します。ハッシュや部分パスしか持たないアーティファクトもあります。
- Windows が単に検査した実行ファイルを取り込むため、短時間実行され削除されたバイナリを含みます(Prefetch と BAM はそれを取り逃がす可能性があります)。
- 他のアーティファクトを消去する多くのアンチフォレンジック試みを生き残ります。重要な注意点 を参照してください。
ShimCache でタイムラインのキャストを定義してください。次に各行を裏付けるアーティファクトで補強し、信頼できる時刻を割り当てます。
融合するデータソース
完全なプログラム実行タイムラインは、少なくとも次の 5 つから引きます:
| ソース | 行に追加するもの |
|---|---|
| ShimCache | パス + ファイル mtime |
| AmCache | SHA-1、ファイルサイズ、発行元、インストールタイムスタンプ、初回実行タイムスタンプ |
| Prefetch | プロセス開始時刻(直近 8 回まで)、ロードされたモジュール |
| BAM/DAM | Win10/11 のユーザーごとの「最終実行」タイムスタンプ |
| Security / Sysmon | コマンドライン、親、ユーザー付きのプロセス作成イベント |
背景については プログラム実行アーティファクトリファレンス を参照してください。より大きな案件では、ネットワークとリソース使用については SRUM、ファイル活動については USN ジャーナル、シェル履歴については LNK ファイル と ジャンプリスト を組み込んでください。
再現可能なワークフロー
- アーティファクトを収集する。 トランザクションログ付きの SYSTEM ハイブ、
.LOG1と.LOG2付きのAmcache.hve、C:\Windows\Prefetch\*.pf、エクスポートされた Security イベントログ、可能であれば Sysmon ログ、ユーザーごとの NTUSER.DAT。取得ガイド で SYSTEM ハイブを具体的に扱っています。 - それぞれを正規化された表に解析する。 オフライン作業には Eric Zimmerman スイート(
AppCompatCacheParser、AmcacheParser、PECmd)を、ShimCache 部分をブラウザで処理するには Shimcache Parser を使用してください。 - (path, optional SHA-1) で融合する。 結合キーはファイルパスで、AmCache の SHA-1 が補助シグナルです。大文字小文字の違いやパス正規化(
\??\C:\vsC:\)に注意してください。 - 各タイムスタンプにソースセマンティクスをタグ付けする。 「AmCache install_date」と「Prefetch run_time」を 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..., signer "Acme Updates", install 2026-04-12 09:14:33
Prefetch : last run 2026-04-12 09:15:01 UTC (1 execution)
Security 4688 : 2026-04-12 09:15:01 UTC, PID 4521, parent PID 1234 (svchost.exe)
各タイムスタンプにソースがあり、行は異議に耐えます。逆(「ShimCache は setup.exe が 09:14:33 に実行されたことを示す」)はファイル mtime と実行時刻を混同し、レポートが却下される類の主張です。実行証明 を参照してください。
ソースが食い違うとき
衝突はデータです。
- ShimCache mtime ≠ Prefetch first-run。 正常です。異なるものを測定しています。両方を記録してください。一方を選んではいけません。
- AmCache は実行されたと言うが、ShimCache はそのファイルについて空。 可能な理由:アンチフォレンジック消去(検出パターン)、1,024 エントリ上限からエントリが追い出された、バイナリは前回のクリーンシャットダウン後に実行された(メモリのみに残る、RAM ダンプ を引いてください)。
- Prefetch がない。 サーバー SKU と SSD チューニング済みホストはしばしば Prefetch が無効化されています。AmCache と BAM にフォールバックしてください。
- EVTX Security 4688 にプログラム名はあるがコマンドラインがない。 コマンドライン監査がオフでした。有用だが限定的。EVTX parser は監査ポリシーの前提条件をカバーします。
適切な場所で止める
タイムラインは完全である必要はなく、価値がある場合があります。厳格に構築された焦点を絞ったウィンドウ(「ホスト X で 2026-04-11 14:00 から 18:00 の間に何が実行されたか?」)は、弱い帰属で膨大なものに勝ります。マルウェアハンティングワークフロー がそのウィンドウを選ぶのに役立ちます。
さらに読む
- Plaso / log2timeline:ShimCache、AmCache、Prefetch、そして他の多くの Windows アーティファクトを消費するオープンソースタイムラインエンジン。
- Eric Zimmerman ツール:リファレンスパーサと Timeline Explorer。
- Velociraptor
Windows.Registry.AppCompatCache:スケール時の収集。