Gli Alternate Data Streams (ADS) sono una categoria di oggetti nota da molto tempo tra gli addetti ai lavori, ma purtroppo ancora sconosciuta alla maggior parte dei normali utenti. Se non ne avete mai sentito parlare probabilmente rimarrete sorpresi o sconcertati dalla lettura di questo articolo. Recentemente l'argomento è tornato di attualità dopo la scoperta di trojan, adware ed altri codici dannosi che fanno uso di questa tecnologia per rendersi virtualmente invisibili riuscendo così ad eludere i controlli degli strumenti anti-malware.
Di seguito si illustrerà il funzionamento di questi oggetti, se ne evidenzieranno i pericoli e si provvederà a descrivere una serie di programmi e di tecniche che permettono all'utente la loro manipolazione.
Cosa sono gli ADS.
Gli Alternate Data Streams sono disponibili unicamente su partizioni NTFS. In questo tipo di filesystem le informazioni su file e cartelle sono memorizzate in una tabella chiamata Master File table (MFT). In questa regione del disco ogni file è identificato da una collezione di oggetti chiamati attributi. Tra questi troviamo, per esempio, il nome assegnato al file, la data di creazione, la data dell'ultima modifica, i descrittori di protezione e, ovviamente, i dati che ne rappresentano il contenuto.
Il fattore importante per le nostre considerazioni è che NTFS permette la creazione di più di un attributo dati per ogni singolo file. Il flusso dati principale, quello che tradizionalmente consideriamo il contenuto del file, può quindi essere affiancato da uno o più flussi dati alternativi. Da qui deriva il nome degli oggetti di cui ci stiamo occupando. Usando una analogia forse più familiare possiamo paragonare gli ADS agli allegati di un messaggio di posta elettronica in cui il flusso dati principale rappresenta il corpo dell'email.
A cosa servono e perché esistono gli ADS
In origine Microsoft implementò questa caratteristica in NTFS per consentire a Windows NT di poter operare come file-server per i sistemi Macintosh basati sul filesystem HFS. Il filesystem di Apple infatti memorizza dati supplementari relativi al file, quali icone e altri metadati, in una struttura separata simile ad un ADS. In questo modo i sistemi Mac potevano operare in modo trasparente sui dati presenti sul server NT.
Con l'avvento di Windows 2000 l'uso degli stream alternativi si è esteso ad altre interessanti applicazioni. Da questo sistema in poi, per ogni documento, è possibile memorizzare informazioni aggiuntive quali titolo, oggetto, autore, parole chiave ecc. attraverso la scheda Riepilogo presente nelle Proprietà del relativo file. Queste meta-informazioni vengono salvate in appositi ADS di sistema.
Quelle elencate non sono comunque le uniche applicazioni possibili. I sistemi operativi Windows 2000/XP/2003, ma anche applicazioni di terze parti, usano gli stream alternativi per memorizzare informazioni di varia natura. Di alcune di queste si parlerà in seguito.
ADS: un pericolo per la sicurezza?
Microsoft ha documentato gli Alternate Data Streams fin dal primo rilascio di NTFS, non si tratta quindi di oggetti sconosciuti. Il problema di fondo sta piuttosto in un supporto praticamente nullo a livello utente da parte del sistema operativo. In sostanza Windows non offre nessuno strumento per verificare la presenza di ADS nei file, per analizzarne il contenuto o per eliminarli. Questo comporta che risultino praticamente invisibili: sia da Esplora risorse sia dal Prompt dei comandi l'unico flusso dati visibile è quello principale e analoghe considerazioni valgono per la dimensione del file visualizzata. Considerando un caso estremo è possibile avere un documento di dimensione apparentemente nulla che in realtà contiene uno stream alternativo di dimensioni pari a vari GByte.
Di seguito si elencano alcune caratteristiche degli ADS che contribuiscono ad indebolire la sicurezza del sistema:
- Sono virtualmente invisibili per l'utente e per i programmi che non li supportano.
- La dimensione del file visualizzata dal sistema è sempre e solo quella del flusso principale.
- Possono essere allegati a file ma anche a cartelle.
- Possono contenere qualsiasi tipo di dato: un semplice testo, una immagine ma anche script e codice eseguibile.
- È possibile l'esecuzione diretta di un ADS eseguibile incapsulato in un semplice file di testo.
- Nessun limite in dimensione viene posta ai flussi alternativi.
- L'unico effetto visibile in seguito all'aggiunta o alla modifica di un ADS è il cambiamento della data del file.
Tutto questo porta a scenari in cui gli ADS possano potenzialmente essere:
- Luogo dove malware può nascondere indisturbato il proprio codice.
- Luogo dove pirati informatici possono nascondere dati e strumenti di lavoro (Hack tools).
- Fonte di attacchi DoS (Denial of Service) nei confronti del filesystem. E sufficiente creare un ADS grande al punto tale da riempire totalmente il disco fisso. Data la natura invisibile di questi dati sarà estremamente difficile individuare il problema.
Manipolare i flussi di dati alternativi.
Windows non mette a disposizione strumenti specifici per la gestione degli ADS. Attraverso alcuni stratagemmi è comunque possibile aggiungere flussi alternativi ad un file tramite il Prompt dei comandi e l'uso del Blocco note. È inoltre possibile leggerne il contenuto a patto che se ne conosca a priori l'esistenza e il nome esatto. Non esiste nessun metodo nativo che consenta di scansionare il filesystem e di enumerare gli ADS.
A differenza del flusso dati principale ogni stream alternativo è identificato da un nome. Per fare riferimento un particolare ADS all'interno di un file si usa la seguente notazione
nome file:nome stream
ad esempio, relazione.doc:invisibile.txt indicherà lo stream di nome invisibile.txt all'interno del file relazione.doc
Per procede con gli esperimenti descritti di seguito sarà opportuno creare nella radice del disco una cartella c:ads in cui salveremo i nostri file di test. A questo punto non ci resta che aprire il Prompt dei comandi (Start->Programmi->Accessori->Prompt comandi) e posizionarci nella nuova cartella con il comando:
cd ads
Ora possiamo procedere.
Creare un semplice ADS
In questo primo esperimento aggiungeremo uno stream alternativo ad un file esistente. Cominciamo col creare un file di testo tramite il blocco note, digitiamo qualche parola e salviamolo nella cartella c:ads con il nome di testo.txt.
Torniamo al nostro Prompt e digitiamo
c:ads> echo Questo è un ADS > testo.txt:invisibile.txt
In questo modo avremo aggiunto lo stream alternativo di nome invisibile.txt contenente il testo "Questo è un ADS" all'interno del file testo.txt precedentemente creato.
Se a questo punto apriamo nuovamente il file con il Blocco note non noteremo alcun cambiamento. Lo stream aggiunto risulta invisibile.
Leggere un ADS
Per leggere il contenuto dello stream appena creato è possibile usare ancora una volta il Blocco note. Dal prompt sarà sufficiente digitare:
c:ads> notepad testo.txt:invisibile.txt
Magicamente vedremo il contenuto dello stream nascosto. Il blocco note è infatti uno dei pochi programmi di Windows in grado di leggere tali dati. Si noti invece come il comando
c:ads> type testo.txt:invisibile.txt
non dia il risultato sperato.
Allegare un file ad un altro
In questo caso vogliamo aggiungere un file già esistente al nostro documento cavia testo.txt. Se ipotizziamo di avere nella stessa cartella una file di testo di nome documento.txt possiamo usare il comando:
c:ads> type documento.txt > testo.txt:ads2.txt
A questo punto il nostro file avrà un ulteriore flusso dati di nome ads2.txt il cui contenuto sarà quello del file documento.txt.
È possibile allegare qualsiasi tipo di file, anche un eseguibile:
c:ads> type
c:windowssystem32calc.exe > testo.txt:trojan.exe
Abbiamo appena iniettato il programma calcolatrice di Windows (calc.exe) in uno stream di nome
trojan.exe.
Lanciare un ADS eseguibile
La pericolosità della tecnica consiste nel fatto
che non
è necessario estrarre il flusso eseguibile dal file prima di
mandarlo in esecuzione. L'operazione avviene attraverso il comando start.
c:ads> start
c:adstesto.txt:trojan.exe
È necessario specificare il percorso completo del
file
all'interno del comando. Il percorso può essere assoluto, come nel caso precedente, o
anche
relativo:
c:ads> start
.testo.txt:trojan.exe
In entrambi i casi vedremo magicamente spuntare la calcolatrice sul nostro desktop.
Il taskmanager di Windows Xp mostra chiaramente che il processo è uno stream alternativo ma quello di Windows 2000 mostra solo il nome del file principale.
Cancellare un ADS da un file
In questo caso purtroppo le cose si complicano. L'unico modo per ripulire un file dagli allegati indesiderati è cancellarlo. In alternativa è possibile copiare preventivamente il contenuto del flusso principale in un secondo file:
c:ads> type testo.txt > testo2.txt
c:ads> del testo.txt
c:ads> ren testo2.txt testo.txt
Ora il nostro file risulta pulito.
In alternativa è possibile copiare il file su una
partizione che non adotti il filesystem NTFS, ad esempio FAT32 oppure
su un Floppy. Tutti
gli ADS verranno eliminati dopo aver confermato l'azione nella finestra
che compare.
ADS e cartelle
In modo simile è possibile allegare dati
alternativi ad una cartella. Col seguente comando si aggiunge uno
stream
alla cartella corrente cioè a c:ads
c:ads> type
documento.txt > :info.txt
L'eliminazione di stream da una cartella è
logicamente una
questione un po' più complessa. Usando unicamente gli strumenti finora visti la cosa diventa praticamente
impossibile se la cartella è
la
radice c:.
Strumenti di terze parti
Nella sezione precedente siamo riusciti in qualche modo a
leggere e
scrivere
ADS con i soli strumenti messi a disposizione da Windows. Nessuno di
questi permette comunque la scansione sistematica dei file e
l'enumerazione
degli stream. A questo problema cercano di porre rimedio i programmi
descritti di seguito.
LADS
LADS
è un semplice programma freeware funzionante da riga di
comando. Permette la scansione di file, cartelle e intere partizioni
alla ricerca di flussi di dati alternativi. Di ognuno viene
indicato il nome e la dimensione. È possibile ottenere l'help
digitando lads /?
STREAMS
Streams prodotto da Sysinternals
è del tutto simile al programma precedente. In
più offre la possibilità di ripulire i file dagli ADS tramite l'opzione -d. È possibile ottenere l'help
digitando
streams /?
CrucialADS
CrucialADS
è una utility che funziona tramite una semplice
interfaccia
grafica. Non offre molte funzioni, è possibile scansionare
solo
intere partizioni e non è possibile cancellare o analizzare
gli
stream. È necessario fornire i propri dati prima di procedere al
download gratuito.
ADSSpy
ADSSpy
di Merjin software funziona tramite una comoda interfaccia grafica. È
possibile analizzare solo i file di sistema (Quick scan)
oppure
l'interno disco fisso. Durante la scansione è possibile far
ignorare al programma alcuni flussi di dati alternativi usati dal
sistema. È inoltre possibile ripulire un file da tutti gli ADS.
Una nota interessante è che ADSSpy è
già incluso in Hijackthis un noto programma prodotto dalla
stessa Merjin. È possibile raggiungere questa funzione attraverso il
pulsante Open misc tools presente nella pagina
iniziale e poi scegliendo la voce Open ADS Spy...
NTF ext
NTFS
ext è una
estensione creata da uno sviluppatore Microsoft che
permette l'aggiunta di una nuova scheda Streams
nelle proprietà del file o della cartella.
Per installare l'estensione dovrete
seguire i seguenti passi:
- fate doppio click sul file scaricato e scompattate l'archivio autoestraente in una cartella del desktop
- nella cartella estratta troverete un altro archivio di nome StrmExt.zip. Da questo file dovrete estrarre i
file StrmExt.dll, RWStream.vbs, HardLinks.vbs salvarli nella cartella c:windowssystem32 - premete Start->Esegui... e digitate regsvr32 StrmExt.dll
- se volete rendere visibile la nuova scheda anche per le cartelle dovrete aggiungere la seguente chiave di registro: HKEY_CLASSES_ROOTDirectoryshellexPropertySheetHandlers{C3ED1679-814B-4DA9-AB00-1CAC71F5E337}
- se volete rendere visibile la scheda streams anche per le partizioni aggiungete inoltre: HKEY_CLASSES_ROOTDriveshellexPropertySheetHandlers{C3ED1679-814B-4DA9-AB00-1CAC71F5E337}
- a questo punto potete sperimentare la nuova funzione.
NTFSext permette di visualizzare e modificare il
contenuto degli stream e di cancellarli. È da notare comunque che
l'estensione sembra avere dei problemi con i percorsi dei file che
contengono degli spazi. Tra questi troviamo quelli che contengono Documents
and settings.
Considerazioni e conclusioni
Gli Alternate Data Streams non sono in sé
pericolosi, purtroppo è la loro implementazione che
li rende un potenziale rischio. La loro virtuale
invisibilità viene già usata da trojan e adware
quali Download.Fugif, Trojan.Comxt e
Adware.Iefeats.
Il software antispyware AdAware dichiara esplicitamente di scansionarne il contenuto degli ADS ma questo aspetto è in generale forse un po' trascurato. I produttori di antivirus sostengono che uno stream alternativo di tipo eseguibile deve essere caricato in memoria prima di essere lanciato. Questo consente al motore di scansione in tempo reale di intervenire e bloccare l'infezione. Il problema in ogni caso rimane, un antivirus che non analizza gli ADS non sarà mai in grado di eliminare il codice dannoso dal computer.
Per quanto riguarda l'uso legittimo di tali oggetti infine si
elencano alcuni ADS di sistema in cui probabilmente vi imbatterete:
Zone.Identifier [PDF]: se usate Windows XP sp2 contraddistingue tutti i file scaricati da internet.
Systeminformation: contraddistingue l'aggiunta di metainformazioni tramite la scheda Proprietà->Riepilogo.
Encriptable: sempre presente nei file nascosti thumbs.db contenenti la cache delle anteprime delle immagini.