Ingeniería inversa al Ransomware WannaCry usando Ghidra

Introducción

Rob Joyce, asesor principal de la Agencia de Seguridad Nacional (NSA), anunció el lanzamiento público del framework de software de ingeniería inversa conocido como GHIDRA en la Conferencia RSA 2019, en San Fransisco. Como muchos otros entusiastas de la ciberseguridad, estamos muy emocionados por tener a disposición Ghidra.

Ghidra ha estado siendo utilizada por la NSA durante más de una década para realizar ingeniería inversa para ayudar a analizar códigos maliciosos y programas maliciosos y puede brindar a los profesionales de la ciberseguridad una mejor comprensión de las posibles vulnerabilidades en sus redes y sistemas. Ghidra se ejecuta en el sistema operativo principal (Windows, MacOS y Linux).

No debe olvidarse que la NSA ha sido víctima de robo y hacking de sus herramientas de seguridad en los últimos años y también esta herramienta se incluyó en la divulgación de documentos de Vault7 realizada por WikiLeaks en 2017.

Esta herramienta está escrita en Java y un buen número de personas ya comenzaron a comparar esto con herramientas comerciales de ingeniería inversa de gama alta como IDA. Puede ser demasiado rápido para juzgar, pero desde su código abierto, debemos esperar y ver qué puede hacer la comunidad de código abierto. Pero honestamente, la extensibilidad de Ghidra es asombrosa. Y fascina mucho la documentación detallada. No te será difícil comenzar con Ghidra

Si estás interesado en contribuir a Ghidra o tal vez te gustaría ver el código fuente, aquí está el enlace a Ghidra en Github:  https://github.com/NationalSecurityAgency/ghidra

Disclaimer

No soy un experto en ingeniería inversa. ¡No he hecho nada avanzado aquí! ¡Sólo quería intentarlo con Ghidra! Por lo tanto, si deseas leer sobre las funciones avanzadas que ofrece Ghidra, o quizás la ingeniería inversa avanzada, ¡lamento que este no sea el artículo que estás buscando! Esto es más o menos como empezar con un artículo.

Ingeniería inversa

Según la revista Wired:

“La ingeniería inversa es un proceso crucial para que los investigadores de inteligencia de amenazas de malware trabajen en profundidad desde el malware que se utiliza para llevar a cabo los ataques: para comprender cómo funciona, cuáles son sus capacidades y quién lo escribió o de dónde provino.

“La ingeniería inversa también es una forma importante para que los defensores verifiquen su propio código en busca de puntos débiles y confirmen que funciona según lo previsto”.

https://www.wired.com/story/nsa-ghidra-open-source-tool/

Instalación

La instalación de Ghidra es bastante breve y muy sencilla. La Guía de instalación de Ghidra tiene todo lo que necesitas para instalar Ghidra en tu máquina.

Una vez que instales Ghidra, ¡así es como se ve!

Es posible que desees descargar e instalar JDK 11 para que Ghidra se ejecute si no está instalado en tu máquina.

Aquí está el enlace de descarga a JDK 11: https://www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-5066655.html

WannaCry

En mayo de 2017, un ransomware se extendió rápidamente por una serie de computadoras, este estaba dirigido a computadoras que ejecutaban el sistema operativo de Microsoft Windows mediante la encriptación de los datos y la exigencia del pago de rescate en forma de Bitcoin.

Si bien el ataque se detuvo pocos días después del descubrimiento del killswitch, se informó que cerca de 200,000 computadoras se vieron afectadas en 150 países y el daño total fue desde millones hasta miles de millones de dólares.

WannaCry, una vez que se instala en tu máquina con Windows, cifra el archivo en el disco duro de la PC, lo que hace que sea casi imposible para los usuarios acceder, y luego exige un pago mediante Bitcoins.

En este artículo, intentaré encontrar el KillSwitch (interruptor de apagado) para el ransomware WannaCry. Te mostraré cómo el perverso killswitch se integró en WannaCry. ¡Empecemos! ?

Instalando el WannaCry ?

¿Espera un momento? ? ¿Voy a instalar WannaCry en mi máquina?

Sí, lo has leído bien ?

¿Se requiere este paso para aplicar ingeniería inversa a WannaCry?

Absolutamente no ?

Recuerda que esto es bajo tu propio riesgo y ten mucho cuidado de no ejecutarlo en ninguna máquina importante. Si realmente deseas instalar y ver cómo funciona, asegúrate de instalarlo en una máquina virtual.

Aquí está el enlace para descargar el WannaCry .

Asegúrate de desactivar Windows Defender antes de instalar WannaCry y descargar una máquina virtual de Windows 10 obsoleta.

Una vez que ejecutes WannaCry.exe, esta es la forma en que serás recibido con la siniestra pantalla WannaCry.

En este momento, no podemos acceder a ninguno de los archivos que tenemos en la máquina.

Carguemos el ejecutable WannaCry en Ghidra y veamos lo que hay dentro ?

Descarga el archivo zip WannaCry desde el enlace anterior y extráelo. Abra Ghidra y crea un nuevo proyecto, asígnale el nombre que desees.

Una vez hecho esto, simplemente arrastra y suelta el ejecutable en esta pantalla.

