NTFS consente a un file di avere più di un attributo $DATA. Il primo è senza nome e contiene il contenuto principale del file. Ogni $DATA aggiuntivo è nominato e agisce come un flusso parallelo agganciato allo stesso file. Questi flussi extra sono gli Alternate Data Streams (ADS).
La sintassi
Si leggono e scrivono ADS da PowerShell o cmd:
echo testo nascosto > note.txt:segreto
type note.txt:segreto
note.txt appare vuoto in Esplora risorse e in dir — il suo $DATA primario pesa zero byte. Ma il flusso nominato segreto contiene il tuo testo. Dal punto di vista dell'utente il file si comporta normalmente; il flusso alternativo viaggia in parallelo.
Dove si incontrano ADS in modo legittimo
Windows stesso usa gli ADS per la propria contabilità. Il più comune è Zone.Identifier, agganciato a ogni file scaricato da Internet. Contiene un breve blocco di testo che descrive l'URL d'origine e la zona di sicurezza. È ciò che fa scattare l'avviso «questo file proviene da un altro computer».
Altri usi legittimi:
$KSPper i file di layout di tastieraOECustomPropertyper gli allegati di Outlook- vari flussi di thumbnail e indici di ricerca
Perché gli attaccanti amano gli ADS
Tutto ciò che vive fuori dal flusso principale tende a essere invisibile per:
- viste delle cartelle che mostrano solo la dimensione dei file (riportano quella del flusso senza nome);
- antivirus che scansionano solo il flusso di default;
- revisioni manuali da parte dell'analista che non ha chiesto esplicitamente i flussi.
Schema classico: depositare un payload in documento-lecito.docx:payload.exe e lanciarlo via WMI. Il file sembra un documento Word, e tale rimane finché non si pongono le domande giuste.
Come rilevarli
dir /R elenca ogni flusso di ogni file in una directory. L'output mostra la dimensione del flusso accanto al nome del flusso:
1.234.567 documento-lecito.docx
45.056 documento-lecito.docx:payload.exe:$DATA
L'equivalente più leggibile in PowerShell:
Get-Item documento-lecito.docx -Stream *
Perché $MFT è la lente migliore
L'enumerazione file per file può perdere flussi su file ai quali non si era pensato. $MFT non ha questo problema: ogni attributo è lì, nel record. Percorrere l'MFT ed elencare gli attributi $DATA di ogni voce — nominati e no — restituisce in un solo passaggio l'inventario completo di tutti i flussi del volume.
In triage, è la differenza tra «devo ricordarmi di controllare gli ADS» e «li ho già controllati tutti».