Windows Alternate Data Streams (abrégé ADS) que l’on peut tranduire en flux de données alternatifs est une fonctionnalité du système de fichiers NTFS.
Souvent inconnu de la plupart des utilisateurs, même confirmés, les ADS existent pourtant depuis Windows 3.1.
Dans ce tutoriel, je vous explique ce que sont les ADS, comment en créer, supprimer et les afficher dans Windows.
Enfin vous trouverez des exemples d’utilisations par des logiciels malveillants.
Table des matières
Qu’est-ce que les ADS (Windows Alternate Data Stream)
L’ADS est une fonctionnalité du système de fichiers NTFS.
Ils ont été introduits dans le système de fichiers NTFS de Windows à partir de Windows NT 3.1.
C’est capacité d’un système de fichiers NTFS à stocker différents flux de données, en plus du flux par défaut qui est normalement utilisé pour un fichier. Lorsque cette fonctionnalité a été créée, son objectif principal était de fournir un support au système de fichiers hiérarchique (HFS) de macOS.
Cette “fonctionnalité” a été mise en œuvre afin d’assurer la compatibilité avec le système de fichiers hiérarchique (HFS) de Macintosh.
En bref, le système de fichiers Macintosh stocke ses données en deux parties, la fourche des ressources et la fourche des données. La fourche de données est l’endroit où les données sont réellement contenues et la fourche de ressources est utilisée pour indiquer au système d’exploitation comment utiliser la partie données.
Windows fait la même chose avec des extensions telles que .bat, .exe, .txt, .html.
Ces extensions indiquent au système d’exploitation comment utiliser les données particulières contenues dans les fichiers.
Windows Alternate Data Streams permet donc en quelques sorte de lier un flux de données à un fichier.
Ces données peuvent être sous la forme d’un fichier binaire, un fichier texte ou un exécutable.
Windows ajoute alors un attribut $DATA, alias l’attribut de données.
executable.exe:DATA:$DATA
Comment créer un ADS
En invite de commandes
Les Alternate Data Streams se comportent exactement comme un fichier.
De ce fait, vous pouvez, par exemple, créer un ADS avec notepad comme ceci :
notepad demo.txt:ads.txt
Cela créé à la fois le fichier demo.txt qui a une taille de 0 octet et vide mais aussi l’ADS qui par contre a une taille de 4 octets.
La création d’ADS peut se faire par des redirections. Par exemple avec les commandes type ou echo :
type C:\windows\system32\whoami.exe > demo.txt:whoami.exe
echo <Les données> > demo.txt:data.txt
Mais cela ne fonctionnera PAS avec la commande copy qui traitera demo.txt comme fichier et non son ADS :
copy C:\windows\system32\calc.exe demo.txt:calc.exe
Enfin on peut utiliser WMIC pour exécuter le binaire en ADS.
Il faut spécifier le chemin complet.
wmic process call create C:\users\mak\demo.txt:calc.exe
Par le passé, on pouvait utiliser la commande start comme ceci mais cela ne semble plus fonctionner :
start C:\users\mak\demo.txt:calc.exe
En PowerShell
Powershell permet aussi de manipuler les ADS.
Par exemple pour supprimer un ADS, vous pouvez utiliser le cmdlet set-content :
set-content -path <chemin du fichier> -stream <Nom du flux de données>
Par exemple pour créer l’ADS demo.txt:ads.txt :
set-content -path C:\users\mak\demo.txt -stream ads.txt
Comment afficher les ADS : Windows Alternate Data Stream
Avec la commande dir
La commande dir peut afficher tous les flux de données alternatifs (ADS).
Pour cela, utilisez le commutateur /R :
dir /R
en PowerShell
Si vous voulez rechercher ADS dans un répertoire ou un lecteur, vous pouvez utiliser cette commande à la racine de la cible :
gci -recurse | % { gi $_.FullName -stream * } | where stream -ne ':$Data'
Puis pour afficher les données d’un ADS, on utilise la commande Get-Content :
Get-Content -path C:\users\mak\demo.txt:ads.txt -stream *
Avec des logiciels gratuits
Quelques outils permettent de lister les flux de données et parfois les supprimer.
- ADSSpy : analyse le disque pour trouver les flux de données et peut aussi les supprimer
- FRST : Analyse et liste tous les ADS (Alternate Data Streams) sur le système
- Streams de SysInternals
Comment supprimer un ADS
Supprimer le fichier, supprime aussi le flux de données qui lui est associé.
Mais vous pouvez aussi supprimer que le flux de données.
La commande CMD del permet de supprimer un ADS en invite de commandes.
Par exemple :
del C:\users\mak\demo.txt:ads.txt
Pour supprimer un ADS en PowerShell, utilisez le cmdlet remove-item comme ceci :
remove-item –path <chemin du fichier> –stream <Nom du flux de données>
L’utilisation des ADS par les logiciels malveillants
Avec les exemples de cet article, vous avez compris que les ADS sont pratiques pour cacher des fichiers.
D’autant que l’explorateur de fichiers ne les affichent pas.
De ce fait, c’est un bon moyen pour dissimuler un fichier malveillant attaché à un fichier système.
Les malwares ont très souvent utilisés les ADS par le passé et continuent pour se cacher dans le système.
Par exemple, en 2005, le Rootkit Pe386 / Rustock a utilisé les ADS pour cacher son pilote.
Plus récemment en 2018, le ransomware BitPaymer a utilisé les ADS.
Malwarebytes Anti-Malware peut détecter ces derniers en Rootkit.ADS.
Les versions récentes de Windows ont limité et durci les fonctionnalités des ADS. Cependant, une maîtrise de base des outils natifs de Windows, tels que PowerShell et WMI, ou une certaine connaissance de la ligne de commande Windows permet aux acteurs de la menace de continuer à utiliser ADS dans leurs attaques. Il est intéressant de noter que les campagnes récentes utilisant ADS sont considérées comme plutôt sophistiquées et ont tendance à minimiser l’utilisation de fichiers persistants sur le disque.