¿Cómo crear malware? (parte 5)

5 minutos de lectura

En la entrega anterior analizamos la utilización de herramientas RAT (Remote Administration Tool). En esta ocasión veremos qué tan óptimo puede ser modificar el malware como lo hicimos en el caso del 'tini' backdoor (en la 1ra parte de este artículo).

 

Hashes y no tan Hashes

Si tenemos dos archivos, y queremos saber si son exactamente iguales, podemos utilizar funciones de hash para determinarlo. Básicamente, una función de hash, aplicada a un archivo, devuelve una firma “casi” única, la que podemos utilizar para una comparativa rápida. Si las dos firmas coinciden, los dos archivos deben ser exactamente iguales, si no coinciden, deben tener alguna diferencia, aunque sea mínima.

Una propiedad de las funciones de hash es que, a una muy pequeña modificación del contenido procesado, se obtiene una gran modificación en el resultado de la firma. Por lo tanto, si obtenemos la firma de dos archivos prácticamente iguales, estas van a ser totalmente distintas.

Veamos un ejemplo comparando dos versiones del backdoor 'tini' que analizamos en el primer artículo. En este caso, haremos los hashes MD5 del tini original, que escucha en el puerto TCP/7777 y la del tini modificado, para escuchar en el puerto TCP/1221.

'tini.exe'        →    B7513EE75C68BDEC96C814644717E413
'tini-mod.exe'    →    60803C77349455E9F3842AC88EDBFB6C

A simple vista podemos observar que las firmas son totalmente diferentes, aún cuando los archivos son muy similares.

Hashes Contextuales Desencadenados por Tramos

Como en el campo del análisis de malware es necesaria una forma de identificar el nivel de similitud entre dos o varios archivos, se crearon los Context Triggered Piecewise Hashing (CTPH), que son descriptos en el siguiente documento:
http://dfrws.org/2006/proceedings/12-Kornblum.pdf

Los cuales, básicamente, son hashes que nos permiten calcular la similitud entre varios archivos.

La implementación más conocida de esto es 'ssdeep', que es una herramienta de línea de comandos disponible para sistemas GNU/Linux y Microsoft Windows.
Es una herramienta de código abierto, la cual puede descargarse desde:
http://ssdeep.sourceforge.net

Si utilizamos esta herramienta sobre los dos archivos anteriores, obtendremos lo siguiente:

ssdeep.exe -a -b -s -d tini.exe tini-mod.exe
tini-mod.exe matches tini.exe (99)

El valor 99 que se muestra entre paréntesis corresponde al porcentaje de similitud entre los dos archivos, que son prácticamente iguales.

Si lo hacemos con dos archivos exactamente iguales, obtendremos:

ssdeep.exe -a -b -s -d tini.exe tini_copy.exe
tini_copy.exe matches tini.exe (100)

Y si lo hacemos sobre dos archivos totalmente diferentes:

ssdeep.exe -a -b -s -d tini.exe other.exe
other.exe matches tini.exe (0)

Distinto software, mismas funciones

En la parte 3 de este artículo analizamos la existencia de distintas implementaciones y versiones derivadas de NetCat.

Obviamente, todas cuentan con funciones muy similares pero, no por eso, los ejecutables deben ser similares.

Haciendo una simple comparativa de tamaños de archivo, podemos ver que, desde el inicio, son muy distintos:

Archivo

Tamaño

nc.exe 58 Kb
nc2.exe 175 Kb
mocat_win.exe 116 Kb
socat.exe 358 Kb
ncat.exe 1629 Kb

 

Esto puede deberse a varios factores. Pero, podemos afirmar que la simple modificación de los parámetros del compilador de software utilizado (o la utilización de un compilador alternativo) van a generar un archivo bastante diferente, por lo que si modificamos el código fuente de un software, y lo compilamos utilizando otras opciones de compilación, es muy probable que obtengamos diferencias significativas en ssdeep.

A continuación, los resultados de las pruebas de ssdeep sobre estas variantes de NetCat:

ssdeep.exe -a -b -s -p nc.exe nc2.exe mocat_win.exe ncat.exe socat.exe

nc.exe matches nc2.exe (0)
nc.exe matches mocat_win.exe (0)
nc.exe matches ncat.exe (0)
nc.exe matches socat.exe (0)

nc2.exe matches nc.exe (0)
nc2.exe matches mocat_win.exe (0)
nc2.exe matches ncat.exe (0)
nc2.exe matches socat.exe (0)

mocat_win.exe matches nc.exe (0)
mocat_win.exe matches nc2.exe (0)
mocat_win.exe matches ncat.exe (0)
mocat_win.exe matches socat.exe (0)

ncat.exe matches nc.exe (0)
ncat.exe matches nc2.exe (0)
ncat.exe matches mocat_win.exe (0)
ncat.exe matches socat.exe (0)

socat.exe matches nc.exe (0)
socat.exe matches nc2.exe (0)
socat.exe matches mocat_win.exe (0)
socat.exe matches ncat.exe (0)

Como podemos observar, ninguno de los archivos se parece a los demás.

Esto también se debe a que, al ser archivos pequeños, los fragmentos de datos analizados son pocos.

Si analizamos software de mayor tamaño, como el ejecutable del navegador Firefox, obtendremos mejores similitudes, así:

ssdeep.exe -a -b -s -p F-10-0-0.exe F-10-0-1.exe F-10-0-2.exe
F-10-0-0.exe matches F-10-0-1.exe (99)
F-10-0-0.exe matches F-10-0-2.exe (44)

F-10-0-1.exe matches F-10-0-0.exe (99)
F-10-0-1.exe matches F-10-0-2.exe (44)

F-10-0-2.exe matches F-10-0-0.exe (44)
F-10-0-2.exe matches F-10-0-1.exe (44)

(Los análisis se hicieron a los ejecutables principales de las versiones 10.0.0, 10.0.1 y 10.0.2 de la versión de Firefox preparada por http://portableapps.com)

Algo a tener en cuenta

Este tipo de hashes debe ser tenido en cuenta cuando realizamos la modificación de algún malware con el fin de volverlo indetectable. Obviamente, es un buen parámetro para medir qué tan bien hemos modificado el software. Aunque, como hemos visto, que dos archivos muestren firmas de 'ssdeep' completamente distintas, no quiere decir que ambos tengan características diferentes.

La ética ante todo

Ya sea a través de un seminario, un curso, un libro o este tipo de artículos, cuando enseño seguridad informática lo hago pensando en que estos conocimientos van a ser utilizados para mejorar la seguridad de los sistemas.

Obviamente, queda en la conciencia de cada individuo cómo utilizar los conocimientos aquí expuestos pero, debemos recordar, que un verdadero profesional de la seguridad nunca utiliza sus conocimientos para fines destructivos ni ilegales, si no para ayudar a sus pares a reducir los riesgos de ataques y pérdidas de datos.

En la próxima entrega

Esto ha sido todo por hoy. En la próxima entrega analizaremos cómo crear malware utilizando la herramienta Metasploit Framework.

Hasta la próxima!

--
Fabian Portantier
Coordinador Carrera Seguridad Informática
www.portantier.com
twitter: @portantier

mail: seguridadinformatica@educacionit.com.ar
web: www.educacionit.com.ar/carrera-seguridad-informatica

Categoría
Artículo escrito por: Fabian Portantier

One comment on “¿Cómo crear malware? (parte 5)”

Deja un comentario