Ingeniería Inversa.

Análisis Dinámico.

alt text

Tercer laboratorio.

Un análisis dinámico es más profundo sobre el programa que intentar comprender las funcionalidades ocultas que son dificiles de detectar en un análisis estático.

El análisis estático servirá como guia para comprender paso a paso el programa en un debugger.

Abriremos el malware desempaquetado con x32dbg.exe (referido como x64dbg) debugger y con IDAFree.

 


Saltando el programa con el desensamblador.

Comúnmente los programas inician en 004010000 aunque en el debugger podría iniciar en una dirección diferente. Necesitaremos “saltar el programa” en el desensamblador.

Siguiendo las instrucciones, en el programa x64-dbg; presionando la tecla F9, se detendrá en el “EntryPoint”. Ir hacia arriba en el programa, para identificar la primer dirección, ésta es la dirección que deberá saltar.

Los pasos para ejecutar la acción: “Edit -> Segments -> Rebase Program”.

 

Underc0de - saltando el programa


Encontrando el punto de inicio.

Ahora necesitamos sincronizar el debugger y las direcciones en el desensamblador, para continuar. Comencemos con el offset de la función xxxx1530.

Para ello debemos seguir las siguientes instrucciones:

  • En IDA, abrir la solapa de funciones y buscar la función xxxx1530. Donde xxxx debe coincidir con el salto de dirección (si el salto es 01901000, entonces 01901530)

En x64dbg, debe presionar “Ctrl+G” para ir a la dirección especifica xxxx1530.

 

Underc0de - encontrando la direccion alt text


Función decode XOR.

Recuerde los siguientes atajos:

  • F2 (Marca).
  • F7 (Detenerse en).
  • F8 (Detenerse sobre).
  • F9 (Ejecutar).

Permiten utilizar el debugger de forma rápida. Si accidentalmente la ejecución sobrepasa el fin del programa, podemos reiniciar haciendo clic enalt text.

Underc0de - Función decode XOR.

En IDA, hay que obtener el offset de la función XorDecode salvado con anterioridad.

Underc0de - funcion xordecode

 

En x64dbg debemos encontrar el mismo offset y comentarlo si es la función XorDecode. Establecer una marca (breakpoint) usando F2 en la función. Luego ejecutar el programa hasta llegar a la marca (breakpoint) utilizando F9. Ir dentro de la función con F7.

Underc0de - buscando offset

Navegamos hacia abajo hasta el loop de la función XorEncoding. Debemos colocar una marca en las mismas instrucciones mostradas en la imagen debajo. Hacemos clic derecho en el registro EBX y selecionamos “Follow in Dump”. Esta ubicación es donde la cadena decodificada será almacenada. Luego de colocar las marcas, presionamos F9 para ir al inicio del loop, entonces ir paso a paso por los loops, hasta encontrar una cadena decodificada en el vuelco.

underc0de - dump


Identificando las solicitudes de Internet.

Si queremos manipular el flujo de control de las instrucciones, podemos obtener información de las llamadas de conexión de red de la API. Conocemos que el programa se copia y borra automaticamente luego de verificar si el archivo no existe utilizando “GetFileAttributes” de la API. Continuando con la instrucción jne (saltar si no es igual), debemos hacer doble click en ZF Flag para cambiar el resultado de 1 a 0.

Underc0de - jne

Una vez pasado el cambio, hay una cadena extraña, que hemos visto durante el analisis estático. Presionando F8 la función XorDecode mostrará el registro EAX. Es la URL que obtuvimos en el tiempo invertido (primer laboratorio).

Underc0de - internet trafico


Manipulando las peticiones HTTP salientes.

La máquina virtual no está conectada a internet, pero si InetSim. Que pasaría si al manipular el flujo de datos conseguimos que la conexión a internet falle ? Para conseguir este cambio, debemos manipular el flujo de control en ZF .

Underc0de - manipulando conexion saliente


Hay un mensaje esperando.

Al parecer el malware tiene un mensaje a la espera de ser descubierto. Navegando en el cuadro de mensajes (MessageBox) de la API. Colocamos una marca (breakpoint) en y luego de la llamada de la funcíon, ésto prevendrá omitir cualquier funcionalidad oculta. Continuando y presionando F9 ejecutara la funcion en el cuadro de mensaje.

Underc0de - un mensaje esperando


Extrayendo el recurso.

Con el CFF utilizado en tiempo invertido, reveló que hay un recurso llamado BIN. Ingresando al programa para obtener la ubicación del recurso cargado luego de LockResource. Recordando que la función devuelve una salida en el registro EAX. 

Recordando que: mov edi,eax es donde la salida fue guardada en EDI.

Underc0de - Extrayendo el recurso


Función criptográfica.

Asumiendo que el malware se está por desencriptar, la cadena basada en la función con los argumentos para CryptStringToBinary.

Underc0de - funcion cripto

Sabemos que el primer argumento corresponde al registro EDI que es el recurso que se ha cargado en memoria y el tercer argumento es el primer argumento.

En CryptStringToBinary dwflag 0x00000001 significaCRYPT_STRING_BASE64.

Volcando la dirección del EDI dentro de uno de los vuelcos de windows. El dato parce ser codificado en base64.

Situandonos sobre ésta función antes de continuar al segundo llamado de CryptStringToBinary. El resultado será ubicado en el registro ESI. Volcando la dirección en el registro ESI. ¿Hay algo raro sobre los primeros tres caractéres?

Underc0de - caracteres


Creando el archivo y ejecutando la shell.

Ahora debemos guardar los cambios del recurso desencriptado a un archivo de sistema. Verificando que el archivo es guardado como icon.gif.

El siguiente paso es ir antes del inicio de argumentos que ejecuta la llamada de ShellExecute.

Parece como si utilizara el entorno para abrir el archivo recién creado. El programa finalizará.

Underc0de - Creando el archivo y ejecutando la shell.


Fin.

Ir al navegador y ejecutar icon.gif


Es importante estudiar los pasos que sirvieron de fundamentos para llegar a ésta conclusión, fundamentos, revisión de malwares, herramientas útiles, tiempo invertido, análisis estático.

Posts Relacionados

Comments

comments

Deja una respuesta

Tu email no será publicado. Los campos requeridos estan marcados con *
Puedes usar tags HTML y los atributos: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">