USN ジャーナルからユーザの活動タイムラインを再構成する

$UsnJrnl のレコードが 3 分間あれば、ユーザが何をしていたか — Office、ブラウザ、ダウンロード、コーディング — を通常は再構成できます。ジャーナルを行動ログとして読む方法を解説します。

著者: 約 2 分で読了

「このコンピュータで 14:00 から 16:00 の間に何が起きていたか」の多くは、他のアーティファクトなしで USN ジャーナルからそのまま答えられます。レコードは syscall ログではなく、ユーザでタグ付けされてもいませんが、ほぼ同等に有用な何かを与えます。それは、マシンが触れたあらゆるファイルの操作単位・高頻度の記録です。数件の案件を経て身につくパターン知識があれば、Office の保存、ブラウザの遷移、IDE のリビルド、昼休みといった粒度で行動を回復できます。

本記事は、ジャーナルを行動タイムラインとして読むための実地ガイドです。

なぜこれが機能するのか

Windows デスクトップ上のユーザに見える行動のほとんどは、識別可能なファイルシステムシグネチャを生成します。Word で「保存」をクリックすると、Word は一時ファイルを書き、アトミックにリネームし、BasicInfoChange | Close で結果に印を付けます。Chrome で新しいタブを開くとディスクキャッシュが追記されます。npm install を実行すると、数秒で千個の package.json ファイルが生まれます。

これらのシグネチャは Microsoft のリファレンスには文書化されていません。コントロールされた実験ホストのジャーナルを見て、既知の活動と照合することで学べます。以下は、案件で見る頻度の高い順に並べたスターターセットです。

実環境での Office

ユーザが Word、Excel、PowerPoint ファイルを保存すると、次が見えます。

FileCreate | Close            ~$<filename>.docx     (ロックファイル)
FileCreate | Close            <filename>.tmp        (アトミック temp)
DataExtend | Close            <filename>.tmp        × N
RenameOldName | Close         <filename>.docx
FileDelete | Close            <filename>.docx
RenameNewName | Close         <filename>.docx       (元は <filename>.tmp)
FileDelete | Close            ~$<filename>.docx
BasicInfoChange | Close       <filename>.docx

~$ ロックファイルが、Office における「文書が開かれている」シグナルです。その FileCreateFileDelete が開閉ウィンドウを正確にブラケットします。.tmp から .docx へのアトミックリネームが、保存そのものです。最後の BasicInfoChange は、新しいファイルがクローズ時に mtime をスタンプされる瞬間です。

すべての案件で使うピボット技: ファイル名が ~$ で始まる FileCreate レコードをフィルタします。これで、ウィンドウ内でユーザが開いたすべての Office 文書が得られます。同じ名前の FileDelete を引けば、取得時点でまだ開いていた文書、つまりライブキャプチャの場合はマシンがイメージ化された瞬間にユーザが開いていた文書が得られます。最後の点は「我々が踏み込んだ瞬間にユーザが実際に何をしていたか」という回答として、複数のレポートに採用されてきました。

ブラウザの活動

現代のブラウザは重いファイルシステムキャッシュを維持します。Chrome と Edge は \Users\<u>\AppData\Local\<browser>\User Data\Default\Cache\Cache_Data\ (および Code Cache\) を使います。Firefox は \Users\<u>\AppData\Local\Mozilla\Firefox\Profiles\<id>\cache2\ を使います。閲覧中:

  • キャッシュディレクトリ内で持続的に低レートの FileCreate | CloseDataExtend | Close
  • LRU が古いエントリを退避させる際の散発的な FileDelete | Close
  • 数分ごとにインデックスが圧縮される際のキャッシュファイルの RenameNewName

キャッシュ書き込みのバーストは、メディアの多いサイトや SPA を訪問していることと相関します。静かな時間は、ユーザが離席しているか、長く読み込み中のページにいることと相関します。アクティブな動画再生は別の形状を示します — 多数の小さな create ではなく、単一のキャッシュファイルに対する大規模で持続的な DataExtend です。

キャッシュのファイル名は URL を符号化していません。それには、ブラウザフォレンジックツール でブラウザ自身の SQLite データベースに切り替えます。ジャーナルの貢献はリズム — ユーザが特定のウィンドウで活発に閲覧していたこと — と、意図的なダウンロードに対する \Users\<u>\Downloads\ の明示的な FileCreate イベントです。

コーディング活動

ユーザが開発者の場合、IDE とビルドツールの活動は非常に特徴的なバーストを生成します。

  • Webpack、Vite、Turbopacknode_modules\.cache\node_modules\.vite\.next\dist\ に多くの FileCreate。ビルドあたり数百件。
  • Visual Studio C++Debug\Release\ サブツリーに .obj.pdb ファイルの FileCreate
  • Cargo (Rust) — インクリメンタルビルドは target\debug\incremental\ を激しく触り、フルビルドは target\debug\deps\ も触ります。
  • Go$GOPATH\pkg\\Users\<u>\AppData\Local\go-build\ のビルドキャッシュで短く激しいバースト。
  • npm installyarn install — 数十秒以内に node_modules\ 配下に数千件の FileCreate レコード。ジャーナル内で最もノイジーな単一のユーザ活動です。

node_modules\ での 5 分間の FileCreate バーストと、それに続く dist\bundle.js への DataExtend の群れは、「ビルドを実行してから開発サーバがリロードした」状態です。下記の除外セクションを読んでください — 開発以外の分析では、これらのバーストをフィルタしないと他のすべてを埋め尽くします。

