Alternate Data Streams (ADS). Qué es y como funciona

Estándar

Hablando desde el punto de vista NTFS, un fichero no es más que un conjunto de data streams. Un stream por ejemplo, puede contener información acerca del nivel de acceso a ese fichero (directivas ACL, permisos, etc..), otro stream contendrá los datos del fichero en sí almacenados en el contenedor. Si el fichero es un acceso directo o link, un stream puede contener la dirección en donde se ubica el fichero original, etc, etc..
Si por ejemplo leyésemos un fichero en un sistema de archivos que no fuese NTFS, ej: FAT16 o FAT32, el sistema leería tan sólo el stream que contiene los datos del fichero.
La estructura de un fichero con múltipes streams es parecida a esta:

Streams

Aunque muchos piensen que es una falla o Bug del sistema, lo cierto es que ADS no es más que un feature (característica) del sistema, y generalmente se usa para mantener información asociada a un fichero.
Microsoft tiene amplia documentación sobre ADS, en el que se incluye tutoriales, scripts para creación de ADS, etc..

Limitaciones de un ADS

Por defecto cualquier usuario del sistema puede usar esta característica. Tan sólo se limita a aquellos ficheros en los que tengamos permiso de escritura. Es decir, un Administrador, podrá añadir un ADS en prácticamente todos los ficheros del sistema, mientras que un usuario se limitará sólo a los ficheros y directorios en donde tenga acceso de escritura (Por defecto su perfil).
Por defecto ADS sólo está limitado a volúmenes NTFS como hemos visto. A través de red local (LAN) podremos mandar ficheros con ADS, siempre y cuando los volúmenes intermedios tengan el sistema de archivos NTFS.
La limitación teórica es mandar un ADS a través de Internet. Teóricamente no podemos mandar un fichero con ADS (sea malicioso o no), ya que nuestro cliente de correo, el medio (Internet) y el destinatario, sólo mandaría el stream con los datos, sin procesar los demás. A lo largo de este documento podremos ver que en la práctica y bajo una serie de factores, se podría mandar ADS ocultos en un fichero.

No vamos a hablar sobre creación, modificación y eliminación de ADS, porque es una característica ampliamente documentada en la red. Al final de este documento se proporcionarán enlaces a investigaciones pasadas sobre éste tema en concreto.

Microsoft no tiene de forma directa ninguna aplicación para el escaneo ADS. De forma indirecta tenemos dos opciones:

A través del administrador de tareas (taskmgr.exe)

TaskManager

Como se puede comprobar en la imagen adjunta, el Administrador de tareas de XP muestra el proceso ejecutado.
Nota: En versiones anteriores a XP (NT,2K), este proceso de visualización no es del todo transparente. NT y 2K tratan de forma diferente el manejo de los ADS.

A través de la librería StrmExt.dll

Esta librería, añade un nuevo Tab a las propiedades del Explorer, que nos permitirá ver los posibles Streams que pueda tener un archivo, directorio o unidad.
Para añadir un Tab a las propiedades de Explorer descargamos de Microsoft el siguiente código fuente:

NtfSext.exe

Dentro nos encontramos con algunos ejemplos de creación de Streams. El fichero que nos interesará es la librería compilada StrmExt.dll (Se adjunta código fuente de la librería).

La extraemos y la depositaremos en el directorio System32 de nuestro sistema. Acto seguido la registramos en el registro con el siguiente comando:

Regsvr32.exe StrmExt.dll

Una vez ejecutado el comando Windows registrará la librería, y podremos disponer en las propiedades del Explorer de un nuevo Tab para visualizar si un fichero tiene alojado algún Stream.

Tab

Registrando esta librería, conseguimos visualizar el Tab Streams sólo para ficheros. Si queremos que nos muestre el Tab Streams para analizar los streams de alguna unidad (ej. C:) o por ejemplo de algún directorio, tendremos que incluir un par de entradas en el registro.

--------------------No copies esta línea---------------------------
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shellex\PropertySheetHandlers\{C3ED1679-814B-4DA9-AB00-1CAC71F5E337}]

[HKEY_CLASSES_ROOT\Drive\shellex\PropertySheetHandlers\{C3ED1679-814B-4DA9-AB00-1CAC71F5E337}]
-------------------No copies esta línea----------------------------

