Introducción al análisis estático en Linux: debugging con GDB

La diversidad de códigos maliciosos ha conllevado a que los analistas deban enfocarse en diversas plataformas para realizar los análisis correspondientes. En este caso, profundizaremos sobre GDB, el debugger por defecto presente en las distintas distribuciones Linux.

Anteriormente cubrimos temas referentes a herramientas para análisis dinámico de malware, en este caso profundizaremos aquello referido a análisis estático en Linux. Así como Ollydbg suele utilizarse en entornos Windows a la hora de analizar un malware que afecte a sistemas Linux será necesario utilizar un debugger como GDB.

Para iniciar el debugger basta con ejecutar el comando gdb. De la misma manera, es posible ver las opciones a través del comando help. A continuación puede observarse una imagen correspondiente a la ayuda:

Ayuda

Si se desea obtener ayuda específica sobre uno de los comandos específicos, es posible adjuntar el comando help con el comando del cual se desea obtener más información.

Funcionalidades

Con gdb es posible ejecutar el archivo que se desea analizar dentro del contexto del propio debugger, o directamente realizar un attach de un proceso que ya está ejecutándose en memoria. En el caso de querer correr un determinado programa en el entorno del debugger, solo hace falta ejecutar gdb seguido de la aplicación que se desea analizar. De la misma manera, una vez que se ejecuta gdb, mediante el comando attach seguido del pid (id del proceso) es posible comenzar a analizar el archivo procesado.

Proceso de attach

En primera instancia, es posible que el analista desee averiguar a qué funciones del sistema operativo utiliza la aplicación que se encuentra bajo análisis. Mediante el comando info functions es posible observalo:

Función de información

En caso de querer conocer desde donde se está ejecutando el proceso así como también obtener mayor información de como se inició el mismo, esto es posible mediante el comando info proc:

Comando info proc

Desensamblado

Una vez que se ha obtenido información básica sobre la aplicación que se encuentra bajo estudio (posiblemente un código malicioso), es necesario comenzar con el proceso de desensamblado. De esa manera, con gdb es posible mediante el comando disas. En esta instancia se obtienen las instrucciones que actualmente está ejecutando el proceso:

Función disas

De todas formas, en muchas oportunidades será necesario desensamblar otras funciones, como por ejemplo la función principal (generalmente correspondiente a la función main de la aplicación). Esto es posible con gdb indicando explícitamente la dirección de memoria de la función de interés o en su caso su nomenclatura. En este caso, gdb main:

Comando disas main

Es claro que existen diferencias entre análisis estático y dinámico. Sin embargo, el complemento de ambas técnicas son las que permiten conocer en profundidad cual es el comportamiento de un código malicioso. En el caso de gdb, que permite el análisis estático en Linux, es importante conocer sus funcionalidades, ya que son las que permiten determinar que alcance posee un código malicioso sobre la mencionada plataforma.

En futuras ediciones profundizaremos explicando funcionalidades más avanzadas, como por ejemplo visualización de registros y establecimiento de breakpoints.

Fernando Catoira
Analista de Seguridad

Autor , ESET

Síguenos