Análisis de malware
Análisis de malware e ingeniería inversa
agosto 12, por Srinivas
Introducción
Este artículo proporciona una descripción general de alto nivel del análisis de malware y la ingeniería inversa. Si planea comenzar con el análisis de malware y la ingeniería inversa, este artículo puede ser un buen punto de partida, ya que cubre una descripción general de alto nivel de lo que necesita saber antes de descargar ese depurador y ensuciarse las manos revirtiendo un malware. muestra. En este artículo cubriremos algunos de los aspectos fundamentales como:
- Introducción al análisis de malware y la ingeniería inversa.
- Lo que necesita saber para empezar con el análisis de malware y la ingeniería inversa
- Comportamiento común del malware
- Técnicas antianálisis comunes utilizadas por el malware
Vamos a empezar.
Si bien algunos programas maliciosos utilizan patrones comunes, como robar archivos y conectarse al servidor CC mediante las API de Windows, algunos programas maliciosos utilizan días cero o una vulnerabilidad específica para explotar. Independientemente de las técnicas que utilice el malware, la ingeniería inversa es uno de los enfoques comunes en el análisis de malware.
Cabe señalar que la ingeniería inversa requiere mucho tiempo y se sabe que es un tema complejo, pero sólo hasta que se domine.
Cosas a tener en cuenta antes de comenzar:
- Debe recordar que el análisis de malware debe realizarse únicamente en una computadora aislada que esté destinada ÚNICAMENTE al análisis para evitar cualquier infección. Se pueden utilizar máquinas virtuales para este propósito.
- Desconecte la máquina de Internet si no es necesario
¿Qué necesitas saber para empezar?
Entendiendo WinAPI
La mayoría de las familias de malware se dirigen a los sistemas operativos Microsoft Windows, por razones obvias. Windows posee el 78,43% de la cuota de mercado de usuarios de escritorio en todo el mundo y, por lo tanto, es un objetivo importante para los autores de malware. Como ingeniero inverso, es importante comprender los aspectos internos de Windows y las API de Windows de uso común para poder analizar de manera efectiva el malware dirigido a Windows.
Como ejemplo, supongamos que nos encontramos con la llamada a la función isDebuggerPresent mientras analizamos una muestra de malware. La existencia de esta llamada a función nos da una pista de que la aplicación puede estar intentando detectar si se está depurando. Si bien esto se puede encontrar buscando en Internet, una persona con conocimientos de la API de Win32 puede confirmar rápidamente que la aplicación está verificando si hay un depurador presente. Un vistazo rápido a la documentación de la API de Win32 muestra la siguiente sintaxis.
BOOL IsDebuggerPresent( );
Según la documentación de la API de Win32, esto “determina si un depurador en modo de usuario está depurando el proceso de llamada. Si el proceso actual se ejecuta en el contexto de un depurador, el valor de retorno es distinto de cero. Si el proceso actual no se ejecuta en el contexto de un depurador, el valor de retorno es cero”.
Entendiendo el desmontaje
Al analizar el malware, lo único que tenemos es un archivo ejecutable. Evidentemente, tener acceso al código fuente nos hace la vida mucho más fácil, pero eso dista mucho de la realidad. ¿Cómo analizamos entonces los binarios? Tendremos que obtener la versión descompilada o desensamblada del programa para poder entender la lógica.
Durante el proceso de generación de un archivo ejecutable, se generan varios archivos intermedios durante diferentes fases, como se muestra a continuación.
Código fuente – preprocesamiento – Compilación – ensamblaje – vinculación – Binario
Usando un descompilador, es posible obtener código fuente de alto nivel (no es posible con todos los idiomas) a partir de un archivo ejecutable. Dependiendo del lenguaje de programación utilizado y de cuán ofuscado fue por los autores, el nivel de dificultad de descompilación varía.
Utilizando un desensamblador, es posible obtener el código fuente de bajo nivel (código ensamblador) a partir de un archivo ejecutable. La mayoría de los depuradores también vienen con un desensamblador. Desmontan los programas ejecutables por nosotros, lo que nos permite recorrer el programa para realizar la depuración durante nuestro análisis.
Con un depurador, es posible ejecutar el código y comprender a qué rama fluye el código.
Elija sus herramientas
El análisis de malware se clasifica ampliamente en dos tipos: análisis estático y análisis dinámico.
Dependiendo del tipo de análisis que estemos haciendo y de los artefactos que estemos buscando específicamente, el conjunto de herramientas puede cambiar.
Si bien hay varias herramientas disponibles para análisis estático y dinámico, los siguientes son algunos de los depuradores más utilizados para ingeniería inversa.
- OllyDbg
- Radare2
- WinDbg
- Depurador de inmunidad
- IDA Pro
El comportamiento de un malware depende de para qué está diseñado. Sin embargo, en un nivel alto, algunos de los comportamientos más comunes son modificar el sistema de archivos, realizar cambios en las entradas del registro, realizar comunicaciones de red, crear nuevos procesos y cifrar archivos.
Si bien es fácil detectar y capturar artefactos de estas actividades, el malware moderno es inteligente. Suelen intentar detectar si alguien los está analizando. Si el malware detecta que alguien lo está analizando, sale inmediatamente o salta a un código que no tiene ningún sentido y que, finalmente, nos hará perder el tiempo. Esta actividad se realiza mediante el uso de una variedad de técnicas como anti-depuración, anti-desmontaje, anti-VM, empaquetadores, ofuscación, codificación y cifrado.
Tomemos anti-VM como ejemplo para comprender cómo se hace esto. Supongamos que estamos analizando malware en una máquina virtual que se ejecuta dentro de VirtualBox. Esta máquina virtual generalmente deja algunos artefactos sobre el hipervisor que se está utilizando, que los autores de malware pueden utilizar para detectar si el malware se está ejecutando dentro de una máquina virtual.
Por ejemplo, los siguientes procesos generalmente se ejecutan dentro de una máquina virtual que se ejecuta usando VirtualBox. Por lo tanto, el malware puede buscar estos procesos en ejecución y finalizarse o redirigir el flujo a algún código inútil si se detecta.
vboxtray.exe
vboxservice.exe
vboxcontrol.exe
De manera similar, si la máquina virtual se ejecuta usando VMware, se pueden encontrar los siguientes procesos.
vmtoolsd.exe
vmwaretray.exe
usuariovmware
vmacthlp.exe
¿Qué podrías ver en el proceso?
Veamos algunos de los malware modernos que puede encontrar durante su recorrido de análisis de malware. Es importante no sorprenderse cuando vea algo diferente al malware tradicional escrito utilizando el lenguaje de programación C.
Una clase importante de malware que deberíamos analizar son los rootkits. Los rootkits vienen en dos tipos: rootkits en modo usuario o rootkits en modo kernel. Los rootkits en modo usuario se ejecutan en el espacio del usuario (Anillo 3) y utilizan técnicas como el enlace API en línea. Por otro lado, los rootkits en modo kernel se ejecutan en el espacio del kernel (Anillo 0), que normalmente realizan modificaciones en el espacio del kernel. Comprender los comportamientos comunes de los rootkits es esencial para poder analizarlos durante el análisis de malware.
La ingeniería inversa del malware C++ es otra habilidad esencial, ya que algunas formas de malware se escriben en C++. Como las aplicaciones C++ pueden utilizar conceptos de programación orientada a objetos, estas aplicaciones son relativamente complejas de analizar mediante ingeniería inversa. Un analista debe poder identificar las clases y las relaciones entre ellas para poder analizarlas de manera efectiva.
Ser capaz de analizar malware de 64 bits es otra habilidad importante en el análisis de malware. El malware dirigido a procesadores de 64 bits se está volviendo más popular con la creciente popularidad de los procesadores de 64 bits. Para poder analizar eficazmente el malware de 64 bits, es importante tener conocimientos de la arquitectura de 64 bits y del conjunto de instrucciones.
Conclusión
Este artículo proporciona una breve descripción general de cómo se comporta el malware y qué herramientas y técnicas pueden utilizar los ingenieros inversos para diseccionarlo y analizarlo. Discutimos cómo el conocimiento de los aspectos internos de Windows puede ayudar en la ingeniería inversa. También analizamos cómo diversas habilidades, como la capacidad de comprender la arquitectura de 64 bits, pueden agregar valor en el análisis de malware.
¡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
Fuentes
- Invertir C++ , Sombrero Negro
- Rootkits , Symantec
- Análisis práctico de malware de Michael Sikorski y Andrew Honig , libro de No Starch Press