Advertisement
Fare9

Analisis de la muestra a9a2734d080e3ae0f5ada35e878da7c8

Dec 16th, 2019
465
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.39 KB | None | 0 0
  1. ##############################################################################
  2. #### ####
  3. #### Analisis de la muestra a9a2734d080e3ae0f5ada35e878da7c8 ####
  4. #### por Fare9 ####
  5. #### ####
  6. ##############################################################################
  7.  
  8. Ejemplo simple de analisis estatico del archivo dentro de la carpeta a9a2734d080e3ae0f5ada35e878da7c8 propuesto por Acid_Ctrl, el ejercicio se basa en identificar como se esta escondiendo la data, que funcion es la que se encarga de la ofuscacion/desofuscacion, la clave utilizada, etc.
  9.  
  10. Al descomprimir el archivo zip, podemos ver que no se trata de un binario ejecutable, sino que se trata de una base de datos de un binario ejecutable del cual lo primero que se nos muestra es la funcion main.
  11.  
  12. Si lo primero que hacemos una vez carguemos la base de datos de IDA, es mirar las strings, veremos que la mayoría se trata de cadenas generadas por el compilador, una de las cadenas indica "Microsoft Visual C++ Runtime Library", eso nos da grandes indicios de que compilador se uso.
  13.  
  14. La funcion main contiene varias llamadas a otras funciones, una de ellas a WSAStartup, otra a WSACleanup y otra a Sleep, las dos primeras para realizar funcionalidades de conexion por sockets (la implementacion de Microsoft), y la tercera para parar la ejecucion del programa un tiempo indicado. Otras llamadas a funciones no muestran nombre y eso puede ser porque estan embebidas o porque son funciones realizadas por el programador. Vamos a ir directos a estas llamadas.
  15.  
  16. + Funcion 0x401300: esta funcion empieza llamando al metodo de Microsoft GetModuleHandleA con el parametro NULL (o valor 0), esto hara que se nos devuelva en el registro EAX la direccion base en memoria de nuestro binario (handler del binario en memoria), este es usado para encontrar un recurso del tipo RT_RCDATA y con nombre MAKEINTRESOURCE(101) esta macro es usada cuando no se da una cadena de texto, finalmente el primer parametro de la funcion FindResourceA que es el handler o direccion de memoria que obtuvimos antes. En el bloque de instrucciones que empieza en 0x401357 hasta 0x40148C tenemos una serie de llamadas que obtienen el tamanio de ese recurso en bytes, alojan un buffer de memoria en heap con el tamanio obtenido anterior y finalmente el recurso es cargado en esa direccion de memoria (SizeofResource, GlobalAlloc, LoadResource). Finalmente si todo fue bien, LockResource es llamado, el cual nos da el puntero al principio de la memoria de ese recurso, y una funcion en la direccion de memoria 0x401190 es llamada. Finalmente para acabar de comentar esta funcion, he visto que hay codigo que parece de debug, el cual ningun control flow del programa llega actualmente ahi, y que muestra una serie de bytes por printf en bucle.
  17.  
  18. + Funcion 0x401190: esta funcion como parametros recibe el buffer del recurso obtenido con anterioridad y su tamanio, el cuerpo de esta funcion se basa en principalmente un bucle, este bucle va obteniendo cada uno de los bytes del recurso, los xorea con el valor 0x3B y los vuelve a guardar en su direccion de memoria. Por tanto, tendriamos que aqui se descifra la data de interes, se hace con un xor con el valor 0x3B que seria la key, y la funcion anterior seria la que carga el recurso a descifrar.
  19.  
  20. La funcion 0x401300 la he rellamado como load_resource_and_decode, y finalmente la funcion 0x401190 decoding_funcion.
  21.  
  22. De vuelta en la funcion main, si vamos despues del WSAStartup, vemos que se llama una vez a Sleep con el valor 500, y se llama a la funcion 0x4011C9, al principio IDA muestra un monton de variables tipo DWORD que no tienen referencias, y que muchas veces estan juntas y son inicializadas a 0 (al principio de la funcion), esto se debe a que IDA no reconoce que forman parte todas de un mismo buffer de caracteres (tambien conocido como String).
  23.  
  24. Funcion 0x4011C9: esta funcion empieza con un sprintf de la cadena "Mozilla/4.0" a un buffer de la funcion, seguido se llama a gethostname para obtener el hostname de la maquina a un buffer interno, este es despues copiado a un buffer con un tamanio maximo de 12 bytes (por tanto este hostname es reducido), este buffer es pasado a una funcion que tampoco tiene nombre, pero analizando algunas cadenas y su funcionamiento, se trata de una funcion para la codificacion de una cadena a base64. Con ese base64, y con el buffer descifrado con anterioridad se mete en un buffer llamando a la funcion sprintf con el formato "http://%s/%s/", esto nos muestra que el buffer descifrado es usado como URL y el base64 es añadido como parte de la URL completa. El agente antes copiado es usado para llamar a InternetOpenA, y la url es usada para llamar a InternetOpenUrlA, si todo fue bien, la funcion InternetReadFile es llamada, y se comprueba si el primer valor del buffer leido es igual a 0x6f, en ese caso la funcion retorna un 1 en EAX si no retorna un 0.
  25.  
  26. La base de datos de IDA no tiene mucho mas, y con ese analisis ya habriamos acabado el ejercicio. Para encontrar la data, para descifrarla, podemos buscar el binario (tenemos el hash como nombre de archivo), finalmente del binario encontrado, sacamos los recursos con la herramienta "Resources Hacker", y aplicamos el descifrado:
  27.  
  28. encoded url: [76, 76, 76, 21, 75, 73, 90, 88, 79, 82, 88, 90, 87, 86, 90, 87, 76, 90, 73, 94, 90, 85, 90, 87, 66, 72, 82, 72, 21, 88, 84, 86]
  29. XOR key used = 0x3B
  30. Decoded url: www.practicalmalwareanalysis.com
  31.  
  32. Como trafico de red, veremos una peticion a http://www.practicalmalwareanalysis/<base_64_de_gethostname>/ de ahi se hara un intento de conexion y apertura de URL, pero esta URL no existe en el servidor, por tanto devolverá un error, y este programa se quedara en un bucle infinito intentando conectarse, podemos ver un pequenio map de la web aqui: http://www.practicalmalwareanalysis.com/sitemap.xml
  33.  
  34. Podemos enocntrar ademas un analisis del binario en virustotal: https://www.virustotal.com/gui/file/71a295247ba7419f9f9dea8098e6867182bb80f53c98eb0f59192a6557a51249/detection
  35.  
  36. IOCs:
  37.  
  38. hashes:
  39.  
  40. MD5 a9a2734d080e3ae0f5ada35e878da7c8
  41. SHA-1 e8aacb0990e9f3a415ac7d5e24e7f7287665c110
  42. SHA-256 71a295247ba7419f9f9dea8098e6867182bb80f53c98eb0f59192a6557a51249
  43.  
  44. URLs accedidas:
  45. http://www.practicalmalwareanalysis.com (web legitima, puede arrojar muchos falsos positivos)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement