Tabla de Contenidos

Análisis del Malware Tema 2

Sandboxes

La idea de las sandbox es poder analizar dinámicamente el malware en un entorno aislado. Estas Herramientas registran toda la actividad del malware y generan un reporte. Para esto también se puede usar un KVM (Kernel Virtual Machine)que nos permite arrancar una máquina virtual para analizar automáticamente la actividad de un malware, generar un reporte y recuperar la máquina a una snapshot anterior.

Cuckoo Sandbox

Inicia varias máquinas virtuales conectadas a una red virtual para analizar el comportamiento de un malware. Lo primero que se debe hacer tras instalar Cuckoo es configurar la aplicación, para ello vamos a la carpeta conf:

Para inicializar cuckoo primero se debe instalar el agente en la máquina virtual (agent/agent.py). Finalmente se debe realizar una snapshot con el agente arrancado, de forma que cuckoo pueda restaurar la máquina virtual tras cada análisis. Para iniciar cuckoo se debe ejecutar el script cuckoo.py en el host. Tras eso envías el archivo que se quiere analizar con submit.py, que se encuentra en la carpeta utils. Se pueden seleccionar los formatos con el flag -package.

Los resultados del análisis se guardan en la carpeta storage/analysis:

Cuckoo tiene algunas limitaciones ya que al volverse muy popular algunos malwares traen contramedidas como sistemas anti análisis. Lo que hacen estos sistemas es:

Debido a esto cuckoo está en constante evolución, al igual que el malware.

REMnux

Kit de herramientras para hacer ingeniería inversa y revisar software malicioso. Provee de una colección de herramientras creadas por la comunidad que se pueden usar para el análisis del malware. También ofrece imágenes de docker con herramientas de análisis de malware populares.

FlareVM Sandbox

Colección de scripts que permiten montar y mantener un ambiente de ingeniería inversa en una máquina virtual. Depende de 2 principales tecnologías:

Contramedidas del Malware

El malware puede tener numerosas medidas contra la ingeniería inversa:

Ofuscación

Transformar el programa dejando las funcionalidades intactas para dificultar el entendimiento de su funcionamiento. Normalmente la ofuscación se usa para:

Codificación de datos

Cifrado simple

Hay muchos cifrados simples que aplican operaciones de bit sobre los registros de datos:

Algoritmos standar de ciptografía

La forma más fácil de descubrir el algoritmo es usando uno estándar:

Custom Encoding

Sistemas de codificación caseros:

Reverse Encoding

Procedimiento estándar para encontrar que codificado se ha utilizado y deducir como descifrarlo:

  1. Trazar la ejecución del programa buscando funciones de codificado y decodificado
  2. Deducir cuando y como se usan estas funciones.
  3. Usar el malware contra sí mismo: reprogramar las funcioanes, usarlas como son en el malware…

Usando el malware contra sí mismo

Arrancar el malware en un debugger y establecer breakpointas antes y despues del codificado o decodificado. Tiene sus problemas:

Empaquetado del malware

Los diseñadores de malware suelen añadir un componente llamado run-time packer que son aplicaciones que comprimen el código como otras aplicaciones típicas como Zip o RAR. Cuando estas aplicaciones son descomprimidas con el empaquetador, la aplicación será descomprimida en la memoria de sistema en vez de en el sistema de archivos. La ventaja de esto es que el código de un malware es más pequeño y menos detectable, lo que dificulta su detección por parte de antivirus. Otra medida que se puede tomar es encriptar el malware con el empaquetador, de forma que ni los antivirus puedan desempaquetar el código.

Procedimiento

  1. Descomprimir el código empaquetado
  2. cargar el código empaquetado en memoria
  3. Resolver las importaciones del ejecutable original
  4. Transferir la ejecución al OEP (Original entry point.)

Normalmente se realizan tareas anti análisis en cada paso.

Empaquetando el Malware

En los empaquetadores, un estub es una pieza de código que contiene la rutina de decompresión o descifrado que actua de cargador y se ejecuta antes de ejecutar el malware.

Detección

Hay varios indicadores de que podemos estar tratando con un ejecutable empaquetado:

Desempaquetando el código

Si este fuera un caso fácil, para desempaquetar el código pueden usarse métodos como XOR, AES, etc… A veces se mantiene la tabla de importación intacta de forma que el cargador de windows puede resolver los imports. Si fuera un caso difícil no hay imports y hacerlo manualmente es un dolor de cabeza.

Desempaquetado automatizado

Existen herramientas como UPX que permiten realizar los desempaquetados, pero no siempre sirven. A veces se crean scripts o herramientas propias para empaquetar, lo que hace difícil su desempaquetado. El desempaquetado automatizado no siempre funciona debido a esto.

Cuando falla el desempaquetado automatizado

La dificultad y tiempo requeridos depende de:

En estos casos se pueden aplicar 2 métodos:

El proceso

  1. Encontrar el punto de entrada original (OEP): La dirección de memoria donde el programa comienza es movido en la sección empaquetada. El analista tiene que recuperar el archivo original
  2. Reconstruir la tabla de direcciones importadas (IAT): Esta referencia las funciones usadas por el programa disponibles en la API de windows. Durante la ejecución, el IAT es resuelto dinámicamente por el malware y lo que hace mucho más difícil trazar el código.

Encontrando el OEP: Saltos

Buscar por instrucciones de salto (JMP) al final de cada sección de código:

El OEP puede estar en diferentes secciones de un stub de desempaquetado:

Encontrando el OEP: PUSHA/POPA

Encontrando el OEP: Llamadas a la API

Bloquear la tabla de imports nos acerca al final del stub:

Buscar llamadas API de Windows como GetModuleHandle o GetCommandLine:

Bloqueando Imports