Hola a tod@s!

Me he topado con esta DLL, que me ha resultado curiosa.

MD5
2821c0f5bbcf792352092815df29c715
SHA-1
98c345cfa1c608b9af94c497aff886522042d0f2
SHA-256
040ed019ca0b3dd06bb8b1bec13d2b591644c81a9ee669a24a3f8236f98bc2b0
Vhash
116056555d15656az41nz1ez1
Authentihash
8002193da29b80a2abe63f08a94f4cee6e1de087018f0003c7716e1c794acea2
Imphash
e16074196d80effb57a5d1cd03830f52
Rich PE header hash
a82c4fb6c132dddff81f74c9eb6330cd
SSDEEP
24576:yojJNxSwRQJEQltmEVRxfX7jf7o6S6jxz2Hx:djdQJEQlTBXHfE6Lo
TLSH
T17F256A4650B457F7CBE979F29F277EB066FAA273990F04C67B80163A0DCCD214909B29
File type
Win32 DLL
Magic
PE32 executable for MS Windows (DLL) (GUI) Intel 80386 32-bit

En el comportamiento que muestra la sandbox que se ha utilizado en Virus Total, no se aprecia gran cosa, sin embargo, esconde algo en su interior.

Hablamos de una DLL compilada con Visual Studio 2017.

DLL compilada con Visual Studio 2017

Tiene una función Export llamada Melon.

Funcion Melon - DLL de CobaltStrike

Por lo tanto, para poder ejecutar esta DLL con rundll32 habría que hacerlo de la siguiente manera, imaginemos que se llama “test.dll”, como se aprecia en la captura anterior:

 > rundll32 test.dll,Melon

Para analizar esta dll podemos hacerlo cargando en nuestro debugger favorito rundll32.exe y pasarle como parámetro “test.dll,Melon” y ya la tendríamos lista para ser analizada.

Pero… vamos a hacerlo de otra manera. Vamos a convertir esa DLL en un EXE funcional. Para ello abrimos la DLL con CFF Explorer.

CFF Explorer-DLL de CobaltStrike

Y desmarcamos el check que indica que es una DLL.

Guardar como ejecutable -DLL de CobaltStrike
Guardar como DLL - CobaltStrike

El siguiente paso es cambiarle el EntryPoint. Si recordáis en el Export, se veía lo necesario para el siguiente cambio:

Guardar funciones -DLL de CobaltStrike

Necesitamos que cuando el EXE se ejecute, vaya directamente al contenido de Melon, así que tomamos esa dirección 0x17E3 como EntryPoint. Podéis usar cualquier programa de edición de PE, a mí me gusta este, Stud_PE:

Guardar archivo -DLL de CobaltStrike

Salvamos el fichero y ya estaría listo para ejecutarse como es debido. Si vamos al EntryPoint vemos una cadena grande una serie de operaciones con ella:

EntryPoint -DLL de CobaltStrike

Esto se repite a lo largo del programa, necesita colocar todo en su sitio, para cuando llegue el momento hacer uso del contenido.

Ponemos un breakpoint en VirtualAllocy nos fijamos en el tamaño de la shellcode que lleva dentro.

Tamaño de la shellcode  -DLL de CobaltStrike

Y además vemos que será código ejecutable, pero aún no sabemos donde estará esa zona. Pulsamos Ctrol+F9 y nos fijamos en el registro EAX, será ahí donde irá finalmente el shellcode.

Seccion reserva 0x000F0000-DLL de CobaltStrike

Ahora mismo está vacío.

Seccion reserva 0x000F0000 vacio -DLL de CobaltStrike

Después de unos cuantos F8 y bucles vemos lo siguiente:

Breakpoint DLL de CobaltStrike

Ponemos un Breakpoint en ese punto, ¿Por que? Para que pulsando F9 vayamos directos y ganemos mucho tiempo sin gastar mucho la tecla de F8 (es broma).

Si echamos un vistazo al registro ESI, vemos la shellcode de CobaltStrike lista para ser copiada a otro lugar y ser ejecutada más tarde.

Accesible dirección ESI - DLL de CobaltStrike

Podemos extraerla ya para ganar tiempo y usar scDbg para ver hacia donde irá para continuar con el proceso de infección, troyanización, etc.

SgDbg -DLL de CobaltStrike

Con un par de F8 más, tendremos ubicada la shellcode en la zona de memoria que habíamos visto anteriormente.

Relleno de memoria -DLL de CobaltStrike

Cuando renombráis la DLL a EXE, puede verse el icono que tiene:

Archivo Melon -DLL de CobaltStrike

¿Será que les gusta las aves exóticas?

Resoruce Hacker -DLL de CobaltStrike

Espero que os haya gustado y nos vemos en el siguiente post!