Windows フォレンジックに時間を費やすほど、USN の reason ビットマスクは身体感覚として身についていきます。これは NTFS が各ジャーナル レコードに設定する 32 ビットのフィールドで、ファイルに今ちょうど起きた変化を要約します。ビット単体ではすべてを語りませんが — 加算的であって排他的ではないため — 合わせて読むと、ライフサイクルの相当に精密な像が浮かびます。
ビットの一覧
| フラグ | Hex | 実務上の意味 |
|---|---|---|
DataOverwrite | 0x00000001 | メイン データ ストリームの一部が上書きされた |
DataExtend | 0x00000002 | メイン データ ストリームが伸長した |
DataTruncation | 0x00000004 | メイン データ ストリームが短縮された |
NamedDataOverwrite / Extend / Truncation | 0x10 / 0x20 / 0x40 | 同上、ただし代替ストリームに対して |
FileCreate | 0x00000100 | ファイルまたはディレクトリが作成された |
FileDelete | 0x00000200 | ファイルが名前空間から取り除かれた |
EaChange | 0x00000400 | 拡張属性が変更された |
SecurityChange | 0x00000800 | ACL/所有者が変更された |
RenameOldName | 0x00001000 | リネームの「変更前」側 |
RenameNewName | 0x00002000 | リネームの「変更後」側 |
IndexableChange | 0x00004000 | インデックス対象フラグが切り替わった |
BasicInfoChange | 0x00008000 | タイムスタンプ、属性、圧縮設定が変更された |
HardLinkChange | 0x00010000 | ハード リンクが追加または削除された |
CompressionChange | 0x00020000 | NTFS 圧縮が切り替わった |
EncryptionChange | 0x00040000 | EFS の状態が変化した |
ObjectIdChange | 0x00080000 | Object ID が設定/解除された |
ReparsePointChange | 0x00100000 | リパース ポイントが変更された |
StreamChange | 0x00200000 | 代替データ ストリームが追加/リネーム/削除された |
Close | 0x80000000 | 変更を生じたハンドルが閉じられた |
Close は特別です。NTFS は同一ハンドル下の連続する操作を結合し、ハンドルが消えた段階で Close 付きの最終レコードのみを発行します。Close の付かないレコードは、システムが中間状態をフラッシュしている様子を見ています — 有用ですが、Close 付きのレコードこそが正式な総括です。
実地で頻出するパターン
いくつかのパターンは見た瞬間に判別できるくらい頻繁に現れます:
- アプリが書いた新規ファイル。
FileCreate | DataExtend→DataExtend | Close→BasicInfoChange | Close。最後はファイルがクローズ時に mtime を刻まれる動きです。 - ディレクトリ間のリネーム。 同一の
FileReferenceNumberに対する二件:RenameOldName | Closeの次にRenameNewName | Close。親参照が両者で異なる — それが移動を再構成する手掛かりです。 - アトミックな save-by-rename。 多くのエディタは一時ファイルに書き、続けてターゲットへリネームします。一時側に
FileCreate、元ファイルにFileDelete | Close、一時側にRenameNewName | Closeが並びます。 - ランサムウェアの「暗号化→リネーム」。 メガバイト単位を覆う
DataOverwriteの連続に、新拡張子でのRenameNewName | Closeが続きます。DataOverwriteの件数と時間分布は、サンプルをディスク上で最初に察知する手掛かりになることが多いです。 - アンチウイルスの隔離。 直近の
FileCreateの直後にFileDelete | Close、すべて同一の MFT エントリ下で発生します。ファイル自体が消えた後でも、AV がファイルを触った決定的な証拠を提供します。
ビットからは分からないこと
reason ビットマスクは ファイルについて語り、行為者については語りません。ユーザもプロセス ID もコマンド ラインも含まれません。各操作に行為者を紐づけるには、ジャーナルを Security.evtx (4663 オブジェクト アクセス) や Microsoft-Windows-Sysmon/Operational と組み合わせます。USN は いつ と 何を を、他のログが 誰が を担います。
実用的な読み手順
パース済みジャーナルを開いたら:
- 時間窓の中で本当に新規のものを把握するため
FileCreateをフィルタする。 - 移動や「名前を付けて保存」のパターンを捕らえるため
RenameNewNameを探す。 - 時系列で
DataExtendの件数をプロットする — バックアップ、暗号化、流出のステージングといった大量書き込みが浮かび上がる。 - まず
Closeの立ったレコードを読み、途中状態は補助証拠として扱う。
本サイトの Web アプリは任意の reason 組み合わせでフィルタできるため、ステップ 1〜3 はクリック一つで済む作業になります。