Hola a todos !
Hoy os voy a hablar sobre una muestra que me pareció muy interesante.
Es esta:
Podemos ver las siguientes funciones:
Podemos echar un vistazo inicial a las funciones, por si aparece algo interesante que nos llame demasiado la atención. Podemos intuir que algo espera por parámetros. Es mejor obtener primero los “imports” (funciones de la API de Windows que serán cargadas al ejecutar la muestra) y obtener unas conclusiones iniciales de por donde comenzar a analizar.
Se nos puede ocurrir que reciba algo por parámetros (GetCommandLineA, GetCommandLineW), que escriba algo a disco (CreateFileA, WriteFile), que oculte cargar funciones al inicio (LoadLibraryA, GetProcAddress) para llamarlas después, en los imports, finalizar el programa si algo no le gusta o si ha realizado alguna acción concreta (ExitProcess), buscar algo “oculto a simple vista” que utilizará después asignando memoria (VirtualAllocEx), ejecutar algún programa (ShellExecuteA), etc.
Si ponemos breakpoints en estas funciones podremos ir viendo más despacio todo lo que hacen. Esto es solo el comienzo, ya que seguramente utilizará otras funciones que cargará en tiempo de ejecución (LoadLibraryA, GetProcAddress) y que ahora mismo no podremos saber cuales son.
Ponemos los breakpoints como dije y veamos qué hace.
Como ya lo he analizado antes, voy a preparar el entorno. Voy a añadir unos parámetros a la llamada del binario con el Ollydbg (Olly, lo sé, pero soy un clásico :P)
Introduzco un valor entero (no vale cualquier valor, tiene que ser entre 0 y 3, después veremos porqué). Añado una dirección IP y un puerto. Algunos viendo esta imagen, ya podrán imaginarse de lo que se podría tratar. Continúo… Si vamos pulsando F9 o Run, vamos parando en cada uno de los breakpoints. Pondré sólo los más interesantes.
Crea un fichero de autoborrado:
Se trata de un fichero bat.
Y se prepara para su ejecución cuando finalice lo que tiene que hacer, aún no lo hemos visto.
Seguimos con la obtención de direcciones de funciones de API para utilizarlas después, son muchas…
Esta es interesante, carga urlmon.dll, para descarga de contenido html.
Funciones utilizadas para tratar el registro de Windows.
Funciones para saber qué usuario está autenticado en el equipo.
Funciones para obtener directorios en base a un valor CSIDL.
Funciones para tratar memoria.
Para estas, voy a poner un nuevo breakpoint para cada una.
Comienza el proceso esperado.
Si nos fijamos en la memoria, ha aparecido un nuevo ejecutable.
Ahora esa asignación de memoria es ejecutable gracias a VirtualProtect (visto antes).
Si bajamos el scroll, podemos ver de lo que se trata:
Según podemos leer en la página del creador de esta herramienta, se trata de “TinyMet is a tiny “4.5 kilobytes” flexible meterpreter stager, which supports multiple meterpreter transports, setting LPORT and LHOST during runtime.”.
Si extraemos el binario de la memoria y utilizamos PE-Bear para “arreglarlo”:
Lo guardamos.
Lo abrimos con PE Studio para ver su contenido, ya está desempaquetado y funcionando. Así que ya sabemos lo que contenía el binario original un Tinymet v0.2.
Continúa cargando un sin fin de funciones de la API.
Podríamos aseguraros que está cargado en memoria. Yo uso una herramienta programada por mí:
Que corresponde con la muestra que está siendo analizada:
El objetivo de todo esto es cargar ese binario en memoria y ejecutarlo sin que aparezca lo que es en los “strings”, de esta forma pasa desapercibido. Si no se le pasa parámetros se autoborra, interpreta que no es llamado por el malware original que lo dropea. Pero seguimos sin ver lo que hace una vez se le pasan los parámetros iniciales.
Desactivo todos los breakpoint y pulso F9:
Pero antes, os contaré que hice antes de ejecutar la muestra. Configuré el Metasploit de la siguiente manera:
Ya sólo nos queda pulsar F9 o Run y ver que ocurre.
Se produce la conexión pero se produce un crash, puede que sea por la versión de mi Metasploit (muy antiguo 3.4 para esta demo), por el SSOO de análisis (W7 32 bits para esta demo), etc. Probemos con otro valor y configuración en el Metasploit.
Lo dejamos todo funcionando de nuevo, esta vez utilizaremos reverse_tcp.
Lo volvemos a ejecutar, esta vez desde la consola de Windows, ya hemos visto lo que hace el binario.
Y se conecta perfectamente al Metasploit.
En el caso de no pasarle parámetros (como ya dije antes), el binario utiliza el fichero “.bat” que vimos de borrado. Asume que quien lo llama, no es adecuado para él, por lo que lo borra directamente.
Os animo a que mireis más detenidamente TinyMet, ), teneis el código fuente ;-
La muestra usada , podeis encontrarla aquí.
Aquí podeis ver como la dll dropea la muestra y se produce una conexión contra esa IP que veis y ese puerto:
En esta otra muestra:
Al llamarse sin parámetros, simplemente, se borra.