Ghidra: Primer análisis con la herramienta de Ingeniería Inversa “cortesía” de la National Security Agency
En el mes de enero ya se comentaba en todo Internet que la NSA (National Security Agency) planeaba liberar una herramienta para realizar trabajos de Ingeniería Inversa (Reverse Engineering) llamada Ghidra. Ha sido ya durante el mes de marzo cuando al fin ha visto la luz, y en el mundo de la ciberseguridad se habla mucho hoy sobre ella. Es por eso que nos hemos decidido a probarla y ver qué tal funciona.
Antes de probar la herramienta vamos a dejar algunas preguntas con sus respuestas, para las dudas que puedan surgir.
Una vez tengamos todo listo, podemos pasar a la prueba de concepto, y ver la herramienta en funcionamiento. Cualquier persona que se haya dedicado al reversing se sentirá cómodo trabajando con la aplicación, probablemente te resulte familiar a otros entornos como IDA.
Aquí no vamos a ver todas las opciones ya que no pretendemos entrar en muchos detalles. Vamos a ver por encima la herramienta, para os podáis hacer una idea de su potencial y comenzar a utilizar.
Para usar Ghidra, lo primero que tenemos que hacer es crear un nuevo proyecto, que puede de ser de dos tipos, compartido - para trabajar con más personas - o no compartido, como se ve en la Figura 3.
Cuando demos a Next, tendremos que elegir la ruta donde se creará el proyecto, y el nombre que le queremos dar. Nos saldrá el proyecto activo y ya podremos elegir un binario con el que trabajar, podemos hacer uso de “Drag & Drop”, aquí vamos a usar la calculadora para la prueba, como se ve en la Figura 4.
En Format en el menú de la Figura 4 se puede elegir “Raw” y seleccionar el lenguaje por nosotros mismos. Si le das a Options, podrás marcar o desmarcar diferentes acciones, como por ejemplo seleccionar si quieres que cargue librerías externas (por defecto desmarcada). Cuando le demos al OK, veremos como empieza a importar el archivo tal y como se ve en la Figura 5.
Al terminar nos dará un resumen del fichero cargado. En el apartado que pone Additional Information se puede comprobar si se cargan correctamente las librerías o no se encuentran. En este caso es un archivo de sistema operativo Microsoft Windows con librerías en formato DLL (Dynamic-Link Library).
Una vez revisada la información, damos a OK y veremos nuestro archivo binario cargado. Como en esta ocasión se ha elegido cargar librerías externas, veremos diferentes DLLs. Ahora, como siguiente fase de la prueba, nos vamos a centrar en el archivo “calc.exe” y pasamos a correr sobre él una herramienta llamada CodeBrowser.
Para lanzar CodeBrowser se puede arrastrar el binario a la "Cabeza de dragón verde", o en el menú Tools > Run Tool > CodeBrowser, y seleccionando el archivo en File > Open. Nos saltará un aviso, donde pone que no se ha analizado aún para saber si queremos hacerlo ahora. En esete caso decimos que sí. Las opciones del analizador las podemos dejar por defecto o modificarlas a nuestro gusto.
El análisis, como es lógico tardará dependiendo de la aplicación a analizar. En la parte izquierda veremos la estructura del programa (Program Trees), navegación por el código (Symbol Tree), donde podremos buscar por palabras y por último el tipo de datos (Data Type Manager).
En la parte central se encuentra el código en ensamblador, mientras que en la parte derecha de la ventana se encuentra el código decompilado y en la parte inferior tienes la consola para ejecutar y ver logs.
PoC en vídeo
Para ver mejor el funcionamiento de la herramienta, se ha grabado un vídeo siguiendo los pasos vistos anteriormente.
Hasta aquí llega la pequeña prueba de concepto que hemos hecho a Ghidra. ¿Vosotros qué opináis de la herramienta? Ahora ya puedes empezar a explorarla tú. Y usarla para probar muchas de las técnicas que se explican en el libro de Linux Exploiting donde se ve cómo reversear un binario y explotarlo. Ahora puedes probar con Ghidra. ¡Hasta pronto!
Autor: Josué Encinar García (@JosueEncinar), autor del blog BoomerNiX y Security Researcher en el equipo de Ideas Locas de la unidad CDO de Telefónica.
Figura 1: Ghidra: Primer análisis con la herramienta de Ingeniería Inversa “cortesía” de la National Security Agency |
Antes de probar la herramienta vamos a dejar algunas preguntas con sus respuestas, para las dudas que puedan surgir.
- Qué es Ghidra: Una herramienta desarrollada en Java, y que ha sido usada durante más de 10 años por la NSA para temas de ingeniería inversa.
- Dónde ver el código fuente de Ghidra: Aún no se ha hecho público el código, pero según vemos en su GitHub pasará a ser un proyecto Open Source.
Figura 2: Ghidra, una herramienta de Ingeniería inversa “cortesía” de la NSA |
- Dónde descargar Ghidra: Para descargar la herramienta tendremos que visitar la página web que tiene el proyecto Ghidra en Internet.
- Qué requisitos tiene Ghidra: Todo ello viene recogido en su documento “Ghidra Installation guide”, pero aquí lo dejamos listado:
- Sistema Operativo de 64 bits (Linux, macOS o Windows)
- 4GB Ram y 1GB de almacenamiento
- Java 11 Runtime and Development Kit (JDK)
- Extensibilidad: Sí, es extensible. Podemos crear nuestro código para Ghidra y extender su funcionalidad, en la guía de instalación lo tienes todo. Además, permite la integración con herramientas como IDAPro o Eclipse.
Una vez tengamos todo listo, podemos pasar a la prueba de concepto, y ver la herramienta en funcionamiento. Cualquier persona que se haya dedicado al reversing se sentirá cómodo trabajando con la aplicación, probablemente te resulte familiar a otros entornos como IDA.
Figura 3: Nuevo proyecto en Ghidra |
Aquí no vamos a ver todas las opciones ya que no pretendemos entrar en muchos detalles. Vamos a ver por encima la herramienta, para os podáis hacer una idea de su potencial y comenzar a utilizar.
Para usar Ghidra, lo primero que tenemos que hacer es crear un nuevo proyecto, que puede de ser de dos tipos, compartido - para trabajar con más personas - o no compartido, como se ve en la Figura 3.
Figura 4: Creando un proyecto de prueba con Ghidra |
Cuando demos a Next, tendremos que elegir la ruta donde se creará el proyecto, y el nombre que le queremos dar. Nos saldrá el proyecto activo y ya podremos elegir un binario con el que trabajar, podemos hacer uso de “Drag & Drop”, aquí vamos a usar la calculadora para la prueba, como se ve en la Figura 4.
En Format en el menú de la Figura 4 se puede elegir “Raw” y seleccionar el lenguaje por nosotros mismos. Si le das a Options, podrás marcar o desmarcar diferentes acciones, como por ejemplo seleccionar si quieres que cargue librerías externas (por defecto desmarcada). Cuando le demos al OK, veremos como empieza a importar el archivo tal y como se ve en la Figura 5.
Figura 5: Importando los binarios del proyecto |
Al terminar nos dará un resumen del fichero cargado. En el apartado que pone Additional Information se puede comprobar si se cargan correctamente las librerías o no se encuentran. En este caso es un archivo de sistema operativo Microsoft Windows con librerías en formato DLL (Dynamic-Link Library).
Figura 6: Análisis de los binarios del proyecto |
Una vez revisada la información, damos a OK y veremos nuestro archivo binario cargado. Como en esta ocasión se ha elegido cargar librerías externas, veremos diferentes DLLs. Ahora, como siguiente fase de la prueba, nos vamos a centrar en el archivo “calc.exe” y pasamos a correr sobre él una herramienta llamada CodeBrowser.
Figura 7: Ejecución de herramientas de análisis sobre Calc.exe |
Para lanzar CodeBrowser se puede arrastrar el binario a la "Cabeza de dragón verde", o en el menú Tools > Run Tool > CodeBrowser, y seleccionando el archivo en File > Open. Nos saltará un aviso, donde pone que no se ha analizado aún para saber si queremos hacerlo ahora. En esete caso decimos que sí. Las opciones del analizador las podemos dejar por defecto o modificarlas a nuestro gusto.
Figura 8: Opciones del analizador de código |
El análisis, como es lógico tardará dependiendo de la aplicación a analizar. En la parte izquierda veremos la estructura del programa (Program Trees), navegación por el código (Symbol Tree), donde podremos buscar por palabras y por último el tipo de datos (Data Type Manager).
Figura 9: Resultados del análisis realizado |
En la parte central se encuentra el código en ensamblador, mientras que en la parte derecha de la ventana se encuentra el código decompilado y en la parte inferior tienes la consola para ejecutar y ver logs.
PoC en vídeo
Para ver mejor el funcionamiento de la herramienta, se ha grabado un vídeo siguiendo los pasos vistos anteriormente.
Figura 10: PoC: Primer uso de Ghidra
Hasta aquí llega la pequeña prueba de concepto que hemos hecho a Ghidra. ¿Vosotros qué opináis de la herramienta? Ahora ya puedes empezar a explorarla tú. Y usarla para probar muchas de las técnicas que se explican en el libro de Linux Exploiting donde se ve cómo reversear un binario y explotarlo. Ahora puedes probar con Ghidra. ¡Hasta pronto!
Autor: Josué Encinar García (@JosueEncinar), autor del blog BoomerNiX y Security Researcher en el equipo de Ideas Locas de la unidad CDO de Telefónica.
1 comentario:
Cuánto hype por esto.... Meh
Publicar un comentario