Técnicas Anti-Debugging

Relacionado: IDOR. biblio. Herramientas. CENT. resumen.

Una de las principales estrategias para evadir la detección y análisis de malware es el uso de técnicas anti-debugging. Estas técnicas permiten que el malware engañe al analista, haciéndole creer que está ejecutándose en un entorno real, en lugar de en un entorno controlado, como un sandbox o una máquina virtual. Las herramientas como Pafish están diseñadas específicamente para simular un entorno real de ejecución y evitar que el malware se detecte como parte de un análisis estático o dinámico.

El proceso de modificar el entorno de ejecución del malware para hacerlo más difícil de analizar es complejo. Existen diversas técnicas que complican la depuración, como las modificaciones en los parámetros del sistema operativo, la red, el hipervisor, la memoria y otros detalles sutiles. Por ejemplo, la máquina virtual no puede virtualizar otra máquina a menos que se configure explícitamente. Además, los tiempos entre instrucciones, el tamaño de la memoria, el tamaño de la pantalla y otros parámetros pueden variar dependiendo del entorno de ejecución. Si se usan ciertas librerías del sistema o técnicas que no son propias del sistema operativo real, el malware puede detectar que está en un entorno virtualizado y comportarse de manera diferente.

Una de las maneras más fáciles de eliminar estas técnicas de evasión es parcheando el binario del malware, eliminando las instrucciones específicas que buscan detectar el entorno de ejecución.

PAFish

PAFish es una herramienta que permite simular entornos de ejecución reales para engañar al malware y hacerle creer que está siendo ejecutado en un sistema real. Esta herramienta puede ser utilizada para analizar cómo el malware responde en estos entornos simulados, lo que permite a los analistas eludir las técnicas anti-debugging que buscan evitar su detección.

PAFish no solo es útil para el análisis de malware, sino también para realizar pruebas de resistencia de las técnicas anti-debugging que emplea el malware, ayudando a mejorar las estrategias de detección.

Tarea de Clase

  1. En esta tarea, se utilizará la herramienta PAFish para analizar una muestra de malware. La muestra se ejecutará en una máquina con Windows, lo que permite observar cómo se comporta el malware en un sistema operativo común. El archivo de la muestra será subido a la rama main para su análisis.
  2. Primero hacemos un snapShot
  3. La mayoría de las herramientas que vamos a utilizar están e sys interanal
  4. Lo primero que vamos a ver es ltema de los precso con porcexp y procmo
  5. Servicio LSASS es el servicio de autenticación. Nota: Mimikatz pincha este y mira los procesos de autenticación.
  6. Pinchamos LSASS y podemos ver los strings. Podemos ver la imagen y la memoria.
  7. La imagen es la imagen del fichero en disco, en la memoria vemos los strings que de verdad utiliza el programa (podemos ver el nombre de usuario).
  8. Suspendemos el proceso para ver la memoria.
  9. Podemos ver quién abre dicho proceso.
  10. Conhost es el que mantiene la sesión de administración abierta.
  11. Si nos fijamos en los handles de PAFish, intenta acceder a un montón de cosas.
  12. SessionImmersiveColorMutes es un IOC porque PAFish es un mutex que utiliza Hyper-V para saber si se ejecuta en la máquina virtual.
  13. El proceso Explorer se puede utilizar para saber qué proceso utiliza un fichero (handler) y se puede borrar.
  14. También, podemos ver el tema de persistencia Disco Registro (Regshot es un poco caca por el tema de que windows escribe es mejor utilizar procmon) 1. Con ProcMon Ctrl+E para que no deje de funcionar porque genera muchos eventos y con Ctrl+E haces una captura de los eventos. 2. Con ProcMon podemos poner filtros, cosa que con RegShot no. 3. Filter Ctrl+L podemos establecer filtros.
    1. Operation begins with Reg.

    2. Pulsamos Clear para limpiar.

    3. Volvemos a ejecutar y vemos qué operaciones llaman al registro.

    4. Metemos otro filtro más: Process Name is pafish.exe. 4. Si nos fijamos la mayoría de eventos que aparecen es sobre regkey 5. Si ahora actualizas los filtros, puedes hacer un exclude y pulsas exclude. Puedes ver las cosas que hace PAFish. 6. Puedes ver lo que hace PAFish, ver qué procesos realiza. 7. CreateFile es para crear un handle y identificar un fichero; es un descriptor de fichero. Windows busca secuencialmente primero en System32 y luego en SysWow. 8. Para atacar PAFish, puedes hacer un DLL hijacking. 9. PAFish.log es lo que saca por pantalla. Con ProcMon podemos pasar las partes de memoria del proceso. Puedes ver que 0xFFF es la parte de la pila porque es la alta. Puedes ver los logs y ver si está en un entorno emulado. 10. Abrimos ProcMon otra vez, vamos al escritorio, a la carpeta, y ejecutamos mylib.dll: 1. 1. Con la terminal abrimos rundll32.exe nombre_libreria. 2. 2. Se puede mirar con path contains mylib.dll. 3. 3. Para ejecutar rundll32, tienes que poner la función PlayGame (el nombre de la función lo sacas con análisis estáticos). 4. 4. Pinchamos. 5. 5. Una vez que carga mylib.dll, hacemos una búsqueda en el registro , utilizando el path para poder encontrar que hace dicha librería.

