← Zurück zum Blog

USN-Reason-Codes — zwischen den Bits lesen

Feldweise Tour durch die Reason-Bitmaske von USN_RECORD und was jede Kombination über den Lebenszyklus einer Datei auf der Platte verrät.

3 Min. Lesezeit

Wer Zeit in der Windows-Forensik verbringt, hat die USN-Reason-Bitmaske irgendwann im Muskelgedächtnis. Es ist ein 32-Bit-Feld, das NTFS auf jedem Journal-Eintrag setzt, um zu summieren, was sich gerade an einer Datei geändert hat. Die Bits sagen nicht alles — sie sind additiv, nicht exklusiv —, aber zusammen ergeben sie ein bemerkenswert präzises Bild des Lebenszyklus.

Die Bits

FlagHexWas es in der Praxis bedeutet
DataOverwrite0x00000001Ein Bereich des Haupt-Datenstroms wurde überschrieben
DataExtend0x00000002Der Haupt-Datenstrom wuchs
DataTruncation0x00000004Der Haupt-Datenstrom schrumpfte
NamedDataOverwrite / Extend / Truncation0x10 / 0x20 / 0x40Dasselbe, aber auf einem alternativen Datenstrom
FileCreate0x00000100Eine neue Datei oder ein Verzeichnis wurde angelegt
FileDelete0x00000200Die Datei wurde aus dem Namensraum entfernt
EaChange0x00000400Erweiterte Attribute geändert
SecurityChange0x00000800ACLs/Eigentümer geändert
RenameOldName0x00001000„Vorher"-Hälfte eines Umbenennens
RenameNewName0x00002000„Nachher"-Hälfte eines Umbenennens
IndexableChange0x00004000Indexierbar-Flag umgeschaltet
BasicInfoChange0x00008000Zeitstempel, Attribute oder Kompression geändert
HardLinkChange0x00010000Hardlink hinzugefügt oder entfernt
CompressionChange0x00020000NTFS-Kompression umgeschaltet
EncryptionChange0x00040000EFS-Status geändert
ObjectIdChange0x00080000Object ID gesetzt oder gelöscht
ReparsePointChange0x00100000Reparse-Point geändert
StreamChange0x00200000Alternativer Datenstrom hinzugefügt/umbenannt/gelöscht
Close0x80000000Das Handle, das die Änderung produziert hat, ist geschlossen

Close ist besonders: NTFS bündelt aufeinanderfolgende Operationen unter demselben Handle und gibt erst nach dessen Schließen einen finalen Eintrag mit gesetztem Close aus. Ein Eintrag ohne Close zeigt das System beim Spülen von Zwischenständen — nützlich, aber der Close-Eintrag ist die autoritative Zusammenfassung.

Muster, die du in der Wildnis siehst

Einige Muster tauchen so oft auf, dass man sie sofort erkennen sollte:

  • Neue Datei, von einer App geschrieben. FileCreate | DataExtendDataExtend | CloseBasicInfoChange | Close. Der letzte ist die Datei, die beim Schließen ihren mtime bekommt.
  • Umbenennen über Verzeichnisse hinweg. Zwei Einträge auf derselben FileReferenceNumber: RenameOldName | Close, dann RenameNewName | Close. Die Eltern-Referenz unterscheidet sich zwischen den beiden — so rekonstruierst du den Move.
  • Atomares Speichern-per-Umbenennen. Viele Editoren schreiben in eine Tempdatei und benennen sie auf das Ziel um. Du siehst FileCreate auf dem Temp, FileDelete | Close auf dem Original und RenameNewName | Close auf dem Temp.
  • Ransomware verschlüsseln-dann-umbenennen. DataOverwrite-Einträge über Megabytes, gefolgt von RenameNewName | Close mit neuer Endung. Anzahl und Timing der DataOverwrite sind häufig der erste Anhaltspunkt für eine Probe auf der Platte.
  • Antivirus-Quarantäne. FileDelete | Close unmittelbar nach einem frischen FileCreate, alles unter derselben MFT-Entry. Das Journal liefert den Beweis, dass das AV die Datei angefasst hat — selbst nachdem die Datei selbst weg ist.

Was die Bits dir nicht verraten

Die Reason-Bitmaske spricht über die Datei, nicht über den Akteur. Kein Benutzer, keine Prozess-ID, keine Kommandozeile. Korrelier das Journal mit Security.evtx (4663 Objektzugriff) oder mit Microsoft-Windows-Sysmon/Operational, um jeder Operation einen Akteur zuzuordnen. Das USN liefert das Wann und Was; andere Logs liefern das Wer.

Pragmatisches Lese-Rezept

Beim Öffnen eines geparsten Journals:

  1. Filter nach FileCreate, um zu sehen, was im Zeitfenster wirklich neu ist.
  2. Such nach RenameNewName, um Bewegungen und „Speichern unter"-Muster zu erwischen.
  3. Trag die Anzahl von DataExtend über die Zeit auf — Massenschreibvorgänge (Backups, Verschlüsselung, Exfil-Staging) springen ins Auge.
  4. Lies Einträge mit gesetztem Close zuerst; behandle Zwischenstände als Stützbeweise.

Die Web-App auf dieser Seite erlaubt das Filtern nach beliebigen Kombinationen von Reason-Flags — was die Schritte 1–3 zur Ein-Klick-Übung macht.