Cuando hagas clic en “Aceptar”, tu archivo ejecutable se importará y serás bienvenido con más información sobre el archivo ejecutable binario.

Después de esto, has doble clic en WannaCry para abrir en el navegador de código. El navegador de código parece una opción muy conveniente. Empero, a la izquierda, puedes ver la vista de desamblaje y, a la derecha, ver la vista de descompilación.

Inicia con el análisis del ejecutable y es posible que tengas que marcar/habilitar algunas opciones, el ID del parámetro del descompilador y la opción Parámetro externo de propagación de WindowsPE x86 como analizador adicional.

Una vez hecho esto, pulsa analizar e ignorar las advertencias si las hay. Así es como se ve Ghidra después de analizar.

Análisis

Una vez hecho esto, podemos comenzar a profundizar en el binario y buscar la función principal o la función de entrada principal.

No vemos ninguna función principal () o función WinMain (). Pero veo una función con entrada de etiqueta. Veamos qué hay dentro de la función con entrada de etiqueta, que es, por supuesto, la primera función llamada cuando se ejecuta el ejecutable. Este es el código de entrada predeterminado generado para los ejecutables de Windows.

WinMain() es la función de punto de entrada C de cualquier aplicación de Windows. Al igual que la aplicación normal basada en DOS/consola que tiene la función main() como punto de entrada C, en Windows tenemos WinMain() en su lugar. WinMain() es una función que el sistema llama durante la creación de un proceso.

Si nunca has oído hablar de las funciones de WinMain() aquí hay un buen artículo sobre la función de WinMain() y cómo funciona. http://www.equestionanswers.com/vcpp/winmain-application-entry.php.

Si observas con cuidado, al final de este archivo, hay una llamada a otra función (Línea 64).

Si abro lo mismo en Function Call Graph, aquí es cómo se ve la función call from entry.

La función Function Call Graph es realmente genial y conveniente para ver a qué funciones se están llamando desde una función en particular. Revisé todas las funciones y realmente no encontré nada útil, excepto la función FUN_00408140.

Revisando Function Call Graph para FUN_00408140 revela las otras funciones que la están llamando.

Cambié el nombre de la función FUN_00408140 () a something_interesting().

Una vez que abres la función something_interesting(), puedes ver la cadena extraña.

Es esta cadena de la que estoy hablando “s_http://www.iuqerfsodp9ifjaposdfj_004313d0”

Explicación

Desde Function Call Graph se aclara que se está realizando una llamada a dos funciones InternetOpenA() e InternetOpenUrlA() . Veamos que hacen estas dos funciones.

La documentación de Microsoft dice que la función
InternetOpenA() se usa para inicializar el uso de la aplicación de las funciones WinINet.

Y la función InternetOpenUrlA() se utiliza para abrir un recurso especificado por una URL completa de FTP o HTTP. ¡Lo que tiene sentido!

Asegúrate de revisar la documentación de Microsoft para InternetOpenA() e InternetOpenUrlA() .

Vamos a cambiar la firma de la función para ambas funciones.

En este momento, cambiamos la firma de la función para InternetOpenUrlA(),obtenemos el error que dice “No se puede resolver el tipo de datos HINTERNET”, es porque esto devuelve el tipo HINTERNET que no es más que un puntero de vacío.

Aquí hay que crear el nuevo typedef llamado HINTERNET.

Ahora has demostrado que eres bueno para cambiar la firma de la función.

Una vez que cambiamos la firma de la función, así es como se ve el código descompilado.

¡Mirando la línea 23, esto hace que sea obvio que está solicitando la extraña URL que vimos anteriormente! La línea número 24 nos indica que, si la solicitud falla, devuelve el identificador nulo y luego lo cierra y llama a la función FUN_00408090 (). Aquí es donde están sucediendo todas las cosas emocionantes. Permítame cambiarle el nombre a real_things_happens_here ().

Si la solicitud no falla, simplemente cierra el identificador y cierra el programa. (Línea 30-32) ?

Conclusión

Ahora, si te estás preguntando, ¿Cuál es esta URL? este es el infame killswitch o interruptor de apagado. Esto fue descubierto inicialmente por un hacker llamado Marcus Hutchins alias MalwareTech. Trabajó para revertir el devastador WannaCry y descubrió que el ransomware comprueba la URL anterior.

Una vez que registró el dominio por sí mismo, resultó que WannaCry fue cerrado. Ocurrió que el dominio no estaba registrado e inactivo. Una vez que el ransomware verificó la URL y encontró que estaba activo, el ransomware se dejó de funcionar.

¡Así es como básicamente funcionó!

Después de jugar con Ghidra por un par de días, lo encontré muy útil y tiene muchos potenciales.

El código ya se ha publicado y la comunidad de código abierto ya ha comenzado a corregir los errores y problemas. Veamos qué puede ofrecer la comunidad de código abierto para que finalmente comencemos a comparar con herramientas comerciales como IDA Pro.

Llegaremos hasta aquí por el momento y trataremos de meternos en aspectos más avanzados de WannaCry en la próxima.

¡Gracias por leer, espero que hayas aprendido algo nuevo!