Que sont les ADS - Alternate Data Stream ?
ADS (Flux de Données Additionnels - ne pas confondre avec Active Directory Service) est une technologie exclusive aux
partitions NTFS de Windows (Windows NT, 2000 et XP) permettant d'ajouter aux objets visibles de type "fichiers" (racine d'un disque, répertoire, fichier), en plus des données "normales" le constituant, un ou plusieurs flux de données additionnelles totalement invisibles dites "méta-données", pouvant être de toutes natures (texte, graphique, code exécutable...).
La technologie fut implémentée dans NTFS à partir de Windows 3.1 en mai 1993 par soucis de compatibilité avec "Fork" dans le système de gestion de fichiers HFS (Hierarchical File System) du MacIntosh. Le but était de permettre à des serveurs sous Windows NT d'être serveurs de fichiers pour des clients Mac. Dans HFS de Mac, les fichiers sont stockés en 2 objets : "data fork" et "resource fork". Par exemple :
- Sous Windows (hérité de MS-Dos) c'est l'extension d'un nom de fichier (par exemple ".gif") qui permet au système, par l'intermédiaire de clés de la base de registre, de savoir quelle application est associée à ce fichier.
- Dans HFS, ce sont les informations stockées dans l'objet "resource fork" du fichier qui donnent cette association.
Les objets fichiers sous NTFS sont donc constitués de :
- leur flux de données principal, le contenu, que tout le monde peut connaître, d'un fichier dont tout le monde peut voir l'existance (pas toujours - voir les fichiers cachés de Windows)
- éventuellement, un nombre quelconque de flux de méta-données extérieurs à l'objet. Ces méta-données sont des fichiers parents du flux principal, COMPLETEMENT INVISIBLES à tous les outils standards et il est même impossible d'en soupçonner l'existence. Elles ne peuvent pas être vues avec l'explorateur de Windows, ni vues à l'intérieur des fichiers. Windows n'en rapporte même pas la taille occupée.
Seuls les volumes organisés avec le
système de gestion de fichier NTFS (ce que nous vous recommandons de faire pour des raisons de sécurité), sont concernés.
Un objet (un fichier) peut donc être constitué de plusieurs flux de données dont 1 seul, standard, est visible. La technologie ADS n'est quasiment pas employée "légalement" et est totalement inconnue du "public" car peu d'utilitaires permettent de les voir et encore moins de les manipuler. D'autre part, le transport d'un objet vers tout autre support non organisé en NTFS fait perdre complètement les méta-données (copie vers des partitions FAT16, FAT32, disquette, bande, cd-rom etc. ...). Malheureusement, les gangs crapuleux qui attaquent nos machines ont de très brillants informaticiens et utilisent cette technologie pour cacher des données ou des parasites.
Les flux ADS peuvent être un graphique, tel un icône, associé au flux principal ou un code de tracking dans la poursuite des pirates de musiques et films ou un hashcode inscrit par un antivirus ou un outil de contrôle d'intégrité...
La séparation entre un objet et ses flux ADS est à tel point complète qu'il est possible de le vérifier en utilisant les hashcodes. Les hashcodes sont des "chiffres clé" calculés à partir d'un contenu, de telle manière qu'il est impossible d'obtenir 2 hashcodes identiques à partir de 2 contenus différents (quoique des attaques sur le hashcode MD5 rendent celui-ci moins fiable actuellement). Installez
SummerProperties, vérifiez les hashcodes MD5 et SHA1 d'un fichier, ajoutez des flux ADS (noms des flux et contenus), revérifiez les hashcodes : ils n'ont pas changé !
Création d'un ADS - Exemple :
- Passez en ligne de commande (Démarrer > Exécuter)
- Saisissez : notepad c:\ads.txt
- Appuyez sur la touche "Entrée"
Si le fichier n'existe pas, il vous est demandé si vous voulez le créer. Dites Oui.
- Saisissez un texte quelconque
- Quittez notepad et enregistrez votre fichier.
Jusqu'à présent tout le monde suit : c'est une opération normale. Appelez votre explorateur de Windows : votre fichier est là et vous pouvez lire son contenu.
- Repassez en ligne de commande
- Saisissez : notepad c:\ads.txt:flux_01.txt
- Appuyez sur la touche "Entrée"
Windows ne trouve pas le fichier et propose de le créer. Dites Oui
- Mettez dedans un texte très long (pour ce test j'ai copié 80.000 caractères)
- Quittez notepad et enregistrez votre fichier
- Appelez votre explorateur de Windows. Le fichier
c:\ads.txt est toujours là, inchangé mais le fichier c:\ads.txt:flux_01.txt est introuvable - il n'existe pas.
- Repassez en ligne de commande et re-saisissez :
notepad c:\ads.txt:flux_01.txt
- Appuyez sur la touche "Entrée".
- Hop, voilà le fichier
c:\ads.txt:flux_01.txt est bien là avec tout son contenu !
Vous pouvez faire la même chose avec
un répertoire en "maître" et un flux ADS attaché, y compris si le répertoire est la racine du disque. Là ou cela devient dangereux c'est lorsque cette ADS contient des données sensibles cachées pour être relevées ultérieurement (par exemple avec des
KeyLoggers) ou pour être consultées discrètement.
Pire encore :
- Recommencez la même opération mais en mettant un suffixe .exe au flux ADS attaché à son "maître" et mettez-y un binaire (un programme comme un spyware, un keylogger, un trojan etc. ...).
- Repassez en ligne de commande et re-saisissez :
notepad c:\fichier_maitre_test.txt:fichier_ads_test.exe
- Appuyez sur la touche "Entrée". Le flux est exécuté ! Ce peut donc être un exécutable ! Son fichier maître n'est, pourtant, qu'un banal petit bout de fichier en .txt, un fichier texte inoffensif comme il peut difficilement se faire plus inoffensif.
Risques et dangers des ADS
- Les ADS (Alternate Data Stream) sont totalement invisibles (sauf à utiliser quelques utilitaires spécialisés, généralement gratuits, développés par ceux qui ont découvert leurs existences - voir Anti-ADS (Anti-Alternate Data Stream).
- Les flux ADS (Alternate Data Stream) s'attachent à tous les objets d'un système de gestion NTFS (fichiers mais aussi répertoires, y compris celui racine d'un volume).
- Un nombre quelconque de flux ADS (Alternate Data Stream) peut être attaché à un même objet.
- Les flux ADS (Alternate Data Stream) n'étant pas soupconnées par l'utilisateur, celui-ci n'a aucune raison de chercher à les analyser et encore moins de les supprimer.
- "L'espace disque disponible" (information affichée, par exemple, par l'explorateur de Windows ou par "Propriétés" d'un volume NTFS ne tiend pas compte des tailles des flux ADS (Alternate Data Stream). Un disque peut sembler vide alors que son espace est entièrement occupé par des flux ADS (Alternate Data Stream) invisibles et non décomptés. Ainsi, un parasite peut saturer un disque et, de la sorte, faire "tomber" un système, sans que l'utilisateur ou l'administrateur n'en soupconne la cause.
- Les flux ADS (Alternate Data Stream) ne peuvent être supprimés par des moyens normaux. Seul l'effacement de l'objet parent ou la copie de l'objet parent sur un support non organisé en NTFS puis sa restauration sur le supprot en NTFS permet l'effacement des flux cachés attachés. Les flux ADS (Alternate Data Stream) attachés à un dossier racine d'un volume NTFS ne peuvent pas du tout être effacés. Nota : depuis leur découverte, certains antivirus et anti-trojans les recherchent et les analysent. Il existe également, depuis, quelques utilitaires spécialisés - voir Anti-ADS Alternate Data Stream.
- Un flux ADS (Alternate Data Stream) peut être un exécutable totalement invisible et peut être exécuté sans révéler son nom ! Il se lance avec la commande "Start" comme, par exemple,
start c:\fichier_maitre_test.txt:fichier_ads_test.exe. L'exécution de cette tâche n'apparaîtra pas clairement dans le gestionnaire de tâches qui ne fera apparaître que le nom de l'objet parent !
A partir du "Service Pack 2" (SP2) de Windows XP, sorti en août 2004, Microsoft a introduit un nouvel élément dans la gestion des fichiers NTFS, : l'identifiant de zone ou "Zone Identifier" "ZoneID". Ce drapeau est positionné dans la partie "ADS" ("Alternate Data Stream") de la structure de chaque fichier issu/téléchargé depuis les applications Internet Explorer, Outlook Express ou Windows Messenger. Il permet de contrôler l'origine du fichier afin de prévenir l'utilisateur de toute exécution de fichier "parasite" provenant d'Internet à travers un des logiciels sus-mentionnés. Cette fonctionnalité fait l'objet de nombreux débats car elle peut être contournée aisément (en nécessitant néanmoins une interaction de l'utilisateur connecté).
ADS Légitimes - Metadata Files Stored in the Master File Table
Microsoft utilise plusieurs ADS légitimement. En voici la liste :
Source :
http://www.microsoft.com
System File |
File Name |
MFT Record |
Purpose of the File |
Master file table |
$Mft |
0 |
Contains one base file record for each file and folder on an NTFS volume. If the allocation information for a file or folder is too large to fit within a single record, other file records are allocated as well. |
Master file table mirror |
$MftMirr |
1 |
Guarantees access to the MFT in case of a single-sector failure. It is a duplicate image of the first four records of the MFT. |
Log file |
$LogFile |
2 |
Contains a list of transaction steps used for NTFS recoverability. The log file is used by Windows XP Professional to restore consistency to NTFS after a system failure. The size of the log file depends on the size of the volume, but you can increase the size of the log file by using the Chkdsk command. For more information about the log file, see "NTFS Recoverability" earlier in this chapter. For more information about Chkdsk, see "Troubleshooting Disks and File Systems" in this book. |
Volume |
$Volume |
3 |
Contains information about the volume, such as the volume label and the volume version. |
Attribute definitions |
$AttrDef |
4 |
Lists attribute names, numbers, and descriptions. |
Root file name index |
. |
5 |
The root folder. |
Cluster bitmap |
$Bitmap |
6 |
Represents the volume by showing free and unused clusters. |
Boot sector |
$Boot |
7 |
Includes the BPB used to mount the volume and additional bootstrap loader code used if the volume is bootable. |
Bad cluster file |
$BadClus |
8 |
Contains bad clusters for a volume. |
Security file |
$Secure |
9 |
Contains unique security descriptors for all files within a volume. |
Upcase table |
$Upcase |
10 |
Converts lowercase characters to matching Unicode uppercase characters. |
NTFS extension file |
$Extend |
11 |
Used for various optional extensions such as quotas, reparse point data, and object identifiers. |
|
|
1215 |
Reserved for future use. |
Contre-mesures
Anti-ADS Alternate Data Stream