sábado, 29 de abril de 2017

[STEP-BY-STEP] Eternalblue desde Metasploit - Hacking Windows 7



Tras una semana movida entre charlas y diferentes publicaciones sobre el leak de la NSA, hoy sábado nadie se interpuso entre mi cama y yo, así que pude dormir por fin más de 8 horas seguidas jaja. 
El día 18 del presente mes escribí un paper explicando paso a paso cómo aprovechar el exploit Eternalblue para obtener una Shell de Empire/Meterpreter en un Windows 7 o Windows Server 2008. A una velocidad sorprendente el paper fue publicado por exploit-db en las dos versiones que lo redacté (inglés y español) aquí les dejo los links por si no lo han leído:  https://www.exploit-db.com/docs/41897.pdf (español) || https://www.exploit-db.com/docs/41896.pdf (inglés).  

Algunas horas después se me ocurrió contactar a mi compañero de Eleven Paths, Pablo González (@pablogonzalezpe), para charlar sobre una potencial integración de este exploit a Metasploit. Nos pusimos manos a la obra y unas 48hs después el módulo ya era un hecho ;) 

Me tomaré unos minutos para explicar paso a paso como se utiliza y dejar algunas aclaraciones en el camino. 
En principio, vuelvo a mencionar, que lo que hemos hecho es una INTEGRACIÓN, NO UNA PORTACIÓN. ¿Qué significa eso? Que estamos integrando los binarios originales de Eternalblue y Doublepulsar para poder utilizarlos fácilmente desde Metasploit. Hacer una portación completa de los exploits lleva mucho tiempo de reversing sobre estos binarios, ya que aún no sabemos que hacen realmente, cuando eso se conozca, seguramente se hará una portación del 100% en Metasploit. Mientras tanto, podemos aprovechar nuestro módulo para utilizar Eternalblue fácilmente :) 

Requisitos:
Linux con las siguientes herramientas:
  • Metasploit Framework 
  • WINE con soporte para ejecutables de 32bits.


Paso 1: descargar el módulo.

Para ello ejecutamos desde una terminal: “git clone https://github.com/ElevenPaths/Eternalblue-Doublepulsar-Metasploit.git”.

En la carpeta descargada, tendremos el script en Ruby (eternalblue_doublepulsar.rb) que es el módulo para Metasploit. También encontraremos una carpeta llamada “deps” donde están los binarios de Eternalblue y Dublepulsar junto con algunas dependencias y 2 archivos XML que los hicimos nosotros para poder pasarle parámetros “customizados” a los exploits.



Paso 2: Añadir el módulo a Metasploit.

Para añadir el módulo a Metasploit, lo único que debemos hacer es copiar el script en Ruby (eternalblue_doublepusar.rb) a la carpeta del framework donde se encuentran los exploits para SMB de Windows.

Una vez hecho esto, si ejecutamos “msfconsole” veremos que tendremos un nuevo exploit disponible.

Paso 3: seleccionar el módulo y configurar los parámetros.

Al seleccionar el módulo con el comando “use exploits/windows/smb/eternalblue_doublepulsar” y hacer un “show options” veremos que tenemos que configurar los siguientes parámetros:


Los parámetros DOUBLEPULSARPATH y ETERNALBLUEPATH reciben de valor la ruta de la carpeta “deps” que hemos descargado previamente:



Luego, el parámetro PROCESSINJECT recibe el nombre del proceso donde va a ser inyectado en la máquina target el payload que seleccionemos posteriormente (por ejemplo, un meterpreter).

Algo sumamente importante aquí, es que si nuestro target es x64 debemos cambiar el proceso wlms.exe a lsass.exe. Si no hacemos esto, la explotación fallará.

Por el contrario, si es un x86, debemos dejarlo en wlms.exe. Sin embargo, al impactar, es muy posible que el equipo target se quiera reiniciar (eso se produce por cierta inestabilidad en la DLL generada por Metasploit, si fuera una de Empire eso no ocurre). Pero podemos evitar que el target se reinicie si le indicamos a Meterpreter que al recibir la conexión inversa ejecute un script.rc con el siguiente comando:

