Alternate Data Stream (ADS)

INTRODUCCIÓN

Debido a su estabilidad, funcionalidad y el alto nivel de seguridad que nos proporciona, el sistema de archivos NTFS es el preferido y utilizado en prácticamente todas las plataformas NT, W2000 y XP.

Una de las características desconocidas en el sistema de archivos NTFS son los "alternate data streams" (ADS) los cuales existen por compatibilidad con el sistema de archivos "Macintosh Hierarchical File System" (HFS) y se usan para mantener información asociada con un fichero: iconos por ejemplo.

Microsoft da los medios de creación para ADS’s específicas a través de Windows Explorer tal y como veremos posteriormente, pero las herramientas necesarias para detectar la presencia de ADS’s arbitrarias están "misteriosamente" ausentes. El sistema operativo tiene la funcionalidad nativa y ciertas herramientas para permitir a un usuario crear ADS’s y ejecutar código oculto en estos "streams". En el artículo Q101353 se reconoce que el API Win32 soporta ADS’s incoherentemente.

Veamos en detalle cómo crear y manipular y cómo ocultar código en ADS’s que puede ser ejecutado.

Existen ligeras diferencias en el tratamiento de ADS’s entre NT, W2000 y XP. Las pruebas y ejemplos presentados en este documento se refieren a XP.

CREANDO UN ADS

La sintaxis de creación es relativamente sencilla. Para crear un ADS asociado con un fichero, por ejemplo: fichero.txt, simplemente añadir a continuación el carácter de dos puntos ":" y el nombre "stream".

Vamos a crearnos un directorio de trabajo llamado ADS. Para ello, abrimos una consola de comandos (Inicio->Ejecutar->cmd) y tecleamos:

cd
md ads
cd ads

La creacion más simple es:

C:ADS>echo este es un texto de prueba > fichero.txt:oculto

Si a continuación ejecutamos un "dir" o bien accedemos a él con el explorador, veremos únicamente el fichero: "fichero.txt" con tamaño cero.

Si ejecutamos:

more < fichero.txt:oculto

nos mostrará el contenido real del stream: "este es un texto de prueba".

Además, un ADS puede crearse usando el contenido de otro fichero. Por ejemplo:

C:ADS>echo este es otro texto de prueba > texto.txt
C:ADS>type text.txt > fichero.txt:oculto2

Podemos comprobar otra vez el fichero mediante el comando "more". Si intentamos abrir el fichero de texto, fichero.txt mediante el Notepad, por ejemplo, veremos que nos da mensajes extraños de petición de creación del archivo (que ya existe!!!!)

Curiosamente, aunque con un dir, o con el explorador, solo veamos un archivo de tamaño cero llamado fichero.txt, podremos comprobar con los comandos:

more < fichero.txt:oculto
more < fichero.txt:oculto2

que existen realmente los dos contenidos que hemos guardado previamente.

Pueden crearse igualmente ADS’s asociados a la propia carpeta o directorio si no damos nombre de fichero. Es decir:

C:ADS>echo Este ADS se crear para el directorio > :oculto

Exactamente igual, podremos crear ADS’s, que en vez de contener texto, contengan código ejecutable:

C:ADS>type c:windowsnotepad.exe > fichero.txt:np.exe
C:ADS>type c:windowssystem32sol.exe > fichero.txt:sol2.exe

De la misma forma, ficheros de imágenes, de audio o cualquier otro flujo de datos pueden ocultarse en ADS’s

Antes de continuar con las herramientas necesarias para poder ver los ADS’s creados, (ya que hasta el momento, estamos "ciegos". Solo podemos ver un archivo llamado "fichero.txt" con tamaño cero… Pero realmente tenemos dos archivos de texto y dos con código ejecutable), hemos visto el comando "more" para los de texto. Para los otros dos, podemos ejecutarlos tecleando:

C:ADS>start .fichero.txt:np.exe (evidentemente ejecuta un Notepad)
C:ADS>start .fichero.txt:sol2.exe (nos ejecutará el solitario)

Debemos fijarnos que ambos ficheros, aunque no los veamos, son reales. No son un "enlace" a los originales, sino que contienen el código real del Notepad y del solitario.

