Ocultando data en archivos de Windows (con ADS)
Creado
Jugaremos con Alternate Data Stream o flujos de datos alternativos, veremos como un atacante (o víctima) puede ocultar información dentro de archivos ya sea para asegurarlos o para hacer locuras.
…
Menú del día e.e
- Entramos en m4t3r1a sobre los ADS.
- Ocultando información mediante los ADS.
- Detectando archivos con ADS.
…
Entramos en m4t3r1a sobre los ADS #
Este artículo esta más enfocada en como detectar (ver, encontrar, etc.) los ADS en archivos. No daré taaaaanta teoría, pondré un recurso que la tiene (y que tiene muuuchas cositas), veremos más que todo ejemplos en la terminal y cosas directas.
…
Flujos de datos alternativos, también llamados ADS (Alternate Data Stream). Básicamente son una característica de los ficheros NTFS (sistema que sirve para organizar datos en discos duros y medios de almacenamiento) que permiten almacenar metadatos en archivos sin tener que separar esos metadatos (crear otros archivos aparte) del objeto.
Recurso con baaaaaste más teoría e inspiración para hacer este pequeño articulo:
La parte teórica es muy sencilla, un archivo en el cual podemos esconder cosas, ¿qué puede salir de eso?
Pues desde la mirada de un atacante puede ser genial tener esta opción en un sistema, ya que:
- Es “complicado” para la víctima encontrar los ADS si no sabes que existen (como muchas personas).
- No es un archivo oculto, nop, es un archivo oculto dentro de otro 😝
- Es divertido su uso.
- No son visibles con facilidad, solo usando software especial para ello.
- Los ficheros ocultos no modifican el tamaño del objeto real :O
- Es muuuuuy sencillo de implementar.
Vamos a ver algunos ejemplos sencillos para entender como funciona y despues la manera de detectarlos o encontrarlos…
…
Ocultando información mediante los ADS #
…
Ocultando texto ⌖
Hacer esto es muy simple, usando el comando type junto a los símbolos >
(encargado de direccionar el flujo) y :
(el encargado de unir un archivo a otro), veamos:
Create
type textfile > visible.txt:hidden.txt
Alternate Data Stream.
Por ejemplo, guardemos un archivo con contraseñas dentro de otro con un simple texto:
credentials.txt:
algorandom.txt:
Bien, pues ahora unámoslos:
C:\Users\shxcx\ads_omg>type credentials.txt > algorandom.txt:creds.txt
Donde le indicamos que tome el contenido de credentials.txt
y cree un ADS en el archivo algorandom.txt
llamado creds.txt
…
¿Pero como validamos ahora lo insertado? Bien, con un simple more podemos ver su contenido:
Viendo como lo vería un usuario normal:
Jugando con el contenido que agregamos:
Le estamos indicando que nos extraiga el ADS creds.txt
del objeto (:
Perfecto, en ese caso borraríamos el archivo credencials.txt
y podríamos jugar con algorandom.txt
por la vida e.e
Antes de seguir me gustaría mostrarles que no es necesario que exista ningún archivo, ya que con el comando echo
podemos escribir cualquier cadena y guardarla también en un ADS:
Por ejemplo, otras credenciales:
Y en su contenido:
Podemos ver el contenido también con type
y no habría nada raro (:
…
O con un archivo que no exista sería algo asi, primero listamos (pa comprobar):
Yyyy:
Listones, con esto ya se tendría una idea de tooooooooodo lo que podemos hacer para guardar texto en objetos…
…
Ocultando binarios #
En WinXP por ejemplo para guardar el binario nc.exe
en el archivo algorandom.txt
seria:
Y para su ejecucion:
C:\Users\shxcx\ads_omg>start algorandom.txt:nc.exe
Sencillito, peeeeeeeeeero en sistemas operativos más actuales debemos hacer unos pasos de más:
Obtenidos del recurso con el que hemos jugado todo el articulo.
Necesitamos generar 3 pasos despues de tener un binario oculto en algún objeto:
- Crear un link simbólico que apunte al ADS generado (al objeto oculto).
- Tomar ese link simbólico y crear el objeto que estamos restaurando.
- Ejecutar el objeto.
Veamos cada paso con algo más de detalle:
Digamos que ocultamos nc.exe
en algorandom.txt:nc.exe
:
C:\Users\shxcx\ads_omg>type C:\Users\shxcx\nc.exe algorandom.txt:nc.exe
1. Ahora deberíamos generar el link simbólico con un nombre distinto a nc.exe
:
Validamos:
2. Luego tomaríamos el contenido de ese link simbólico (que sería el contenido del binario) y lo guardamos en un archivo (por ejemplo con el nombre del objeto oculto), en mi caso nc.exe
:
3. Y ahora simplemente deberíamos ejecutar el archivo creado (nc.exe
contra una IP y un puerto), en mi caso obtendríamos:
(Da timeout porque esa IP no esta activa, pero la finalidad es que tenemos el binario nc.exe
funcional)
Entonces, en resumen es muy simple:
- Ocultas (u obtienes un archivo con un binario oculto) el binario en un objeto cualquiera.
- Generas un link simbólico hacia ese ADS.
- Con el link simbólico creado, generas lo que sería el “recovery” del binario original.
- Ejecutar (:
😮
…
Encontrando/Detectando ADS #
Esta es la parte más sencilla, hay varias herramientas, como las de este hilo, pero destacaremos 3:
- lads.exe.
- streams.exe.
dir /r
.
Las 3 son directas, juguemos:
lads.exe
Le podemos pasar el directorio donde esta el archivo (o los) a consultar y nos imprimiría:
Perfecto, ya veríamos tooodos los archivos que tienen ADS…
streams.exe
Su uso seria:
Es más útil, ya que podemos borrar ADS de archivos, hacer la búsqueda recursivamente o por archivos específicos:
Recursivamente:
Vemos también tooodos los archivos con ADS encima, ahora enfoquémonos en uno:
Perfecto, así que si tuviéramos sospecha de algún archivo podríamos ir tras él :P
Y la más sencilla (que en algunos sistemas operativos no esta activa):
dir /r
Usando el propio comando genérico podemos también ver si existen ADS en archivos:
Así mismo podemos hacer más pequeña nuestra búsqueda haciéndolo con cada archivo:
YYYYYYYYYYYYYy ia (:
…
Fue algo que descubrí en la máquina Dropzone y me gusto mucho… Además que es superútil y llamativo, en cualquier momento puede ser necesario y es muy fácil de usar :P
Y bueno, como digo siempre en los writeups, a seguir con toda y a romper todo!!
Comments