======================================================================== Les Alternate Data Streams (ADS) ======================================================================== Cette brève traite des Alternate Data Streams. Les ADS sont implémentés dans les systèmes de fichiers NTFS par toutes les versions des systèmes Windows depuis Windows 3.1 en Mai 1993. ======================================================================== 1 --- Introduction: ======================================================================== Le système de fichiers NTFS, utilisé par Windows Server 2003, Windows XP, Windows 2000 et Windows NT, a une fonctionnalité qui est peu documentée et inconnue de beaucoup de développeurs, administrateurs et utilisateurs. Cette fonctionnalité se nomme Alternate Data Streams (Flux de Données Additionnels) et permet à des données comme du texte, des graphiques ou du code exécutable d'être stockées dans des fichiers cachés. Ces derniers sont liés à un fichier visible normal. 2 --- Utilité des ADS: ======================================================================== Une des raisons principales du support des ADS par Windows (à ne pas confondre avec Active Directory Service) est de permettre le support du système de fichiers Macintosh Hierarchical File System (HFS) et ainsi de permettre à un système de type Windows NT d'être serveur de fichiers pour des clients Macintosh. Les fichiers stockés par le système de fichiers Macintosh consistent en deux parties (concept de forks): data fork et resource fork. Windows utilise l'extension de fichier (par exemple .exe) pour déterminer quel programme est associé avec un fichier, alors que Macintosh utilise le resource fork pour ceci. Windows a généralisé ce concept de resource fork et stocke les forks Macintosh dans un flux (stream) NTFS caché. Le data fork devient alors le fichier parent du flux. Les ADS ont d'autres usages. Par exemple, il est possible de stocker une image miniature d'une photo ou un track audio dans un flux NTFS. Ceci permet à un simple fichier d'avoir plusieurs composants mutimédia. Aussi, beaucoup de programmes antivirus stockent les checksums dans un flux, sous chaque fichier du disque dur. 3 --- Convention de nom pour les flux: ======================================================================== Le nom complet d'un flux est :: Par exemple: hsc.dat:stream1:$DATA . Par défaut le flux de données (data Stream) est anonyme. Si un utilisateur crée un flux se nommant "foo", son nom complet sera exemple:foo:$DATA . Les caratères ":" et la chaîne "$DATA" sont omis lors de la manipulation d'un nom de flux. 4 --- Représentation des flux: ======================================================================== StreamHSC.doc --------------> [ Stream anonyme ]---> Visible de tous les systèmes de fichiers principal StreamHSC.doc:Stream1 ------> [ Stream1 ]---> Visible seulement des volumes NTFS StreamHSC.doc:Stream2 ------> [ Stream2 ]---> Visible seulement des volumes NTFS StreamHSC.doc:StreamN ------> [ StreamN ]---> Visible seulement des volumes NTFS 5 --- Exemple de code représentant un flux NTFS: ======================================================================== #include #include void main( ) { HANDLE hFile, hStream; DWORD dwRet; hFile = CreateFile( "testfile", GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, 0, NULL ); if( hFile == INVALID_HANDLE_VALUE ) printf( "Cannot open testfile\n" ); else WriteFile( hFile, "This is testfile", 16, &dwRet, NULL ); hStream = CreateFile( "testfile:stream", GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, 0, NULL ); if( hStream == INVALID_HANDLE_VALUE ) printf( "Cannot open testfile:stream\n" ); else WriteFile(hStream, "This is testfile:stream", 23, &dwRet, NULL); } 6 --- Le risque au niveau de la sécurité des ADS: ======================================================================== Le principal risque au niveau de la sécurité est que les ADS sont complètement cachés. Ceci offre une possibilité pour des chevaux de troie, virus ou autres spywares d'en tirer un avantage certain. Les flux NTFS peuvent facilement être créés et utilisés mais ils ne peuvent être détectés que par des programmes spéciaux. Par exemple, un programme comme l'Explorateur Windows (Explorer) peut voir les fichiers normaux mais il ne peut pas voir les flux NTFS liés à des fichiers. Aussi, Explorer ne peut déterminer l'espace disque utilisé par des flux. Ceci peut permettre à un utilisateur malintentionné d'effectuer un Déni de Service en remplissant le disque dur d'un autre utilisateur de façon complètement invisible. (Les outils pour détecter les ADS sont dans le paragraphe 9). Pour être plus complet, il est utile d'ajouter qu'un flux NTFS ne peut être effacé qu'avec son fichier parent. 7 --- Les principaux dangers des flux NTFS: ======================================================================== - Les flux ne sont visibles que par des logiciels spécialisés. - Les flux ne s'attachent pas seulement aux fichiers, ils s'attachent également aux répertoires. - Il peut y avoir plusieurs flux attachés à un même fichier. - Un flux ne peut être effacé. Le fichier parent avec lequel il est attaché doit être effacé pour que le flux soit enlevé. - Un flux attaché à un répertoire racine, par exemple "c::MonStream" ne peut être effacé. - "L'espace disque disponible" affiché par un programme comme Windows Explorer ne prend pas en compte l'espace disque consommé par les flux. - Un programme malveillant peut continuer à écrire dans un flux, et ainsi remplir le disque dur d'un utilisateur et rendre le nettoyage très difficile. - Les flux peuvent être executés. - Les flux qui s'exécutent n'ont pas leur nom correctement affiché dans le Gestionnaire des tâches. Par exemple, si le flux "c:\hsc.txt:MonStream" s'exécute, le Gestionnaire des tâches affichera seulement "hsc.txt". - Il est possible de créer un site Web secret sur un serveur IIS 5.x et inférieur. 8 --- Comment créer un flux NTFS: ======================================================================== Créer, écrire dans un flux et lire un flux est virtuellement identique que pour un fichier normal, excepté pour le nom de fichier du flux qui consiste en deux parties séparées par une colonne. La première partie pointe sur le fichier parent du flux. La seconde partie est le nom actuel du flux. La syntaxe utilisée pour créer un ADS est relativement simple: c:\echo Ceci est un ADS > hsc.txt:MonStream Ceci crée (ou lit depuis, si le flux existe déjà) le flux "MonStream" qui est lié au fichier parent c:\hsc.txt. Le flux NTFS peut être affiché en tapant: c:\notepad hsc.txt:MonStream La commande "dir" ou bien un explorateur de fichiers, comme Explorer, affichera que le fichier c:\hsc.txt fait O octet. Aussi le fichier "c:\hsc.txt:MonStream" ne sera pas détecté. Ceci provient du fait que "MonStream" n'est pas un vrai fichier. "MonStream" est en fait un fichier de données lié au fichier parent c:\hsc.txt. Modifier le fichier parent n'affectera aucunement les flux liés à ce fichier. De même modifier un flux n'affecte pas son fichier parent. "MonStream" est un stockage caché. Exemple pour créer un Alternate Data Stream exécutable: c:\type c:\winnt\notepad.exe > hsc.txt:NotepadCache.exe c:\type c:\hsc\hack.exe > hsc.txt:hack.exe Exemple avec netcat: C:\> type c:\winnt\system32\nc.exe > c:\tmp\log.txt:backup.exe C:\> start /b c:\tmp\log.txt:backup.exe -L -p 5555 -d -e cmd.exe C:\> at \\127.0.0.1 14:30 /every:M,T,W,Th,F,S,Su start /b c:\tmp\log.txt:backup.exe -L -p 5555 -d -e cmd.exe 9 --- Outils pour détecter les ADS: ======================================================================== Microsoft ne fournit pas d'outil ou d'utilitaire par défaut pour détecter la présence d'ADS. - L'outil NTFSext.exe peut être téléchargé, de même que le fichier strmext.dll qui est à mettre dans le répertoire system32. Taper: regsvr32 StrmExt.dll. Ceci permet d'avoir un nouvel onglet dans les propriétés des fichiers de l'Explorateur Windows. http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnfiles/html/ntfs5.asp Windows Server 2003 R2 ( http://www.microsoft.com/windowsserver2003/R2/trial/default.mspx ) inclus des possibilités de quotas sur les répertoires et non plus seulement sur les volumes grâce à la commande DIRQUOTA.EXE. Le mécanisme des quotas fonctionne désormais avec les Alternate Data Streams donc des utilisateurs malveillants ne pourront plus cacher de données dans les ADS. Pour les serveurs IIS, l'outil URLScan devrait être utilisé pour détecter la présence éventuelle de sites Web secrets. http://www.microsoft.com/windows2000/downloads/recommended/urlscan/default.asp - Un très bon outil en ligne de commande pour détecter les ADS est LADS écrit par Franck Heyne. http://www.heysoft.de/ exemple d'utilisation: LADS - Freeware version 4.00 (C) Copyright 1998-2004 Frank Heyne Software (http://www.heysoft.de) This program lists files with alternate data streams (ADS) Use LADS on your own risk! Scanning directory C:\hsc size ADS in file ---------- --------------------------------- 32768 C:\hsc\hsc1.txt:keylogger.exe 143360 C:\hsc\hsc2.txt:psexec.exe 86016 C:\hsc\hsc3.txt:pslist.exe 262144 bytes in 3 ADS listed - Streams de Sysinternals http://www.sysinternals.com/Utilities/Streams.html - SDIR http://www.wftpd.com/downloads/sdir.zip - TDS-3 http://tds.diamondcs.com.au/ - Un outil graphique: Stream Explorer http://www.rekenwonder.com/streamexplorer.htm - ShowStream de JC Bellamy http://jc.bellamy.free.fr/fr/stream.html#showstream - lns http://ntsecurity.nu/toolbox/lns/ - scSTREAMS http://www.softcorp.us/scstreams.php?layout=print Outils qui peuvent toujours servir en cas de besoin: - GNU utilities for Win32 http://unxutils.sourceforge.net/ - Copy_ads http://www.dmares.com/maresware/ac.htm#COPYADS 10 --- Exemple de détection d'une attaque $DATA dans les journaux IIS ======================================================================== Sur un serveur IIS d'une version inférieure à 6.0 sur lequel aucun correctif de sécurité n'a été appliqué, la requête http://monserveurIIS/default.asp::$DATA renvoie le source du fichier ASP au lieu d'exécuter le script. Lorsque cette attaque se produit, les journaux de IIS affichent ceci: W3C Extended Log File Format: 11:25:12 10.0.0.5 GET /default.asp::$DATA 200 11:26:07 10.0.0.5 GET /default.asp::$DATA 304 11:54:04 10.0.0.5 GET /default.asp::$DATA 200 NCSA Common Log File Format: 10.0.0.5 - - [22/Jul/2005:11:25:12 -0600] "GET /default.asp::$DATA HTTP/1.1" 200 13388 10.0.0.5 - - [22/Jul/2005:11:26:07 -0600] "GET /default.asp::$DATA HTTP/1.1" 304 123 10.0.0.5 - - [22/Jul/2005:11:54:04 -0600] "GET /default.asp::$DATA HTTP/1.1" 200 12219 Microsoft IIS Log File Format: 10.0.0.5,- ,22/Jul/2005,11:25:12,W3SVC,SERVER1,10.0.0.2,163,13388,200,0,GET,/default.asp::$DATA 10.0.0.5,- ,22/Jul/2005,11:26:07,W3SVC,SERVER1,10.0.0.2,163,123,304,0,GET,/default.asp::$DATA 10.0.0.5,- ,22/Jul/2005,11:54:04,W3SVC,SERVER1,10.0.0.2,163,12219,200,0,GET,/default.asp::$DATA 11 --- Exemple de détection d'un accès ADS dans les journaux IIS ======================================================================== La configuration par défaut d'URLScan empêche les accès aux fichiers ADS et génère les lignes suivantes dans les journaux de IIS: Client at 10.1.1.100: URL contains sequence ':', which is disallowed. Request will be rejected. Site Instance='1', Raw URL='/monserveurIIS/hsc.gif:secret' 12 --- Les algorithmes de hachages et les ADS ======================================================================== Les 2 algorithmes de hachage les plus utilisés sont le SHA-1 (Secure Hash Algorithm) qui calcule un résumé de 160 bits, et le MD5 (Message- Digest Algorithm), qui calcule un résumé de 128 bits. Ces algorithmes permettent de calculer une empreinte unique pour un fichier. Si un fichier est modifié, la valeur de l'empreinte de hachage changera également. Ceci permet de vérifier l'intégrité des fichiers. L'outil FCIV (File Checksum Integrity Verifier) de Microsoft est un outil qui permet de calculer la valeur de hachage MD5 ou SHA1 d'un fichier. http://support.microsoft.com/default.aspx?scid=kb;en-us;841290 En créant un fichier essai.txt contenant un texte quelconque, il est possible de vérifier la valeur MD5 du fichier grâce à FCIV: C:\Steph>notepad essai.txt C:\Steph>fciv.exe -md5 essai.txt // // File Checksum Integrity Verifier Version 2.05. // cf992893402a79872cd39f83fc82a177 essai.txt Si le texte du fichier essai.txt change, alors la valeur MD5 change considérablement: C:\Steph>notepad essai.txt C:\Steph>fciv.exe -md5 essai.txt // // File Checksum Integrity Verifier Version 2.05. // 2039b7f75c06cf214ad8ddb497dd212 essai.txt Tout ceci est normal. Maintenant, en créant un Alternate Data Stream dans le fichier essai.txt: C:\Steph>echo Ceci est un ADS > essai.txt:MonStream C:\Steph>fciv.exe -md5 essai.txt // // File Checksum Integrity Verifier Version 2.05. // 2039b7f75c06cf214ad8ddb497dd212 essai.txt :-( La valeur MD5 est la même! Toutes les actions effectuées sur l'ADS de ce fichier ne seront pas détectées en calculant simplement la valeur de hachage avant et après des modifications. 13 --- Conclusion ======================================================================== Les Alternate Data Stream permettent de fournir une compatibilité avec HFS et jouent un rôle important dans NTFS. Cependant, cette fonctionnalité peut être utilisée de façon malveillante. Les utilisateurs ou les administrateurs systèmes doivent prendre en compte les ADS et scanner régulièrement leurs fichiers en utilisant des outils externes à Windows. De même, un contrôle d'intégrité des fichiers doit pouvoir être réalisé sur des alternate data streams. Aussi, il ne faut pas oublier que les ADS peuvent être des fichiers exécutables et toutes les précautions doivent être prises pour protéger les systèmes. 14 --- Références ======================================================================== - Dark side of NTFS by H. Carvey pHRACK#6o Volume 0x0b, Issue 0x3c, Phile #0x03 of 0x10 http://www.phrack.org/show.php?p=60&a=3 http://patriot.net/~carvdawg/docs/dark_side.html - Alternate Data Streams: Out of the Shadows and into the Light by Ryan L. Means for GCWN v3.1 (Option 3) SANS Institute http://www.sans.org/rr/whitepapers/honors/1503.php - Alternate Data Streams for Managers GIAC http://www.giac.org/certified_professionals/practicals/gsec/1794.php - Windows NTFS Alternate Data Streams by Don Parker http://www.securityfocus.com/infocus/1822 - FAQ: Alternate Data Streams in NTFS by Frank Heyne http://www.heysoft.de/nt/ntfs-ads.htm - A Programmer's Perspective on NTFS 2000 Part 1: Stream and Hard Link http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnfiles/html/ntfs5.asp - Les flux (méta-données dans les partitions NTFS) par JC Bellamy http://jc.bellamy.free.fr/fr/stream.html ======================================================================== Stéphane Milani Hervé Schauer Consultants