Cómo estudiar casos comunes de inyección de código en el malware

Cómo estudiar casos comunes de inyección de código en el malware

Un ejemplo práctico de cómo estudiar casos de inyección de código en el malware mediante el análisis de aplicaciones de ejemplo.

Un ejemplo práctico de cómo estudiar casos de inyección de código en el malware mediante el análisis de aplicaciones de ejemplo.

La mejor forma para entender cómo funciona la inyección de procesos es poder ver el código en funcionamiento. Si no contamos con acceso a diversas muestras de ejecutables maliciosos, la alternativa es analizar aplicaciones de ejemplo, que muestren las técnicas comúnmente utilizadas en el malware.

La investigadora hasherezade ha publicado varios ejemplos de estas técnicas, cuyos proyectos pueden descargarse de su github. Para poder compilarlos, es necesario tener instalada alguna versión de Visual Studio y CMake.

 

En mi caso, descargué una versión gratuita de Visual Studio 2012. Pueden descargarlo de aquí, donde van a necesitar loguearse con su cuenta de Live o crear una en el momento. Luego, con CMake (que pueden descargar de aquí) van a generar los archivos de solución de Visual Studio acorde al entorno instalado en sus computadoras.

Para empezar, tomemos como ejemplo un caso de Process Replacement (RunPE). Ya hemos hablado acerca de esta técnica de inyección en los artículos “truco para contrarrestar técnicas de Process Replacement” y “Cómo analizar malware en .NET que se encuentra ofuscado“; recomiendo leerlos si aún no lo han hecho. En resumen, se remplaza la imagen de un proceso en memoria por la de un ejecutable malicioso.

 

En la imagen anterior se ve cómo debemos configurar CMake para que apunte a la carpeta src del proyecto run_pe. Además, creamos una carpeta build, que contendrá la solución generada por CMake. Por último, seleccionamos Visual Studio 2012 (en nuestro caso), y le damos clic al botón de Generar.

 

Si todo salió bien, vamos a la carpeta build que creamos previamente y encontraremos ahí el archivo de solución de Visual Studio que fue generado.

 

Al abrirlo, encontraremos el código que nos interesa en el proyecto RunPE, aunque a la hora de compilar la solución, podemos hacerlo desde el explorador de Soluciones, ejecutando ‘Build Solution’.

 

Antes de generar el ejecutable que realiza la inyección, es recomendable elegir la configuración ‘Release’ para la compilación. También pueden generar la versión ‘Debug’ para poder colocar breakpoints y seguir el rastro de la ejecución dentro del mismo entorno de Visual Studio.

 

En la imagen anterior vemos las típicas llamadas a la API de Windows relacionadas con Process Replacement. Como paso adicional, resulta interesante utilizar un debugger externo (OllyDbg 2 en mi caso) y ver si podemos dumpear el ejecutable inyectado desde la memoria, ya sea antes de que se ejecute el ResumeThread, haciendo el dump desde el buffer de donde se copia, o posterior al ResumeThread; por ejemplo, haciendo un attach al proceso inyectado (calc.exe).

 

El resto de los ejemplos se los dejo a ustedes. Les recomiendo que intenten analizar los ejecutables como si fueran una muestra maliciosa desconocida, apoyándose en el código fuente si en algún punto se sienten perdidos o no saben cómo avanzar.

¡Happy debugging!

Quizás te pueda interesar también:
Un caso práctico de inyección de código malicioso

Discusión