← ブログに戻る

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

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

約 2 分で読了

「14:00 から 16:00 の間にこのコンピュータで何が起きたか」という問いの大半は USN ジャーナルから直接答えられます。レコードはシステム コール ログではなく、ユーザでタグ付けされてもいませんが、ほぼ同じだけ有用なものを持っています — マシンが触れたあらゆるファイルについて、操作単位の高頻度な記録です。パターンの心得が少しあれば、Office の保存、ブラウザ操作、IDE のリビルド、お昼休憩 といった粒度でユーザの行動を復元できます。

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

なぜ機能するか

USN ジャーナルはどのファイルがいつ、どう変わったかを記録します — そしてデスクトップ上のユーザ可視アクションの大半は、認識可能なファイル活動シグネチャを生みます。ユーザが Word の保存をクリックする;Word は一時ファイルに書き、アトミックにリネームし、結果に BasicInfoChange | Close。Chrome が新しいタブを開く;ディスク キャッシュが伸びる。IDE がリビルドする;数千のオブジェクト ファイルが生まれる。

これらのシグネチャは公式には文書化されていません — 学んで身につけるものです。以下はスタータ セットと、それらを扱いやすくするパーサのコントロールです。

実世界の Office

ユーザが Word、Excel、PowerPoint を保存すると次が見えます:

FileCreate | Close            ~$<filename>.docx     (ロック ファイル)
FileCreate | Close            <filename>.tmp        (アトミックな一時)
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 のアトミック リネームは保存そのもの。先頭の ~$ ファイルは ドキュメントが開いている間だけ存在する ため、思いのほか有用です。

ピボットの小技:ファイル名が ~$ で始まる 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 の訪問と相関します。静かな時間帯は、ユーザの離席や読み込みの長いページと相関します。

キャッシュのファイル名はどの URL が訪問されたかは示しません(これはブラウザの DB にあります)が、キャッシュ I/O の リズム はブラウジングを示します。ユーザの Downloads\ 配下のジャーナル FileCreate イベントと組み合わせれば、明確な意図的ダウンロードが特定できます。

コード活動

ユーザが開発者なら、IDE のリビルドは非常に特徴的なバーストを生みます:

  • Webpack/Vite/Turbopacknode_modules\.cache\dist\ で数百件単位の FileCreate
  • Visual Studio C++Debug\Release\ 配下で .obj.pdbFileCreate
  • Cargo (Rust) — 増分ビルドは target\debug\incremental\ を強く触り、フル ビルドは target\debug\deps\ を触ります。

node_modules\ での FileCreate の 5 分バーストに続き、dist\bundle.js への DataExtend の群れが来れば、「ビルドを回し、続いて dev サーバがリロードした」です。

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

直接ダウンロードはこう見えます:

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

.crdownload.part.download の拡張子はそれぞれ Chrome、Firefox、Edge。最後のアトミック リネームでファイルが「完了」状態になります。

新規プログラムのインストールは典型的に、Downloads 内のインストーラ .exe/.msiFileCreate に続いて、\Program Files\\Program Files (x86)\、または \Users\<u>\AppData\Local\Programs\ 配下での FileCreate のバースト。分単位のヒストグラムでインストールは自明に特定できます。

まとめ:1 日のタイムライン

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

  1. その日のユーザの解析済みジャーナルを引き出す。\Users\<u>\ 配下のレコードに絞り、システム ノイズを取り除く。
  2. 10 分単位のバケットごとに、FileCreateDataExtendBasicInfoChange の件数を計算。
  3. 3 系列をプロット。形が活動を示します:
    • 多くの create + extend:内容の作成/保存。
    • BasicInfoChange だけが多い:閲覧、スクロール、軽い編集。
    • extend が多く create が少ない:大きなダウンロードやメディア再生。
    • Cache\ ディレクトリで持続的な create:閲覧。
    • node_modules\ / Debug\ / target\ で持続的な create:コーディング。
  4. 各バケットで最も多いファイル名を確認してピークに注釈をつける。Office のファイル名は良いアンカー、キャッシュのファイル名は基本無視可。

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

落とし穴

  • バックアップと AV スキャン はボリューム規模の BasicInfoChange バーストを生み、表面上ユーザ活動に似て見えます。たいていスケジュールに従い、ユーザだけでなくあらゆるディレクトリを巡るため、見分けて除外しやすいです。
  • 同期エージェント(OneDrive、Dropbox)はユーザ活動 のように見える ジャーナル トラフィックを生みますが、エージェント自身の作業です。同期フォルダ のパスのレコードに絞り、ユーザ起点の作業に集中させます。
  • バックグラウンド インデクサ(SearchIndexer.exe)は \Users\<u>\AppData\Roaming\Microsoft\Windows\Recent\\ProgramData\Microsoft\Search\ のファイルを触ります — システム ノイズとして整理しやすいです。

次に進むなら

ジャーナル単体は本格的なスーパー タイムラインの代用にはなりません。しかし 80% の調査では、「14:00 から 16:00 の間にユーザは何をしていたか」は $J$MFT だけで答えられます — それらを本ページにドラッグするのと同じだけの時間で。