sábado, 10 de noviembre de 2012

Como Dumpear una muestra de DorkBot que fue ofuscada con UPX + Crypter.


Hoy les voy a mostrar como Dumpear una muestra de DorkBot que fue ofuscada con una capa de un Crypter en VB, luego compactada con UPX, y este modificado, para hacer mas difícil el análisis.



Analizaremos una muestra que me enviaron esta mañana y afecta a entidades bancarias de Perú.

Comenzamos con el ya conocido correo phishing para infectar a los desprevenidos:





Análisis del ejecutable en VirusTotal con un indice bajo de detecciones.




Primero hacemos una inspección ocular del binario con un editor Hexadecimal, en este caso FlexHex, se puede utilizar Hex Workshop, pero ya estoy acostumbrado a FlexHex.

Vemos que tiene las secciones típicas de UPX pero modificadas, por lo que puedo deducir que esta compactado con UPX.




Lo analizo con PEID, para sacarme la duda.

Aquí vemos que no detecto ningún packer (Nothing Found *)
(vemos que una de las secciones es UPX1...)





Inspeccionando las secciones vemos que falta la sección UPX0


Puedo modificar a las secciones con el editor Hexadecimal para luego intentar desempaquetarlo con el comando upx -d, pero lo vamos a hacer con el Ollydbg.



Resumiendo, lo que haremos con esta muestra sera:


1) Desempaquetar el UPX
2) Correr el Crypter (poniendo BP en WriteProcessMemory o ZwWriteVirtualMemory)
3) Dump de la muestra.
4) Ejecutar la muestra en una maquina virtual.



1) Desempaquetar el UPX


Podemos desempaquetar el UPX a mano o utilizando el plugin OdbgScript


Desempaquetando a mano:



Cargamos el ejecutable en el OllyDbg y observamos que el EntryPoint de este programa apunta a un PUSHAD que es típico de UPX.






Buscamos, luego del PUSHAD, el primer POPAD y poner allí un BP,  luego buscar el ultimo JMP y poner allí otro BP.



0041774D   . 58             POP EAX
0041774E   . 61             POPAD
0041774F   . 8D4424 80      LEA EAX,DWORD PTR SS:[ESP-80]
00417753   > 6A 00          PUSH 0
00417755   . 39C4           CMP ESP,EAX
00417757   .^75 FA          JNZ SHORT VIDEOMMS.00417753
00417759   . 83EC 80        SUB ESP,-80
0041775C   .-E9 F799FEFF    JMP VIDEOMMS.00401158 ---> Salto al OEP 
00417761     00             DB 00
00417762     00             DB 00
00417763     00             DB 00



Ejecutamos con F9 y va a parar en el POPAD, aquí ya se habrá ejecutado el código del packer UPX, volvemos a ejecutar con F9 y se detendrá en el JMP.
En este punto avanzamos con F7 y encontraremos el OEP .



(aquí podemos pasar a 2) Correr el Crypter)



Desempaquetado con OdbgScript:

Utilizaremos el siguiente Script, que realiza automáticamente lo que hicimos arriba, sin tener que andar buscando el POPAD/JMP en el código.

(El script lo grabamos en un archivo que luego cargaremos con OdbgScript)



var BPforPOPAD
var BPforJMP
findop eip,#61#
mov BPforPOPAD,$RESULT
bp BPforPOPAD
run
findop eip,#E9????????#
mov BPforJMP,$RESULT
bp BPforJMP
run
sti
msg "OEP Dumpear proceso en memoria"




Carga del malware en Ollydbg






Plugins -> OdbgScript -> Run Script: Seleccionamos el Script.







Listo, en este momento ya se ejecuto el Packer y estamos en el OEP

(click en aceptar)




2) Correr el Crypter



Bueno, aquí con cualquiera de los dos métodos utilizados mas arriba ya estamos en el OEP del programa. 






Por lo que continuamos con un F7 y ponemos un BP a WriteProcessMemory




Ejecutamos con F9, cuando para estaremos listos para hacer un dump del proceso.


3) Dump de la muestra.




Estando en el BP seleccionamos la dirección donde esta el buffer y le hacemos un Follow in Dump



Podemos hacer un dump con OllyDump o hacemos un Backup del Buffer en memoria.

Quizás este no es el mejor método para los puristas.... pero a mi me sirve... :D

Backup -> Save data to File




Lo guardamos en el Escritorio.






Aquí vemos en esta parte de la memoria que se trata de DorkBot.








Luego abrimos con el FlexHex el backup _001F6000.mem y Buscamos el texto MZ  o 4D5A en hexa.





Una vez encontrado, tenemos que seleccionar desde MZ hasta el fin del archivo.








Copiamos.






Y pegamos en otro Nuevo y grabamos el ejecutable.




En este punto ya tenemos a Dorkbot sin ofuscar y listo para ejecutarlo en una maquina virtual y probar a donde se conecta.

4) Ejecutar la muestra en una maquina virtual.


Probamos la muestra en una maquina virtual y observamos el trafico de red.





Pharming.




Eso es todo por el momento, espero que les guste.


Muestra + dump + Script:   http://www.mediafire.com/?95m6du912g6aztb


Password = infected



@Dkavalanche   2012


1 comentario:

Javier Aguinaga dijo...

un tip nomas, si queres ahorrarte el paso de modificar el dumpeado con un editor hexadecimal.

Puedes usar el ollydump con la direccion que te da el buffer del parametro en WriteProcessMemory y en size de la seccion a dumpear haces un size (argumento 3 o 4) de WriteProcessMemory

Android: BankBot. Hace un tiempo se filtro el fuente de un Bankbo t para android y se masifico bastante, creo que muchos lo han lanzado pa...