execute -f cmd.exe -a "cmd.exe /c shutdown -a"
 
Con eso cancelamos el “shutdown” que los sistemas x86 quieren llevar a cabo cuando se les inyecta una DLL generada por Metasploit.
En mi caso voy a impactar un x64 así que no es necesario hacer eso, simplemente reemplazo el proceso wlms.exe por lsass.exe.




 Por supuesto, he cambiado también la arquitectura del target a través del parámetro TARGETARCHITECTURE.

A continuación indicamos el RHOST y RPORT esto es, la IP de la máquina target y el puerto de SMB (default: 445).


El último parámetro a setear en el módulo es el WINEPATH que es justamente, la carpeta donde se encuentra el “drive_c” de WINE:



Finalmente nos queda indicar el payload que vamos a utilizar, este puede ser cualquiera de los que existen disponibles para Windows. En mi caso utilizaré un payload de meterpreter con conexión reversa vía TCP:



Todos los parámetros con su correcta configuración han quedado de la siguiente manera:




Ahora si, ya podemos ejecutar “exploit” y obtener la Shell de meterpreter en el sistema objetivo.




That’s all :-) obtuvimos una sesión de meterpreter en un Windows 7 SP1 tan solo con conocer su dirección IP. Vuelvo a decir, que este es un exploit “de la vieja escuela” que me ha recordado mucho al ms08_067 con el cual obtenemos una Shell remota en Windows XP con la misma facilidad que lo hemos hecho ahora en Windows 7.

Espero que se diviertan y buen finde!.

Author: Sheila A. Berta


domingo, 16 de abril de 2017

[STEP-BY-STEP] EternalBlue & DoublePulsar para obtener shell Empire/Meterpreter


Siendo sincera, tengo tantas cosas que hacer que quería sobrevivir a este leak “mirándolo de costado” viendo qué comentaban mis amigos en base a sus propios test… Claramente no pude. Empezaron a hablar de “EternalBlue EternalBlaBlaBla” y yo pensaba “malditos me van a hacer levantar no sé cuántas máquinas virtuales para probar esto” y así fue.

Como ya todos sabemos, el leak se publicó en este github:  https://github.com/misterch0c/shadowbroker así que el primer paso es descargarlo en un ambiente virtual. 
 
Vamos a hacer uso de Fuzzbunch que es el “Metasploit” de la NSA. El framework esta desarrollado en Python2.6 y utiliza una versión también antigua de PyWin32, la 212.
Entonces, podemos virtualizar un Windows XP e instalar las siguientes herramientas:
Python 2.6: https://www.python.org/download/releases/2.6/. (Agregalo a la variable PATH de Windows).
Todos son instaladores ejecutables así que “siguiente, siguiente, siguiente…”. 

Tras instalar lo necesario, podríamos abrir un cmd.exe y movernos hasta la carpeta donde descargamos el leak, puntualmente donde se encuentra el Fuzzbunch: “fb.py” (dentro de la carpeta shadowbroker-master/Windows) y ejecutar "python fb.py" pero eso no va a funcionar. El script arrojará un error de que no encuentra el directorio “ListeningPost” y esto es porque dentro del leak, dicha carpeta vino vacía y no contamos con ella. Por lo tanto, para evitar ese error, abrimos con el Notepad++ el fb.py y simplemente comentamos la línea 72, donde se intenta cargar el contenido de ListeningPost



Adicionalmente, podemos abrir el archivo Fuzzbunch.xml de la misma carpeta, y reemplazar las rutas de las líneas 19 y 24 por rutas que existan en nuestro sistema, en mi caso los dejé así:


Ahora sí, ejecutamos desde la terminal el comando "python fb.py" y tendríamos que ver a Fuzzbunch ejecutándose correctamente:



Por otro lado, necesitamos al menos una virtual con Windows 7 SP1 para impactar. En mi lab tengo un Windows 7 SP1 x64 con la IP: 192.168.1.109 que será el target y el Windows XP con Fuzzbunch en la IP 192.168.1.108 como atacante.

