In questo articolo analizzeremo una tecnica di evasione impiegata da molti malware: l’utilizzo degli Alternate Data Streams (ADS). Sebbene questa strategia di occultamento dei payload dannosi all’interno del file system sia ben nota e datata, il suo impiego è tutt’altro che obsoleto. La capacità degli ADS di eludere i sistemi di rilevamento tradizionali li rende ancora oggi uno strumento efficace nelle mani degli attaccanti. Per questo motivo, comprenderne a fondo il funzionamento è essenziale per rafforzare le difese informatiche.
Cos’è l’Alternate Data Stream (ADS)?
L’ Alternate Data Stream (ADS) è una funzionalità del file system NTFS, introdotta per la prima volta in Windows NT 3.1, con l’obiettivo di garantire la compatibilità con il file system HFS (Hierarchical File System) utilizzato sui computer Macintosh. Grazie agli ADS, un singolo file può contenere più flussi di dati, utilizzabili per memorizzare metadati o altri tipi di informazioni aggiuntive.
Questa caratteristica è esclusiva dei file system NTFS e non è disponibile nei file system FAT o in altri tipi di file system.
Come funzionano gli ADS?
Per comprendere meglio il funzionamento degli ADS, vediamo un esempio pratico utilizzando il prompt dei comandi (CMD):
echo "Questo non è un ADS" > file.txt
echo "Questo è nell'ADS" > file.txt:stream1
- Il primo comando crea un file di testo chiamato file.txt e inserisce nel suo flusso principale la stringa: “Questo non è un ADS”.
- Il secondo comando crea un flusso di dati alternativo associato allo stesso file, denominato stream1, e vi inserisce la stringa: “Questo è nell’ADS”.


Se si esegue il comando DIR prima e dopo la creazione dell’ADS, file.txt continuerà a mostrare la stessa dimensione (24 byte nell’esempio). Questo perché gli ADS non incidono sulla dimensione visibile del file principale.
Come identificare un ADS
Per verificare l’esistenza di un ADS, è necessario utilizzare il comando DIR /R, che elenca i flussi di dati associati ai file:

Come leggere i contenuti di un ADS
Per accedere ai dati presenti in un ADS, si possono utilizzare comandi come more o sort. Ad esempio:
more < file.txt:stream1
sort < file.txt:stream1

Creare ADS tramite codice
Gli ADS possono essere creati e gestiti anche tramite programmazione, utilizzando le API di Windows. Ecco un esempio in C:
#include <windows.h>
#include <stdio.h>
void main() {
HANDLE hStream;
DWORD dwRet;
hStream = CreateFile(
"file.txt:stream2",
GENERIC_WRITE,
FILE_SHARE_WRITE,
NULL,
OPEN_ALWAYS,
0,
NULL );
if (hStream == INVALID_HANDLE_VALUE) {
printf("Cannot open file.txt:stream2\n");
} else {
WriteFile(hStream, "This data is hidden in the stream. Can you read it???", 53, &dwRet, NULL);
CloseHandle(hStream);
}
}
Dettagli del codice:
- La funzione CreateFile permette di aggiungere un ADS specificando il nome del flusso dopo il nome del file, separandolo con i due punti (:). Ad esempio: file.txt:stream2.
- La funzione WriteFile consente di scrivere i dati all’interno del flusso.
Gli ADS sono utili per gestire dati supplementari o metadati senza alterare il contenuto principale di un file. Tuttavia, possono essere sfruttati in modo improprio per nascondere informazioni malevole, rendendoli un possibile vettore di attacco. Pertanto, è importante monitorarne l’utilizzo e adottare misure per rilevare eventuali abusi.
Uso legittimo di un ADS
Gli ADS consentono di nascondere dati aggiuntivi all’interno di un file. Un esempio pratico di utilizzo è il flusso Zone.Identifier, utilizzato da Microsoft per identificare la provenienza di un file. Questo flusso può contenere informazioni come la zona di sicurezza da cui proviene il file (es. Internet). Vediamo un esempio.
Scarichiamo un’immagine da Internet, ad esempio una foto di un cane, e analizziamone l’ADS.




Contenuto del Zone.Identifier:
- [ZoneTransfer]: Intestazione che identifica la sezione relativa alla zona di trasferimento.
- ZoneId=3: Significa che il file proviene da una zona non sicura, come Internet.
- ReferrerUrl: Specifica l’URL della pagina web da cui è stato scaricato il file, in questo caso: https://www.laspiegazione.it/cani-piu-belli-del-mondo-razze-e-caratteristiche/.
- HostUrl: Indica la posizione diretta del file su Internet: https://www.laspiegazione.it/wp-content/uploads/2021/07/Cani-piu-belli-del-mondo.jpg.
Alcuni malware, come CoinMiner, tentano di eliminare il flusso Zone.Identifier per nascondere la loro origine da Internet. Questo rappresenta un rischio in termini di sicurezza, poiché rimuove un’indicazione utile per l’identificazione del file scaricato. Gli analisti di malware utilizzano strumenti di reversing per identificare queste operazioni e capire il comportamento del malware.

