Análisis de malware
Depuración para análisis de malware
agosto 14, por Srinivas
Este artículo proporciona una descripción general de la depuración y cómo utilizar algunos de los depuradores más utilizados. Comenzaremos hablando de OllyDbg; Al usarlo, exploraremos temas como la configuración de puntos de interrupción, el paso a paso de las instrucciones y la modificación del flujo de ejecución.
Luego discutiremos WinDbg, que se puede usar tanto para la depuración en modo usuario como en modo kernel.
¡Conviértete en un ingeniero inverso certificado!
Obtenga capacitación práctica en vivo sobre análisis de malware desde cualquier lugar y conviértase en un analista certificado de ingeniería inversa. Comienza a aprender
Conceptos básicos de depuración con OllyDbg
En este artículo, comenzaremos con OllyDbg para comprender los conceptos de depuración. OllyDbg es un depurador de Windows potente y popular para el análisis de malware. La mejor parte es que es gratis. OllyDbg se puede descargar desde http://ollydbg.de/ . Cabe señalar que OllyDbg sólo admite la depuración en modo de usuario.
La mejor manera de aprender ingeniería inversa es mediante ingeniería inversa. Elige un objetivo e intenta romperlo. Dado que este es un artículo introductorio, donde vamos a comprender los conceptos básicos de los depuradores, usemos un binario de desafío crackme simple como nuestro objetivo. El binario de destino se puede descargar desde https://crackmes.one/ .
Durante el proceso de resolver este desafío, comprenderemos varios conceptos de depuradores. Cuando ejecutemos este crackme, veremos el siguiente mensaje. Nuestro objetivo es evitar esta advertencia del período de evaluación invirtiendo este binario.
Hay dos formas en que podemos empezar a revertir un binario:
- Abra la aplicación usando el depurador e iníciela
- Inicie la aplicación y adjunte el depurador al proceso en ejecución
Usaremos el método 1 en este caso.
Para iniciar OllyDbg, haga clic derecho en la aplicación OllyDbg y haga clic en Ejecutar como administrador . Esto iniciará OllyDbg, que tiene el aspecto que se muestra a continuación.
A continuación, navegue hasta Archivo | Abra y elija el binario de destino como se muestra a continuación.
Haga clic en Abrir y debería abrir el binario de destino en OllyDbg, como se muestra a continuación.
La anterior muestra varias secciones de la parte superior izquierda de la ventana. Antes de continuar con la resolución de nuestro desafío, comprendamos algunos temas importantes en la depuración.
Un solo paso
Durante el análisis de malware y la ingeniería inversa, es posible que necesitemos ejecutar el código línea por línea para comprender el comportamiento en un punto determinado. Los depuradores nos permiten ejecutar el programa en un solo paso. En OllyDbg, podemos realizar un solo paso usando la tecla F8 (cabe señalar que estas teclas de acceso directo se pueden personalizar) o haciendo clic en el botón resaltado en la siguiente figura.
Este botón se utiliza para pasar por encima . Esto significa que el paso único ocurre por línea de código. Sin embargo, si presionamos esta tecla cuando el depurador está a punto de ejecutar una instrucción CALL, la ejecución de la subrutina se completará y el paso único continuará con la siguiente instrucción después de la instrucción CALL.
Si desea seguir paso a paso las instrucciones dentro de la rutina su, debemos usar el paso a paso en la instrucción CALL. En OllyDbg, esto se puede hacer usando la tecla F7 o el botón resaltado a continuación.
Puntos de interrupción
Si queremos detener la ejecución en una dirección determinada para poder continuar con un solo paso desde allí, eso se puede hacer usando puntos de interrupción . Un punto de interrupción nos permite indicarle al depurador que interrumpa la ejecución del código en una dirección específica. Supongamos que queremos establecer un punto de interrupción en la línea resaltada en gris a continuación.
Podemos hacerlo usando la tecla F2 o dando clic derecho en cualquier lugar de la línea resaltada y eligiendo Punto de interrupción | Alternar . Después de establecer un punto de interrupción, continúe la ejecución del programa y la ejecución se detendrá en la dirección donde configuramos un punto de interrupción anteriormente. Si queremos eliminar el punto de interrupción, podemos repetir el mismo paso que se utiliza para configurar un punto de interrupción una vez más.
Después de ejecutar el programa, una vez que se alcanza el punto de interrupción, veremos que se detiene la ejecución junto con un mensaje de punto de interrupción.
Excepciones
Otro concepto importante a tener en cuenta son las excepciones. Las excepciones pueden deberse al acceso a una ubicación de memoria no válida o al realizar cualquier operación que provoque una excepción. Algunos autores de malware provocan excepciones innecesarias intencionadamente sólo para confundir y hacer perder el tiempo a los ingenieros inversos. Por ejemplo, cuando se adjunta un depurador, el malware puede provocar una excepción mediante el controlador de excepciones estructurado (SEH), que es una técnica antidepuración común en el malware de Windows.
Modificando la ejecución
Durante el análisis de malware, puede ser necesario controlar el flujo de ejecución del malware que se analiza. Un caso de uso de muestra es que algunos programas maliciosos detectan máquinas virtuales y el malware dejará de ejecutarse cuando detecte una máquina virtual. En tales casos, necesitaremos parchear el binario para poder evitar la detección de VM y poder analizar la muestra.
Utilizando un depurador como OllyDbg, es posible modificar el flujo de ejecución del binario que se está analizando. Esto se puede hacer modificando las instrucciones en el binario.
Para entender mejor esto con un ejemplo, volvamos a resolver nuestro desafío. Actualmente, hemos cargado el binario de destino en OllyDbg. Si continuamos ejecutándolo será mediante un aviso.
Busquemos una dirección que dé buenas noticias en lugar de una advertencia. Para hacer esto, busquemos todas las cadenas de texto disponibles en el binario. Esto se puede hacer haciendo clic derecho y luego navegando a Buscar | Todas las cadenas de texto a las que se hace referencia . Esto se muestra a continuación.
Esto nos mostrará la siguiente ventana con las cadenas de texto.
Hay una cadena que dice “¡ Realmente lo lograste! Felicidades!!! ” Averigüemos dónde se está ejecutando esto. Podemos ir a su respectivo código ensamblador dando doble clic en la cadena, como se muestra a continuación.
Nuestro objetivo es llegar a este bloque y ejecutar este cuadro de mensaje en lugar del mensaje de advertencia que recibimos anteriormente. Copiemos la dirección de la instrucción PUSH 0 haciendo clic derecho y navegando a Copiar | Al portapapeles . Ahora pégalo en un bloc de notas y anota la dirección de la instrucción. En este caso la dirección es 00401
Ahora establezcamos un punto de interrupción en la instrucción JNZ SHORT , que está disponible justo antes del mensaje de advertencia. Hacemos esto porque esta es la instrucción que decide si las instrucciones que muestran el cuadro de mensaje de advertencia deben ejecutarse o no.
Continúe corriendo y alcanzará el punto de interrupción. Una vez alcanzado el punto de interrupción, haga doble clic en la instrucción JNZ SHORT y modifíquela como se muestra a continuación.
Haga clic en Ensamblar y luego en Cancelar . Finalmente, continúe ejecutando la aplicación y debería ver lo siguiente.
Felicitaciones, ha modificado con éxito el flujo del programa.
Usando la vista previa de WinDbg
Ahora veamos una introducción rápida a otro depurador popular llamado WinDbg. WinDbg es un depurador popular que se utiliza tanto para la depuración en modo usuario como en modo kernel. WinDbg tiene una versión de interfaz gráfica de usuario llamada WinDbg Preview, que se puede descargar desde la tienda de aplicaciones de Windows.
Según la documentación de Microsoft, “WinDbg Preview es una versión completamente nueva de WinDbg con imágenes más modernas, ventanas más rápidas y una experiencia de scripting completa, construida con el modelo de datos extensible del depurador al frente y al centro. WinDbg Preview utiliza el mismo motor subyacente que WinDbg hoy, por lo que todos los comandos, extensiones y flujos de trabajo a los que estás acostumbrado seguirán funcionando como antes”.
Descarguemos WinDbg Preview y ejecútelo. Esto se ve como se muestra a continuación.
Vaya a Archivo | Inicie Executable y elija nuestro binario de destino.
Cuando iniciamos el ejecutable usando WinDbg, la ejecución se pausa y no veremos nada en ejecución.
Si queremos realizar la depuración usando WinDbg Preview, podemos usar las opciones de GUI disponibles o podemos usar las opciones de línea de comandos.
Para continuar ejecutando la aplicación, ingrese el comando g y presione enter. Esto se ve como se muestra en la siguiente figura.
Una vez que se reanude la ejecución, deberíamos poder ver la aplicación de destino ejecutándose como se muestra a continuación.
Como hicimos con OllyDbg, también podemos usar WinDbg para seguir las instrucciones paso a paso. Esto se puede hacer usando la opción de línea de comando p o podemos usar el botón GUI que se muestra a continuación.
De manera similar, podemos ver el desmontaje, establecer puntos de interrupción y modificar el flujo de control usando WinDbg. Independientemente del depurador que utilicemos, las funciones de depuración seguirán siendo en su mayoría las mismas.
El poder real de WinDbg se puede ver al realizar la depuración del kernel, ya que la mayoría de los otros depuradores solo admiten código en modo de usuario. Podemos usar WinDbg para depurar el kernel de Windows.
Introducción a la depuración del kernel de Windows
Los malware más sofisticados, como los rootkits, suelen inyectar código en los controladores del kernel, lo que puede resultar complicado durante el análisis. En esta sección, analicemos cómo podemos configurar nuestro entorno para comenzar con la depuración del kernel.
Para poder realizar la depuración del kernel de Windows, necesitamos dos máquinas. La primera máquina, que normalmente se ejecuta como una máquina virtual, actúa como un depurador y la segunda máquina (máquina host) contiene el depurador y se utiliza para monitorear/depurar el depurador.
La máquina de destino debe configurarse para la depuración. Esto se puede hacer ejecutando los siguientes comandos:
Hemos habilitado la depuración y configurada la depuración a través de la red. 192.168.1.71 es la máquina host y elegimos usar el puerto 55123. Finalmente, habilitamos la firma de prueba para la depuración. Deberíamos tomar nota de la clave que hemos conseguido en el segundo comando. Esto se utilizará al conectarse desde el depurador.
Cambie a la máquina host, inicie WinDbg y navegue hasta Archivo | Adjuntar al kernel . Ingrese los detalles requeridos como se muestra a continuación.
Ingresamos el puerto 55123, que configuramos anteriormente en la máquina de destino usando bcdedit . La clave también se anotó anteriormente e ingresamos la dirección IP de la máquina remota que se está depurando. Finalmente hacemos clic en Aceptar y deberíamos ver lo siguiente:
Ahora reinicie la máquina de destino mientras el depurador se conecta al kernel de la máquina remota en el momento del arranque.
Si observa la parte inferior de la anterior, dice «El depurador se está ejecutando». Para iniciar la consola y pausar al invitado, presione el botón Pausa resaltado a continuación.
Después de presionar el botón Pausa, deberíamos ver una consola kd donde podemos ejecutar comandos. Esto se muestra a continuación.
Ahora podemos comenzar a depurar ejecutando varios comandos del depurador. El comando lm, por ejemplo, nos proporciona la lista de módulos cargados, como se muestra a continuación.
Introducción a Radare2
Radare2 es un marco de línea de comandos para ingeniería inversa. Radare2 se puede descargar aquí .
Descargue el instalador de Windows e instale Radare2. Cuando se instala el marco Radare2, se instalarán algunas utilidades adicionales como Rabin2 y Radiff2 junto con Radare2.
La siguiente muestra cómo se puede utilizar Rabin2 para obtener información sobre el binario de destino.
De manera similar, podemos usar -S para obtener varias secciones del ejecutable. Esto se muestra a continuación.
Podemos ejecutar los siguientes comandos en el mismo orden para analizar el binario usando Radare2 y obtener una vista visual.
radare2.exe [destino.exe]
aaa
V
V
Después de ejecutar lo anterior, podemos ver el gráfico de flujo de control, como se muestra a continuación. La siguiente muestra el bloque con el punto de entrada del binario de destino y tiene ramas a otros dos bloques de código.
La rama de color rojo salta al código que nos muestra la “advertencia de licencia desactualizada” que vimos al usar OllyDbg.
Podemos desplazarnos hacia abajo para comprender más sobre el binario y poder analizarlo más a fondo usando Radare2. Por ejemplo, el siguiente bloque muestra el mensaje de felicitaciones, que es nuestro objetivo final al descifrar el binario objetivo.
Este artículo no es una inmersión profunda ni una guía de uso de Radare2, pero solo queríamos echar un vistazo rápido a cómo esto puede ser una opción para revertir binarios. Radare2 admite todas las funciones de depuración comunes, como puntos de interrupción y paso único, y se puede utilizar para archivos binarios de 32 y 64 bits.
¿Quiere obtener más información sobre la depuración? ¡ Consulte nuestro curso de habilidades de depuración !
Conclusión
En este artículo, analizamos algunos de los depuradores populares y las funciones de depuración más utilizadas. También echamos un vistazo rápido a cómo usar WinDbg Preview tanto para la depuración en modo usuario como para la depuración en modo kernel. También discutimos cómo podemos configurar un laboratorio de depuración del kernel de Windows usando WinDbg. Finalmente, echamos un vistazo rápido a Radare2.
Fuentes
- Depuración mediante WinDbg Preview , Microsoft
- Configuración de la depuración en modo kernel , Microsoft
- Radare: un marco de línea de comandos para ingeniería inversa al estilo *nix , Radare