ダウンロードとインストール

Chrome での直接ダウンロード:

FileCreate | Close             \Users\<u>\Downloads\<file>.crdownload
DataExtend | Close             \Users\<u>\Downloads\<file>.crdownload  × N
RenameNewName | Close          \Users\<u>\Downloads\<file>
BasicInfoChange | Close        \Users\<u>\Downloads\<file>

Firefox は .part、Edge は .download を使います。末尾のアトミックリネームが、エクスプローラやその他のリーダにファイルを「完了」状態に見せます。

新しいプログラムのインストールは通常、Downloads にインストーラ (.exe.msi.appx) の FileCreate、その後に \Program Files\\Program Files (x86)\、または \Users\<u>\AppData\Local\Programs\ 配下の FileCreate レコードのバーストが続きます。分単位のヒストグラムでインストールが容易に識別できます。実行側は AmCachePrefetch で相互参照してください。

まとめる: 日次タイムラインのレシピ

「今日ユーザは何をしたか」のレポートを作るためのレシピ:

  1. その日の対象ユーザのパース済みジャーナルを取得します。解決済みパスが \Users\<u>\ (対象ユーザ) で始まるレコードに制限します。これにより、Windows Update、システムキャッシュ、その他通常支配的な OS ノイズが除外されます。
  2. 10 分バケットごとに、FileCreateDataExtendBasicInfoChange の件数を計算します。
  3. 三系列をプロットします。形状から大まかな活動が分かります:
    • create と extend が多い。 コンテンツの書き込みや保存。
    • BasicInfoChange だけが多い。 閲覧、スクロール、Office やエディタがファイルに触れる軽い編集 (大量の書き込みなし)。
    • extend が多く create が少ない。 大きなダウンロードまたはメディア再生。
    • Cache\ パスでの持続的な create。 閲覧。
    • node_modules\ または target\ または Debug\ での持続的な create。 コーディング。
  4. 各バケットの上位 5 件のファイル名を確認してピークに付記します。Office のファイル名と ~$ ロックファイルは絶好の指標です。キャッシュのファイル名は通常無視できます。

本ページのパーサは、タイムラインコンポーネント上で分単位ヒストグラムを公開しています。バーをクリックするとそのウィンドウにテーブルが絞られます — これがコードを書かない上記のワークフローです。

帰属 — どの ユーザがキーボードにいたか — については、ジャーナルのタイムラインを EVTX パーサ からの Security.evtx 4624 インタラクティブログオン (LogonType=2) と 4647 ユーザ起動のログオフと組み合わせてください。これでセッション境界がブラケットされ、活動に名前を付けられます。

除外と落とし穴

バックアップと AV のスキャン は、表面的にはユーザ活動に似たボリューム全体の BasicInfoChange バーストを生成します。スケジュールされた時刻に従い、サブツリーに集中するのではなく、すべてのディレクトリを訪問します。パスのカバレッジで容易に識別および除外できます。

同期エージェント (OneDrive、Dropbox、Google Drive Backup and Sync) は、ユーザ活動に 見える ジャーナルトラフィックを生成しますが、これはエージェント自身の作業です。ユーザ起動の活動を見るには同期フォルダ外のレコードに制限し、流出記事 で記録されているクラウド経由の流出パターンを見るには、同期フォルダ内を具体的に確認してください。

バックグラウンドインデクサ。 SearchIndexer.exe\Users\<u>\AppData\Roaming\Microsoft\Windows\Recent\\ProgramData\Microsoft\Search\ のファイルに触れます。MsMpEng.exe (Defender) はスキャン時に BasicInfoChange イベントを生成します。どちらもシステムノイズとして容易にバケット化できます。

Chrome Software Reporter、Edge アップデータ、Windows Update。 いずれも \Program Files\\Windows\SoftwareDistribution\ で予測可能な FileCreateDataExtend のバーストを生成します。パスでフィルタしてください。

node_modules\ その他のビルド出力 は、これを含めるあらゆるタイムラインを支配します。開発以外のケースでは、node_modules\target\Debug\Release\obj\bin\.next\dist\build\ をパスプレフィックスで除外してください。

ジャーナルから再構成できないもの

  • ユーザ ID。 タイムスタンプを Security.evtx4624 ログオンと相関させます。
  • ユーザが訪問した URL。 それらはブラウザの履歴データベースが保持します。ジャーナルはキャッシュ書き込みのリズムしか知りません。
  • ファイルの内容。 メタデータのみです。
  • リングバッファのウィンドウを超える期間。 32 MB の $J はデスクトップで数日をカバーします。それ以前のものは、このアーティファクトからは消えています。さらに遡るにはシャドウコピーと $LogFile を取得してください。

「X と Y の間にユーザが何をしていたか」の質問の 80% は、$J$MFT が一緒に直接答えます。残りの 20% には、Sysmon、EVTX、アプリケーションレベルのネットワークと CPU 使用については SRUM、そして適切なスーパータイムラインが必要です。

参考資料

  • Plaso (log2timeline) — パース済みの USN ジャーナルを取り込み、他のすべての Windows タイムラインアーティファクトと統合して 1 つの並べ替え可能なビューにする スーパータイムラインの決定版ツール
  • SANS DFIR — Windows Forensic Analysis ポスター は、ユーザ活動の質問にどのアーティファクトが答えるかについての 1 ページのリファレンスです。
  • Velociraptor の artifact exchange — 上記のような USN、MFT、EVTX の相関を組み合わせた複数のコミュニティアーティファクトが含まれます。