Alternate Data Streams (ADS)

Applicazione pratica ma basilare di ADS in ambienti CTF e Pentesting

Cos’è Alternate Data Streams (ADS)?

È una caratteristica che è stata aggiunta al New Technology File System conosciuto anche come NT File System (NTFS) per aumentare la comparabilità con il Macintosh Hierarchical File System (HFS), in termini profani è qualcosa che ha reso più facile l’uso dei tuoi file sul tuo Mac (Apple) e PC (Windows).

Come funziona e perché dovrebbe interessarmi?

Di solito quando salvi qualcosa in un file, un file .txt per esempio, stai memorizzando il contenuto del tuo file (testo ascii) in un flusso di dati che windows riconosce come il flusso predefinito, così la prossima volta che aprirai il tuo file accederai allo stesso flusso per visualizzare i tuoi dati.

Come esempio

Se creo un file .txt usando il Blocco Note sul mio sistema windows e lo salvo in un file (secret.txt) allora ogni volta che lo apro vedrei i miei dati.

Secret.txt Notepad

Secret.txt Blocco note

Ma cosa succede se ci sono altri dati nel file di cui non si è a conoscenza?

Ecco dove entrano in gioco i flussi di dati alternativi.

Io userò cmd.exe (Prompt dei comandi) per dimostrare gli esempi in modo che sia più facile per le persone capire la CLI (Command Line Interface), ma gli stessi risultati possono essere ottenuti anche usando Power Shell.

Quindi quando uso il prompt dei comandi per visualizzare il contenuto della mia directory posso vedere il mio secret.txt e la dimensione del file è di 33 byte.

dir
command prompt

command prompt

Questo sembra un file normale ma cosa succede se aggiungo la /r al mio comando?

dir /r
Command prompt dir /r

Command prompt dir /r

Ora possiamo vedere un altro file nella stessa directory con lo stesso prefisso del nostro secret.txt ma con un suffisso di evil.txt dove il $DATA ci dice che questo è un flusso di tipo $DATA.

Aggiungendo il /r al nostro comando possiamo vedere che entrambi i file sono nella stessa directory ma possiamo vedere solo il secret.txt sul nostro Desktop, possiamo anche vedere la differenza nella dimensione del file mentre il nostro file secret.txt è ancora 33 byte il nostro secret.txt:evil.txt è 74 che è più di 2 volte il nostro secret.txt.

Comparando l’output di entrambi i comandi.

# First Command
dir# Second Command
dir /r
Comando Prompt dir e dir /r

Comando Prompt dir e dir /r

In questo possiamo vedere le informazioni da entrambi i comandi in modo più preciso siamo in grado di vedere i cambiamenti in una prospettiva più chiara.

  • Entrambi gli output dicono che ci sono solo 2 file nella directory e ci danno la stessa dimensione, è perché secret.txt e secret.txt:evil.txt sono lo stesso file non file diversi ma i dati sono memorizzati in flussi separati.
  • Lo spazio totale utilizzato nella directory e disponibile sul sistema sono ancora gli stessi.

Vediamo il contenuto di entrambi insieme:

Mentre li visualizziamo entrambi possiamo vedere che il contenuto è diverso, possiamo anche vedere la differenza nel nome dei file, che ci dà l’idea che possiamo facilmente memorizzare informazioni in un flusso di dati alternativo per molteplici scopi. I flussi di dati seguono una convenzione di denominazione di base nel file system NTFS che è FileName:StreamName:StreamType avendo detto che il nome completo di secret.txt nel file system NTFS sarebbe secret.txt::$DATA

Un metodo alternativo per visualizzare entrambi senza aprirli in blocco note sarebbe.

# View secret.txt
type secret.txt# View Alternate Data Stream
more < secret.txt:evil.txt