miércoles, 25 de octubre de 2006

El "downloader" más pequeño del mundo

Gil Dabah ha propuesto un desafío que consiste en crear el "downloader"
(descargador automático) más pequeño posible para Windows. Por ahora,
ha conseguido un ejecutable de 304 bytes capaz de descargar un archivo
desde Internet y ejecutarlo de forma transparente, lo que supone un
importante avance en esta técnica.

Gil Dabah más conocido como Arkon, es un apasionado de la programación y
colaborador de ZERT. Este fue el grupo que programó el parche no oficial
para la vulnerabilidad VML de Internet Exploer. Arkon se ha propuesto
crear el ejecutable más pequeño capaz de descargar a su vez otro archivo
de Internet y ejecutarlo.

Con esta simple premisa Arkon (con ayuda de otros expertos que han
aportado ideas) ha llegado (en una tercera versión) a crear un
ejecutable perfectamente funcional en 304 bytes, cuando la primera
versión pesaba los ya escasos 411 bytes. A través de sofisticadas e
ingeniosas técnicas ha conseguido reducir a la mínima expresión un
programa que descarga desde su página otro programa que a su vez
muestra un simple mensaje por pantalla.

Code crunching es el nombre dado a este método, destinado a optimizar
cada byte usado en un ejecutable. Las técnicas aplicadas son realmente
creativas, y se valen de todo tipo de artimañas para arañar bytes y
reducir al máximo el programa.

Aparte del interés para programadores, la funcionalidad de este
experimento lo vuelve especialmente interesante. Este programa es
absolutamente inocuo de por sí, pero su finalidad lo convierte en
potencialmente peligroso. Los "downloaders" son herramientas muy usadas
por el malware en general, para intentar pasar inadvertidos ante las
medidas de protección. Su principal función consiste en conectar con un
servidor de Internet y descargar nuevos componentes y troyanos. Dividen
el proceso de infección en dos pasos, primero se fuerza la ejecución del
"downloader" y es este el que descarga el malware en sí, a través de
distintos métodos de ofuscación. El archivo descargado contiene el
"payload" o carga vírica y con este método, los atacantes sólo tienen
que cambiar o reemplazar el ejecutable que es descargado para seguir
aprovechando la infección cuando el "payload" sea demasiado "detectado"
o cualquier otro motivo. Lo interesante es que con el diminuto tamaño
conseguido por Arkon, se consigue una rapidez y unas características
especiales que podrían incluso evitar que su actividad sea detectada en
redes. Pero sin duda, lo más relevante (y el objetivo principal) es que
a la hora de programar, la imaginación puede superar cualquier límite
impuesto.

Como curiosidad, y conociendo que cualquier programa que intente
descargar algo desde Internet puede resultar potencialmente peligroso,
la muestra tiny3.exe ha sido enviada a VirusTotal.com con los siguientes
resultados.

Authentium 4.93.8 10.23.2006 could be a corrupted executable file
CAT-QuickHeal 8.00 10.20.2006 (Suspicious) - DNAScan
Fortinet 2.82.0.0 10.23.2006 suspicious
NOD32v2 1.1825 10.22.2006 probably unknown NewHeur_PE virus
Panda 9.0.0.4 10.22.2006 Suspicious file

Insistimos en que el experimento en sí no es peligroso, pero es normal
que algunos antivirus lo detecten. Si el archivo descargado desde
la página de Arkon (de nuevo un inofensivo archivo llamado f.exe) y
ejecutado sin avisar fuese cambiado por otro, sí que podría tomarse
como vehículo de infección. Además de que tiny3.exe intenta descargar
y ejecutar algo de forma transparente, lo que ya de por sí es
sospechoso si no conociésemos su procedencia.

El reto sigue abierto para quien pueda desafiar los límites y rebajar
el ejecutable por debajo de los 300 bytes. Incluso se ha creado una
lista para discutir sobre el tema:
http://whitestar.linuxbox.org/mailman/listinfo/code-crunchers


Sergio de los Santos
ssantos@hispasec.com


Más información:

Code Crunching - Tiny PE (challenge) [update #2: now with 304 bytes!]
http://blogs.securiteam.com/index.php/archives/675

Tiny PE - Rel0ad3d (304 bytes!)
http://blogs.securiteam.com/index.php/archives/690