Академический Документы
Профессиональный Документы
Культура Документы
shey.x7@gmail.com || sheila.berta@11paths.com
Con el objetivo de entender su funcionamiento y mejorarlos, los exploits de la NSA que se hicieron
públicos, han pasado por la lupa de muchos investigadores. Gracias a ello, hace pocos días se publicó un
exploit que aprovecha el bug de ETERNALROMANCE/SYNERGY, con mejoras en el método de explotación,
para hacerlo más estable al momento de atacar sistemas con Windows Server 2012 y 2016. Pero lo cierto
es que, al fiel estilo de su autor (Sleepya), si se quiere utilizar dicho exploit es necesario ingeniárselas un
poco, entender cómo funciona y modificar algunas pequeñas cosas para lograr que, al momento de
impactar un objetivo, ocurra lo que nosotros deseemos.
Es por eso que tras haberlo analizado, aquí estoy escribiendo un nuevo “how to” :). En este paso a paso
se explica todo lo necesario para hacer funcionar el exploit de Sleepya correctamente y cómo modificar
su comportamiento con el fin de obtener una sesión de meterpreter sobre el equipo objetivo.
Entorno de laboratorio
Para montar el entorno de laboratorio, es necesario configurar los siguientes equipos:
Una máquina con Windows Server 2016 de 64bits será utilizada como target.
Luego de la instalación del sistema, no es necesario realizar cambios en el mismo, simplemente conocer
su dirección IP y asegurarse de que esté encendido al realizar el ataque.
Es posible utilizar cualquier sistema como máquina atacante, siempre y cuando se puedan ejecutar
correctamente las siguientes herramientas:
Como podemos observar, está escrito en Python, por lo tanto lo guardamos con extensión .py en la
máquina atacante. Una vez hecho esto, si lo ejecutamos nos encontraremos con el siguiente error:
Resolver dependencias
En línea número tres del exploit se importa el módulo “mysmb”, el cual no es propio de Python ni podemos
instalarlo usando pip. Este módulo fue desarrollado por Sleepya y tendremos que descargarlo desde su
github en el siguiente link: https://github.com/worawit/MS17-010/blob/master/mysmb.py.
Lo guardamos con el nombre de “mysmb.py” en la misma carpeta donde hemos descargado el exploit.
Recordemos que en Python, para que un script pueda importar el código de un módulo, es necesario crear
un archivo llamado “__INIT__.py” donde se encuentren los mismos.
Al hacer esto, el script del exploit encontrará el módulo necesario y no mostrará más errores.
Aunque esta simple comprobación no requiere que modifiquemos nada del exploit en sí, debemos definir
igualmente algunos datos y parámetros que veremos a continuación.
Datos de autenticación
El bug que explota ETERNALROMANCE/SYNERGY requiere que el ataque sea autenticado. Bien podría ser
a través de una cuenta Guest si está habilitada, sino, tendremos que obtener el usuario y contraseña de
alguna cuenta en el equipo objetivo. Es importante destacar que no importan los privilegios de la cuenta,
aun si fuera “Guest”, los privilegios que obtendremos al impactar serán de SYSTEM.
Para definir esta información, debemos abrir el exploit.py con cualquier editor de texto y dirigirnos a las
líneas 26 y 27:
Parámetros
El exploit necesita que definamos dos parámetros: la IP del objetivo y el pipe name. El protocolo SMB
define que un recurso compartido puede ser de tres tipos diferentes:
Personalmente suelo utilizar “spoolss”, otra opción es “browser”. También es posible utilizar el escáner
de metasploit: auxiliary/scanner/smb/pipe_auditor y ver cuáles se encuentran accesibles en el sistema
objetivo.
Tal como se mencionó antes, si la explotación fue exitosa veremos que se ha creado un archivo llamado
“pwned.txt” en la unidad “C:\” del equipo atacado.
Haber logrado la explotación con éxito es un gran paso. A continuación, veremos cómo sacar mayor
provecho, modificando este último comportamiento en el exploit con el objetivo de ejecutar una shell
de meterpreter.
El primer paso es generar la shellcode que usaremos, para hacerlo utilizaré una forma que personalmente
me gusta mucho y tiene numerosas ventajas a la hora de evadir controles de seguridad.
En resumen, la shellcode estará en un archivo .SCT que el exploit se encargará de descargar y ejecutar en
la máquina objetivo, devolviéndonos como resultado la tan ansiada sesión de meterpreter.
Para generar el payload que necesitamos, ejecutaremos la herramienta con los siguientes parámetros:
El archivo .sct que estamos generando, tendremos que almacenarlo en un web server en la máquina
atacante o en cualquier otro equipo que pueda ser accedido sin problemas por la máquina objetivo. Es
por ello que, al ejecutar el comando anterior, la herramienta nos pregunta cuál será la URL completa
donde alojaremos el archivo .sct. Si vamos a usar la propia máquina atacante, simplemente ingresamos:
http://<IP_ATACANTE>.
Tras realizar la ejecución de los comandos que vemos en la imagen superior, tendremos la shellcode
lista para ser usada.
Allí vemos las funciones que el exploit utiliza para crear el archivo “pwned.txt” en la máquina atacada,
pero más interesante aún, es la línea por debajo de ellas, donde se encuentra comentada la función
service_exec().
Si observamos, aquella función ejecuta el comando “copy” como ejemplo, creando una copia de
“pwned.txt”. Esto no se ejecutará a menos que quitemos el numeral (#) que precede a la función. Si lo
hacemos y volvemos a ejecutar el exploit, notaremos que en la unidad “C:\” tendremos dos archivos de
texto: pwned.txt y pwned_exec.txt.
Es claro que podemos modificar el comando copy por cualquier otro que ejecute lo que nosotros
deseemos.
Ejecutar la shellcode
Ahora que conocemos donde modificar el exploit para cambiar su comportamiento final, editaremos la
línea que invoca a la función service_exec() para que ejecute el comando que se encargará de descargar y
ejecutar la shell de meterpreter:
Volvemos a ejecutar el exploit guardando las modificaciones que hemos realizado en el paso anterior.
Agradecimientos:
--
Sheila A. Berta - @UnaPibaGeek.