← Torna al blog

Codici di razionale USN — leggere tra i bit

Tour campo per campo del bitmask di razionale dei record USN_RECORD e di ciò che ogni combinazione rivela sul ciclo di vita di un file su disco.

3 min di lettura

Se passi del tempo nella forense di Windows, il bitmask di razionale USN diventa presto memoria muscolare. È un campo a 32 bit che NTFS imposta su ogni record del journal per riassumere cosa è appena cambiato in un file. I bit non ti dicono tutto — sono additivi, non esclusivi — ma letti insieme dipingono un quadro notevolmente preciso del ciclo di vita.

I bit

FlagHexCosa significa in pratica
DataOverwrite0x00000001Una regione del flusso di dati principale è stata sovrascritta
DataExtend0x00000002Il flusso di dati principale è cresciuto
DataTruncation0x00000004Il flusso di dati principale si è ridotto
NamedDataOverwrite / Extend / Truncation0x10 / 0x20 / 0x40Idem, ma su un flusso alternativo
FileCreate0x00000100Creato un nuovo file o directory
FileDelete0x00000200Il file è uscito dallo spazio dei nomi
EaChange0x00000400Attributi estesi modificati
SecurityChange0x00000800ACL/proprietario modificati
RenameOldName0x00001000Metà «prima» di un rename
RenameNewName0x00002000Metà «dopo» di un rename
IndexableChange0x00004000Flag indicizzabile commutato
BasicInfoChange0x00008000Timestamp, attributi o compressione modificati
HardLinkChange0x00010000Hard link aggiunto o rimosso
CompressionChange0x00020000Compressione NTFS commutata
EncryptionChange0x00040000Stato EFS modificato
ObjectIdChange0x00080000Object ID impostato o pulito
ReparsePointChange0x00100000Reparse point modificato
StreamChange0x00200000Flusso alternativo aggiunto/rinominato/eliminato
Close0x80000000L'handle che ha prodotto il cambiamento è stato chiuso

Close è speciale: NTFS raggruppa operazioni successive sotto lo stesso handle ed emette il record finale con Close solo quando l'handle è andato. Un record senza Close è il sistema che svuota stato intermedio — utile, ma il record con Close è il riassunto autoritativo.

Pattern che vedrai in natura

Alcuni pattern ricorrono così spesso da meritare un riconoscimento istantaneo:

  • Nuovo file scritto da un'applicazione. FileCreate | DataExtendDataExtend | CloseBasicInfoChange | Close. L'ultimo è il file che riceve il suo mtime alla chiusura.
  • Rinomina tra directory. Due record sullo stesso FileReferenceNumber: RenameOldName | Close poi RenameNewName | Close. La referenza parentale differisce — è così che ricostruisci lo spostamento.
  • Save-by-rename atomico. Molti editor scrivono in un file temporaneo e poi lo rinominano sul target. Vedi FileCreate sul temp, FileDelete | Close sull'originale e RenameNewName | Close sul temp.
  • Ransomware cifra-poi-rinomina. Record DataOverwrite che coprono megabyte, seguiti da RenameNewName | Close con la nuova estensione. Il conteggio e il ritmo dei DataOverwrite sono spesso il primo indizio di un campione su disco.
  • Quarantena antivirus. Un FileDelete | Close immediatamente dopo un FileCreate recente, tutto sotto la stessa MFT entry. Il journal fornisce la prova che l'AV ha toccato il file anche dopo che il file stesso è scomparso.

Quello che i bit non ti diranno

Il bitmask di razionale parla del file, non dell'attore. Niente utente, niente PID, niente riga di comando. Combina il journal con Security.evtx (4663 accesso a oggetto) o con Microsoft-Windows-Sysmon/Operational per legare un attore a ogni operazione. L'USN ti dà il quando e il cosa; gli altri log danno il chi.

Ricetta pratica di lettura

All'apertura di un journal parsato:

  1. Filtra FileCreate per vedere cosa è genuinamente nuovo nella finestra temporale.
  2. Cerca RenameNewName per catturare spostamenti e pattern di «salva con nome».
  3. Traccia il numero di DataExtend nel tempo — le scritture massicce (backup, cifratura, staging di esfiltrazione) saltano all'occhio.
  4. Leggi prima i record con Close attivo; tratta gli intermedi come prove di supporto.

L'app web di questo sito permette di filtrare per qualsiasi combinazione di razionali, il che rende i passi 1-3 un esercizio da un clic.