Hipervisor

Los hipervisores permiten crear máquinas virtuales que simulan un entorno de hardware real. Sin embargo, las máquinas virtuales, como las que utiliza VirtualBox, tienen características específicas en su formato. Los malwares suelen intentar detectar si están siendo ejecutados en un hipervisor y pueden cambiar su comportamiento para evitar ser analizados en estos entornos. Los hipervisores tienen patrones que pueden ser detectados, como la falta de ciertas interacciones o características de hardware, lo que facilita que el malware identifique si está siendo ejecutado en una máquina virtual.

Análisis Dinámico de Procesos

El análisis dinámico de procesos se centra en observar el comportamiento del malware durante su ejecución. Algunos de los elementos clave a examinar son:

  • Procesos: Identificar qué procesos están siendo creados y ejecutados por el malware.
  • Handles: Observar los “handles” (manejadores) de recursos del sistema, como archivos, memoria, entre otros.
  • Conexiones: Las conexiones de red pueden indicar la interacción del malware con servidores de comando y control (C2).

El malware también puede intentar ganar persistencia, lo que significa que se asegura de seguir ejecutándose incluso después de reiniciar el sistema o cerrar la sesión. Algunos procesos pueden estar diseñados para ejecutarse al inicio del sistema, lo que indica que han logrado establecer una forma de persistencia.

Si un proceso no está relacionado con los servicios estándar del sistema operativo y no está gestionado por el orquestador de servicios, es probable que sea un proceso malicioso. Técnicas como el process hollowing permiten a los malwares inyectar código en la memoria de otros procesos legítimos, lo que hace más difícil su detección.

Elementos de Análisis Clave

  • Mutex: Los mutex son objetos que controlan el acceso a un recurso en un sistema operativo. Si un malware crea un mutex con un nombre único, esto puede ser un indicador de compromiso. Si el malware detecta que el mutex ya existe, puede concluir que ya ha sido ejecutado en el sistema.

  • Conexiones a C2: Las conexiones a servidores de comando y control (C2) son típicas en los ataques dirigidos. Monitorear estas conexiones puede ayudar a identificar y neutralizar el malware.

  • Stager y Stallees: Los stagers son componentes más pequeños que descargan y ejecutan los stallees, que suelen ser los ejecutables grandes del malware. Un stager es más difícil de detectar, ya que su tamaño es reducido, y su propósito es establecer una conexión o iniciar la descarga de más componentes maliciosos.

DLL Search Order Hijacking

Una técnica comúnmente utilizada en los ataques de malware es el DLL Search Order Hijacking, donde el malware manipula el orden en que el sistema operativo busca las bibliotecas dinámicas (DLLs). Esto puede hacer que el sistema cargue una versión maliciosa de una DLL en lugar de la legítima. Este ataque se puede llevar a cabo manipulando el directorio desde el cual se carga la aplicación o cambiando la ubicación de las DLLs necesarias para el correcto funcionamiento del sistema.

Aquí tienes una versión corregida y expandida de tu texto:


Ejecución de un Programa

Cuando un programa se ejecuta, la memoria se organiza en dos áreas principales: stack y heap. El stack se encuentra en la parte más alta de la memoria y crece hacia abajo, mientras que el heap se encuentra en la parte más baja y crece hacia arriba. Este esquema de organización permite una gestión eficiente de los recursos, pero también es clave para algunas técnicas de exploitación. Por ejemplo, los buffer overflows pueden ocurrir cuando se manipula el stack, y las infecciones de heap son comunes en ciertos tipos de malware.

La Global Offset Table (GOT), que es utilizada para la resolución de direcciones en programas que usan bibliotecas compartidas (como DLLs), se ejecuta en el heap. Este es un punto crítico para la explotación de vulnerabilidades como los Return-Oriented Programming (ROP), donde se aprovechan las entradas en la GOT para redirigir la ejecución del programa.