Uso non legittimo di un Alternate Data Stream (ADS): Nascondere i file binari
Gli Alternate Data Streams (ADS) possono essere usati dai malware per occultare file eseguibili o altre informazioni sensibili. In questa dimostrazione, mostreremo come sia possibile nascondere, un eseguibile, come quello della calcolatrice di Windows, all’interno di un ADS, un’operazione che può sembrare innocua ma che evidenzia la potenza e i rischi di questa tecnica.
Vediamo come funziona:
type C:\Windows\System32\calc.exe > file.txt:stream1
wmic process call create “FILE PATH\file.txt: stream1
In questo esempio, il comando type copia il file eseguibile della calcolatrice (calc.exe) nel flusso di dati ” stream1“.
Per eseguire il file nascosto, possiamo utilizzare lo strumento Windows Management Instrumentation Commandline (WMIC).
Sebbene questa dimostrazione mostri come una tecnica di occultamento possa essere utilizzata per nascondere applicazioni legittime, la stessa metodologia può essere impiegata da malintenzionati per nascondere malware o altre attività dannose.
Metodi Alternativi per individuare un Alternate Data Stream (ADS)
Come accennato in precedenza, la tecnica di nascondere i dati tramite ADS è ben nota, e strumenti come Windows Defender e diversi antivirus moderni sono già in grado di rilevare e mappare questi flussi. Tuttavia, un amministratore di sistema o un analista forense può individuare gli ADS utilizzando strumenti specifici e comandi mirati.
Uso di Streams di Sysinternals
Uno strumento efficace per individuare gli ADS è Streams, fornito da Sysinternals. Questo tool consente di identificare rapidamente tutti i flussi associati ai file in un sistema.

Uso di PowerShell
Se si preferisce utilizzare PowerShell, è possibile ricorrere al comando Get-Item con il parametro -Stream. Ecco un esempio:
Get-Item -Path "FILE PATH" -Stream *

Per analizzare tutti i file in una directory:
ls | % {gi $_.FullName -stream *} | ? stream -ne ':$DATA'

Per eseguire una scansione ricorsiva di tutte le sottodirectory:
ci -Recurse | % {gi $_.FullName -stream *} | ? stream -ne ':$DATA'

Come Nascondere un Alternate Data Stream (ADS)
L’occultazione degli ADS si basa su alcuni nomi di file riservati al Windows environments. Alcuni di questi nomi includono:
CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LP6, LPT7, LPT8 e LPT9
Ora vediamo cosa succede quando proviamo a creare un file utilizzando uno di questi nomi riservati:
echo “Test ADS” > COM1
echo “Test ADS” > COM1.txt
In entrambi i casi, il file non viene creato:

Esiste un metodo per aggirare il controllo sui nomi riservati. Utilizzando i prefissi \\?\ o \\.\, si possono indicare alle API di Windows di ignorare completamente l’analisi delle stringhe. In questo modo diventa possibile creare file con nomi riservati.
echo “Test ADS” > \\?\PATH_FILE\COM1.TXT type \\?\PATH_FILE\COM1.TXT

Abbiamo creato il file con successo. Ora proviamo a integrare un Alternate Data Stream (ADS) nel file appena generato.
echo "Questo è un ADS" > \\?\PATH_FILE\COM1.TXT:stream1

A questo punto, Windows non è più in grado di individuare l’ADS associato al file. Solo chi conosce esattamente il nome del file e del flusso potrà accedervi o eseguirne il contenuto tramite comandi specifici.
Un aspetto interessante da notare è che, tentando di eliminare il file tramite l’interfaccia grafica di Windows, viene mostrato un messaggio di Accesso negato, anche se si dispone di permessi amministrativi.
Per poter eliminare il file basta digitare il seguente comando:
del \\?\PATH_FILE\COM1.TXT
Esiste una soluzione chiamata LADS, che è in grado di identificare gli ADS associati ai nomi riservati, ed è disponibile su GitHub

Conclusione
Nonostante la tecnica degli Alternate Data Streams (ADS) sia ben conosciuta, continua a essere utilizzata con successo negli attacchi, evidenziando l’importanza di comprenderne a fondo il funzionamento per sviluppare difese efficaci. Sebbene gli ADS siano stati introdotti per gestire metadati aggiuntivi nei file, la loro capacità di nascondere dati senza alterare il contenuto li rende un veicolo ideale per occultare payload dannosi o attività malevole.






