← Torna al blog

Rilevare l'esfiltrazione di dati e le copie su USB con il journal USN

Copie di massa, drop su USB e directory di staging lasciano una forma riconoscibile in $UsnJrnl:$J. I pattern da filtrare, con esempi pratici.

5 min di lettura

Dopo il ransomware, la seconda domanda DFIR più frequente è «è uscito qualcosa da qui?». Il journal USN è uno dei posti più economici per rispondere. Registra ogni creazione, ogni rinomina, ogni estensione di dati — il che significa che l'esfil via USB, lo staging per la sync cloud e il classico «scaricare tutto in una cartella temp prima di zippare» appaiono molto distintivi su una timeline.

Questo articolo è il playbook per trovare quei pattern.

Le chiavette USB sono modalità facile

Quando un utente collega un volume rimovibile, Windows gli assegna una nuova lettera e il filesystem del dispositivo riceve il suo $UsnJrnl se è NTFS. Ma quando i file vengono copiati dal sistema in indagine alla USB, il journal del volume sorgente registra comunque il lato lettura come una serie di accessi — e, ancora più importante, il journal di destinazione (se hai l'immagine della USB) mostra le scritture.

Quello che tipicamente hai:

  • Il journal del disco sorgente — mostra cosa è stato aperto/chiuso e i file temporanei.
  • Le hive del registroSYSTEM\MountedDevices, NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2 e gli event Setup hardware per identificare quale USB era connessa.
  • Il journal del volume di destinazione, se il dispositivo era NTFS e si può imageare — qui vedi i file reali.

Primo segnale lato sorgente: un cluster di aperture di file in una finestra ristretta che colpisce l'albero documents/desktop/downloads dell'utente. Le aperture non sempre producono record USN, ma le cache del filesystem e gli scan AV che le seguono spesso lo fanno (toccare gli attributi innesca BasicInfoChange | Close).

Un segnale più decisivo arriva se l'attaccante zippa prima: un FileCreate di un .7z, .zip, .rar o di un file con nome casuale in un percorso temp, seguito da record DataExtend | Close continui finché il file non raggiunge la dimensione finale.

Il classico pattern staging-poi-copia

Un pattern frequente, mappato su T1074 Data Staged di MITRE ATT&CK:

FileCreate | Close   C:\Users\bob\AppData\Local\Temp\sales_q3\
FileCreate | Close   C:\Users\bob\AppData\Local\Temp\sales_q3\report.xlsx
DataExtend | Close   C:\Users\bob\AppData\Local\Temp\sales_q3\report.xlsx
FileCreate | Close   C:\Users\bob\AppData\Local\Temp\sales_q3\customers.csv
DataExtend | Close   ...
…
FileCreate | Close   C:\Users\bob\AppData\Local\Temp\sales_q3.zip
DataExtend | Close   ...           ← tanti, il file cresce
FileDelete | Close   C:\Users\bob\AppData\Local\Temp\sales_q3\*  (pulizia)

Tre segnali insieme:

  • Una raffica di FileCreate in una singola directory di staging.
  • DataExtend successivi su un singolo archivio la cui dimensione finale approssima la somma dei file stagionati.
  • Uno spazzolamento di eliminazione della directory di staging poco dopo la creazione dell'archivio.

Filtrare FileCreate in \AppData\Local\Temp\, \Public\, \Downloads\ o altre posizioni scrivibili dell'albero utente, e cercare cluster temporali di >50 file in <60 secondi. È così che appaiono operazioni di furto interno o infostealer sul disco.

Staging via sync cloud

OneDrive, Dropbox, Google Drive — tutti mantengono una cartella di sync locale. Qualsiasi cosa scaricata lì viene caricata appena l'agente la nota. Due segnali:

  • RenameNewName di massa nella cartella di sync da Desktop\, Documents\ o Downloads\. La metà rename ti dice il padre precedente; il nuovo padre è la cartella di sync.
  • DataExtend | Close su file dentro la cartella di sync senza un FileCreate corrispondente di un'app utente. L'agente di sync stesso scrive questi — ossia sono download — ma le creazioni sono ciò che vuoi per gli upload.

Per un filtro per nome, le directory canoniche di sync su Windows sono \Users\<u>\OneDrive\, \Users\<u>\Dropbox\ e \Users\<u>\Google Drive\. Gli strumenti elencati nelle risorse insider threat TLP-WHITE di CISA hanno assunzioni di baseline simili.

Euristiche che davvero funzionano

Dopo diverse missioni, le euristiche che tendono a segnalare esfil reale sono:

  1. Raffica di create: più di N FileCreate in una singola directory in T secondi. Calibrabile sulla baseline. Iniziamo con N=50, T=60.
  2. Archivio dopo raffica: un singolo FileCreate di un file con estensione di archivio nota (.zip, .7z, .rar, .tar.gz) entro minuti da una raffica, con DataExtend successivi che accumulano diversi MB.
  3. Rinomina di massa che attraversa confini: record RenameNewName il cui nuovo padre è strutturalmente diverso dal vecchio (DocumentsOneDrive, DesktopPublic, ecc.). Facile esprimere come regex sui percorsi completi risolti.
  4. Raffiche fuori orario: una qualsiasi delle precedenti al di fuori delle ore lavorative di quell'utente. Da accoppiare con gli event di logon Security.evtx per conferma.

Il parser di questo sito espone filtri per finestra temporale e per razionale che rendono 1–3 un clic ciascuno. Per (4), esportare in CSV e pivotare sull'ora del giorno.

Cosa non vedrai

Alcune tecniche di esfil reali producono nessun segnale USN utile:

  • Upload diretto dalla memoria via browser o PowerShell — i dati non toccano mai il disco, quindi il journal non ha nulla.
  • Lettura di una condivisione di rete — la sorgente è il filesystem dove vive la condivisione, spesso non il tuo.
  • Cattura schermo come esfil — produce solo la creazione di uno o due file immagine.
  • Stampa — lascia solo attività in \Windows\System32\spool\PRINTERS\, che è un suo artefatto forense, non davvero un argomento USN.

Per una visione di threat model più ampia, la pagina Exfiltration di MITRE ATT&CK elenca ogni tecnica e dove lascia residui. USN copre direttamente forse un terzo; il resto richiede log eventi, catture di rete o cronologia browser.

Esempio operativo

Il tipo di CSV che si esporterebbe da una vera missione per dimostrare esfil:

OraRazionaliPercorsoNote
19:42:11FileCreate Close\Users\b\Temp\q3\Nuova cartella
19:42:13–14FileCreate × 84\Users\b\Temp\q3\*.xlsxRaffica
19:44:08FileCreate Close\Users\b\Temp\q3.zipArchivio
19:44:08–22DataExtend × ~40\Users\b\Temp\q3.zipCresce a 187 MB
19:44:45RenameNewName Close\Users\b\OneDrive\q3.zipSpostato in sync
19:45:11FileDelete × 84\Users\b\Temp\q3\*Pulizia

Quella timeline è una prova schiacciante. Senza il journal, andrebbe ricostruita dal registro, da Prefetch e dalle shadow copy — cinque volte più lavoro, metà della fiducia.