rundll32 para Ejecutar DLLs

Las DLLs (Dynamic Link Libraries) no tienen una función principal (main) como los programas tradicionales. Sin embargo, puedes ejecutar funciones específicas de una DLL utilizando el comando rundll32 en Windows. Este comando permite especificar el nombre de la DLL y la función dentro de ella que debe ejecutarse, lo que es útil tanto en situaciones legítimas como maliciosas.

Malware Atribuido al APT “Kareto”

Kareto es una muestra de malware atribuida a un grupo de amenazas persistentes avanzadas (APT) que afectó principalmente a equipos en Marruecos. Este malware incluía en su código una rutina que verificaba si el sistema estaba configurado en español, probablemente para evitar su ejecución en otros idiomas o para actuar de manera diferente según la configuración regional del sistema.

Herramientas de Monitoreo

  1. DiskMon: Esta herramienta es similar a Sysinternals, pero trabaja a un nivel más bajo, proporcionando detalles de las operaciones de disco. Es útil para monitorear las acciones de lectura y escritura en los discos duros durante el análisis de malware o en investigaciones forenses.

  2. Regshot: Para monitorear cambios en el registro de Windows, se puede utilizar Regshot. Esta herramienta toma “capturas” del registro de Windows y luego permite comparar dos imágenes de registro en diferentes momentos. Si el malware realiza modificaciones en el registro, Regshot puede mostrar claramente las diferencias, lo que ayuda a identificar sus acciones.

  3. FakeNet: FakeNet es una herramienta que emula múltiples protocolos de red, lo que permite a los analistas simular un entorno de red controlado y monitorear cómo el malware interactúa con el mismo. Esto es útil cuando se está analizando malware que intenta comunicarse con un servidor de comando y control (C2).

  4. La escritura de en disco es un procesos que utiliza la api de windows se puede monitorizar con promon. Sí, svchost.exe puede considerarse un orquestador de servicios en el contexto de Windows. Su función principal es gestionar y ejecutar los servicios del sistema operativo que están definidos en el registro de Windows.

¿Qué hace svchost.exe como orquestador de servicios?

El svchost.exe es un proceso fundamental que permite a Windows agrupar y gestionar múltiples servicios en un solo proceso para optimizar el uso de los recursos del sistema. En lugar de tener un archivo ejecutable para cada servicio individual, svchost.exe carga servicios dentro de su propio espacio de memoria.

Función principal:

  • Agrupar servicios: Los servicios de Windows, que son componentes esenciales del sistema operativo (como el servicio de red, actualizaciones de Windows, etc.), se agrupan bajo uno o varios procesos de svchost.exe.
  • Ejecutar servicios: svchost.exe se encarga de iniciar, detener y controlar estos servicios durante la ejecución del sistema operativo. Cuando se inicia Windows, el sistema operativo asigna diferentes servicios a distintas instancias de svchost.exe. Esto ayuda a organizar y gestionar mejor los recursos del sistema.
  • Eficiencia de recursos: En lugar de que cada servicio tenga su propio proceso independiente, svchost.exe permite que varios servicios se ejecuten en un único proceso, lo que reduce la sobrecarga de recursos del sistema.

Ejemplo de cómo funciona:

  1. El sistema operativo define una lista de servicios necesarios para su funcionamiento. Cada servicio tiene un nombre y está registrado en el sistema.
  2. svchost.exe agrupa estos servicios y los carga en memoria cuando son necesarios, lo que le permite orquestar su ejecución.
  3. Cada servicio puede estar configurado para arrancar automáticamente o bajo demanda, y svchost.exe controla estos arranques, asegurando que se gestionen correctamente.

¿Por qué se le llama “orquestador de servicios”?

Se le llama “orquestador” porque coordina y gestiona múltiples servicios de Windows dentro de un solo proceso. Esto es análogo a un director de orquesta que coordina a diferentes músicos (en este caso, servicios) para que toquen de manera armoniosa, asegurando que cada servicio se ejecute correctamente dentro del sistema.

En resumen:

  • svchost.exe es un proceso legítimo de Windows que orquesta y gestiona servicios del sistema operativo.
  • Puede manejar varios servicios en una sola instancia del proceso, ayudando a organizar los recursos y a hacer más eficiente el uso de la memoria.
  • Debido a su naturaleza, es un objetivo común para los atacantes que intentan ocultar malware dentro de un proceso legítimo para evitar su detección.