Corrientes de datos alternativos (ADS)

Aplicación práctica pero básica de ADS en entornos de CTF y Pentesting

¿Qué son las corrientes de datos alternativos (ADS)?

Es una característica que se añadió al Sistema de Archivos de Nueva Tecnología también conocido como Sistema de Archivos NT (NTFS) para aumentar la comparabilidad con el Sistema de Archivos Jerárquico (HFS) de Macintosh, en términos sencillos es algo que facilita el uso de sus archivos en su Mac (Apple) y PC (Windows).

¿Cómo funciona y por qué debería importarme?

Por lo general, cuando guardas algo en un archivo, un archivo .txt por ejemplo, estás almacenando el contenido de tu archivo (texto ascii) en un flujo de datos que Windows reconoce como el flujo por defecto, así que la próxima vez que abras tu archivo estarás accediendo al mismo flujo para ver tus datos.

Como ejemplo

Si creo un archivo .txt usando el Bloc de notas en mi sistema Windows y lo guardo en un archivo (secret.txt) entonces cada vez que lo abra veré mis datos.

Secret.txt Bloc de notas

Secret.txt Notepad

¿Pero qué pasa si hay más datos en el archivo de los que no eres consciente?

Ahí es donde entran en juego los flujos de datos alternativos.

Voy a utilizar cmd.exe (Símbolo del sistema) para demostrar los ejemplos para que sea más fácil para la gente a entender la CLI (Interfaz de línea de comandos), pero los mismos resultados se pueden lograr utilizando Power Shell too.

Así que cuando uso símbolo del sistema para ver el contenido de mi directorio puedo ver mi secreto.txt y que el tamaño del archivo es de 33 bytes.

dir
command prompt

command prompt

Esto parece un archivo normal pero ¿qué pasa si añado el /r a mi comando?

dir /r
Comando dir /r

Comando dir /r

Ahora podemos ver otro archivo en el mismo directorio con el mismo prefijo que nuestro secret.txt pero con un sufijo de evil.txt donde el $DATA nos indica que se trata de un flujo de tipo $DATA.

Al añadir el /r a nuestro comando podemos ver que ambos archivos están en el mismo directorio pero sólo podemos ver el secret.txt en nuestro Escritorio, también podemos ver la diferencia en el tamaño del archivo mientras que nuestro archivo secret.txt es todavía 33 bytes nuestro secret.txt:evil.txt es 74 que es más de 2 veces nuestro secret.txt.

Comparando la salida de ambos comandos.

# First Command
dir# Second Command
dir /r
Comando dir y dir /r

Comando dir y dir /r

En esto podemos ver la información por ambos el comando con más precisión somos capaces de ver los cambios en una perspectiva más clara.

  • Ambos resultados dicen que sólo hay 2 archivos en el directorio y nos dan el mismo tamaño, es porque secret.txt y secret.txt:evil.txt son el mismo archivo no diferentes archivos pero los datos se almacenan en flujos separados.
  • El espacio total utilizado en el directorio y disponible en el sistema siguen siendo los mismos.

Veamos el contenido de ambos juntos:

Mientras vemos ambos podemos ver que el contenido es diferente, también podemos ver la diferencia en el nombre de los archivos, lo que nos da la idea de que podemos almacenar fácilmente información en un flujo de datos alternativo para múltiples propósitos. Los flujos de datos siguen una convención de nomenclatura básica en el sistema de archivos NTFS que es NombreArchivo:NombreCorriente:TipoCorriente habiendo dicho que el nombre completo de secret.txt en el sistema de archivos NTFS sería secret.txt::$DATA

Un método alternativo para ver ambos sin abrirlos en el bloc de notas sería.

# View secret.txt
type secret.txt# View Alternate Data Stream
more < secret.txt:evil.txt