Si somos un poco osados, podemos guardar el código de un virus en uno de estos archivos, y si ejecutamos un antivirus, veremos que sorprendentemente NO lo localiza.

Aunque parezca que es dificil la ejecución de un ADS, es sencillísimo el comprobar que no es así. En particular las rutinas en un script de VB se ejecutan perfectamente. Por ejemplo podemos crear:

C:ADS>echo MsgBox "Prueba de mensaje en VB" > fichero.txt:codigo.vbs

Y ejecutar:

C:ADS>start .fichero.txt:codigo.vbs

Igualmente pueden ser invocado desde Perl sin más que preparar un sencillo script:

#! c:perlbinperl.exe
# file name: adsfun.pl
use strict;
my $filename = ‘c:adsfichero.txt:codigo.vbs’;
my $results = system($filename);

CREACIÓN DE ADS’S CON LAS HERRAMIENTAS DE WINDOWS

Podemos igualmente crear un fichero de texto normal con el Notepad. Creemos un fichero llamado prueba.txt en la carpeta ADS anterior, una vez creado, lo salvamos y miramos su tamaño exacto en bytes. Posteriormente con el explorador de Windows, con el botón derecho sobre él, propiedades, en la última pestaña, cumplimentamos los datos de título, autor, etc….

Sorprendentemente podemos comprobar que el tamaño del archivo no ha variado. La pregunta es entonces: ¿Dónde se guardan los datos que hemos añadido como propiedades de dicho archivo?. La respuesta es sencilla: en unos ADS’s que el sistema automáticamente crea.


¿CÓMO PODEMOS VER LOS ADS’S?

Existen varias herramientas para poderlo verificar. En particular el clásico streams.exe de Wininternals. Pero es una herramienta engorrosa de manejar. La herramienta más sencilla es debida a Frank Keyne y es el programa LADS.EXE

Descargando el programa desde el link anterior, podemos ejecutarlo sobre la carpeta ADS creada anteriormente y nos mostrará los ADS creados con los ejemplos anteriores.

C:ADS>LADS

LADS – Freeware version 3.10
This program lists files with alternate data streams (ADS)
Use LADS on your own risk!

Scanning directory I:ADS

size ADS in file
———- ———————————
38 I:ADSfichero.txt:codigo.vb
35 I:ADSfichero.txt:codigo.vbs
28 I:ADSfichero.txt:oculto
116 I:ADSprueba.txt:?DocumentSummaryInformation
172 I:ADSprueba.txt:?SummaryInformation
0 I:ADSprueba.txt:{4c8cc155-6c1e-11d1-8e41-00c04fb9386d}

389 bytes in 6 ADS listed


Tal y como hemos visto, los ADS’s son una característica de los archivos NTFS para compatibilizar con HFS. Sin embargo, la pérdida de "visibilidad" que esta característica posee tiene un riesgo potencial bastante elevado para los Administradores del sistema.

Debemos tener presente que no todas las herramientas, ni tan siquiera de Windows, son capaces de tratar correctamente los ADS’s. Por ejemplo, los defragmentadores, no defragmentarán dichos archivos. Los antivirus, la mayoría de ellos, no diagnostican virus en los ADS’s, y los que son capaces de diagnosticarlos no tienen capacidad para eliminarlos. Los fabricantes de antivirus empiezan a ser conscientes de esta problemática y en breve serán capaces de tratarlos.


Referencias y Créditos:

RUSS00 Russinovich, M., Inside Win2K NTFS, Part 2 , Windows 2000 Magazine, November, 2000
MCCL99 McClure, S., Scambray, J., and Kurtz, G., Hacking Exposed: Network Security Secrets and Solutions, Berkeley: Osbourne, 1999
KASP01 Kaspersky, E. and Zenkin, D., NTFS Alternate Data Streams , Windows and .Net Magazine, Spring 2001
CARV00 Carvey, H., Network Trojans: What You REALLY Need To Know , Information Security Bulletin, Vol. 5, Issue 8
H. Carvey The Dark of NTFS