Guarda este fichero como AddTabStream.reg. Clickea dos veces en el archivo que has creado y añadirá las entradas al registro necesarias para añadir el Tab en el explorer.

Para un directorio:

TabDirectory

Para una unidad:

TabUnidad

Escaneo de ADS

Frank Heyne ha desarrollado una herramienta que escanea documentos en busca de ADS. La herramienta en cuestión es LADS.
Su funcionamiento es muy sencillo:

LADS

Si quisiésemos escanear nuestra unidad C: (incluyendo subdirectorios) en busca y captura de ADS, ejecutaríamos un comando tal que:

Lads C:\ /S

Cómo un usuario malicioso podría mandarnos un fichero con ADS? Ejemplo práctico

Hemos explicado antes, que si creamos un archivo con más de un stream de datos (sea malicioso o no), éste sólo será soportado por un sistema que utilice el sistema de archivos NTFS, lo que lo limita sólo a ese campo. No podríamos guardarlo en un pendrive, mandarlo por mail, colgarlo en una Web para su descarga, etc…

El ejemplo que os pongo a continuación, de libre descarga, es una prueba de concepto que demuestra que efectivamente se pueden mandar ficheros que contengan ADS, aprovechando un feature (característica) de una herramienta ampliamente utilizada por usuarios y empresas corporativas. La utilidad de copia de seguridad de Windows (ntbackup).
Esta herramienta sí incluye tanto el fichero como sus streams, lo que la convierte en una gran herramienta para usuarios con perfiles muy distintos:

• Una gran herramienta de copia de seguridad
• Una potencial herramienta para usuarios maliciosos

En el ejemplo (empaquetado en zip) se incluyen estos archivos:
• Un fichero de texto que contiene un stream con código VB inofensivo
• Un archivo Bat para ejecutarlo
• Todo ello va empaquetado en un archivo .bkf (Copia de seguridad)

Sólo tenéis que descargar la copia de seguridad, desempaquetarla en algún directorio y ejecutad el archivo setup.bat.

Descargar Ejemplo Guardar destino como…

Es un archivo inofensivo, a modo de broma, que prueba la capacidad de esta técnica, utilizada hoy en día por muchos virus y troyanos.

Un ejemplo de este tipo de virus, y de aparición reciente, lo podemos visualizar aquí:

Rustock.NAH Descarga otros archivos, utiliza rootkit

Recordad que este riesgo se minimiza en más de un 90% si navegamos y utilizamos nuestro equipo bajo una cuenta con permisos mínimos. Este y otros ejemplos parten sobre la base de un usuario medio navegando e iniciando sesión bajo una cuenta administrativa.

Si queréis saber en mayor profundidad qué es ADS, podéis visitar estas Webs:

Características desconocidas del NTFS. José Manuel Tella

A Programmer’s Perspective on NTFS 2000 Part 1 by Dino Esposito

Hidden Threat: Alternate Data Streams by Ray Zadjmool

10 comentarios en “Alternate Data Streams (ADS). Qué es y como funciona

  1. Pingback: Anónimo
  2. aNT366

    hack sparrow : este tema me la trae floja jajajaja.
    SI TE LA TRAE FLOJA, SEGURAMENTE ES QUE LA TIENES FLOJA.
    !QUE SE LE VA A HACER! SERÁ DEL RIEGO, DIGO DEL FLUJO…

  3. Alejandro

    Un tutorial bastante bueno, aunque ya conocia desde hace mucho el uso de los flujos ADS que en el pasado se usaban por muchos virus para esconder copias de sus codigos maliciosos. Pero me agustado saber que habia una libreria de Microsoft para manipular estos flujos desde la Shell de windows

  4. oscar

    buen comentario me sirvio de mucho….estoy haciendo un pequeño trabajo de investigacion sobre seguridad en NTFS y esto ayudara bastante..esta muy didactico y facil de entender. Gracias

  5. Un tutorial bastante bueno, aunque ya conocia desde hace mucho el uso de los flujos ADS que en el pasado se usaban por muchos virus para esconder copias de sus codigos maliciosos. Pero me agustado saber que habia una libreria de Microsoft para manipular estos flujos desde la Shell de windows

  6. Pingback: Anónimo

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s