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:

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:

¿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.

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

  1. Invertir C++ , Sombrero Negro
  2. Rootkits , Symantec
  3. Análisis práctico de malware de Michael Sikorski y Andrew Honig , libro de No Starch Press