Cuando iniciamos Fuzzbunch se nos pregunta la IP del target, ahí indicamos la IP del Windows 7. Inmediatamente después se nos pide la IP del callback, que sería el atacante, o sea, la IP del Windows XP.



Presionamos enter para continuar y se nos pedirá indicar un nombre al proyecto, en mi caso como pueden ver en la siguiente imagen, utilicé el que ya tenía creado “eternal1”. Si no tienen ninguno, al presionar enter se les pedirá un nombre y nada más, con ese dato ya se crea la carpeta de logs para ese proyecto y Fuzzbunch quedará con la terminal en “fb>”.



El siguiente paso es seleccionar el exploit que vamos a usar, que es EternalBlue, para ello ejecutamos: use EternalBlue.



A partir de aquí, dejaremos con su configuración por default todos los parámetros que nos pregunte,  EXCEPTO el siguiente:



Ahí el modo lo cambiamos a 1.
Finalmente nos pregunta si queremos ejecutar EternalBlue, le damos “obvio, pero no te me escapes de la VM please”.




Si todo salió bien, veremos al final el mensaje “Eternalblue succeeded”. La velocidad de impacto es excelente.
El siguiente paso es aprovechar esto con DoublePulsar, para inyectar remotamente una DLL maliciosa en el sistema impactado previamente con EternalBlue.
Para crear la DLL nos mudamos para un Linux donde tengamos instalado el framework Empire: https://github.com/EmpireProject/Empire.

Paso 1: Creamos un listener que nos reciba la conexión inversa al inyectarse la DLL

 
  
La dirección de “Host” ahí es la de ese Linux, en mi caso la 192.168.1.105.

Paso 2: Creamos la DLL maliciosa



Ahora tenemos nuestra DLL maliciosa en /tmp/launcher.dll, simplemente debemos copiar esa DLL a la máquina virtual con XP para usarla con Fuzzbunch (máquina atacante).


Volviendo allí, ahora ejecutamos use DoublePulsar en la terminal de Fuzzbunch.



A partir de ahí dejaremos con el valor por defecto todos los parámetros que se nos pregunten hasta llegar a lo siguiente:



Allí vemos de seleccionar correctamente la arquitectura del Windows 7 que vamos a impactar, en mi caso es x64. Luego, lo más importante, indicar que vamos a realizar una inyección DLL; seguido a eso se nos pedirá la ruta local donde se encuentra esa DLL, la cuál, es la que generamos con Empire y ya debemos tenerla copiada en la máquina virtual atacante para usarla ahora con Fuzzbunch. El resto de los parámetros los dejamos con las configuraciones por defecto.

Finalmente se nos pregunta si deseamos ejecutar DoublePulsar...



Y si todo sale bien...


Mientras tanto en la máquina con Linux donde tenemos el listener de Empire, recibimos la conexión inversa:
 

YOU WIN!
Empire nos permite ejecutar en la máquina víctima prácticamente las mismas cosas que el meterpreter de Metasploit. Sin embargo, podemos hacer la migración desde el agente de Empire al listener de Meterpreter muy fácilmente.
 
Paso 1: Seteamos listener de meterpreter


Es importante que utilicemos el payload windows/meterpreter/reverse_httpS.


Paso 2: Utilizamos el módulo “code execution” de Empire para inyectar el meterpreter



Paso 3: Recibimos la Shell inversa de merterpreter :)



Conclusión: obtuvimos una shell de meterpreter sobre un Windows 7 SP1 x64 sin necesidad de interacción del usuario de este equipo, tan solo con conocer su IP. Esto me recordó a la facilidad con la que se obtiene el acceso a un Win XP mediante el ms08_067. El detalle, es que según el timestamp de EternalBlue, la NSA tenía esto desde el 2011.......
 
Eso es todo! Enjoy && EternalFun! ;)
Author: Sheila A. Berta.
Tw: @UnaPibaGeek.
Web: www.semecayounexploit.com