Hace ya tiempo, en Mr.Robot apareció un pequeño aparatito conocido como Rubber Ducky, del cual ya se ha hablado en este blog (Rubber Ducky). Con este aparatito, se pensó el la ejecución de comandos a través de teclado.
Esto es posible debido a que bueno, como podréis encontrar en la web, se trata de un procesador de 32 bits y 60 MHz que es capaz de funcionar como un HID (Human Interface Device) más en concreto como un teclado, y a través de un sencillo lenguaje de scripting y un encoder a binario nos permite escribir a través del USB como si se tratara de un simple teclado. Y luego blah,blah,blah...
Esto está muy bien, pero ¿qué problema hay?, y ¿por qué todo este rollo Fare9?....
Preguntas muy acertadas, como sabéis Fare9 os quiere mucho y siempre piensa en vosotros, este cacharrito vendido por Hak5 cuesta la friolera de 45$, más gastos de envío (si no vives en USA), más aduanas (si no vives en EEUU).
Entonces no quiero que haya que dejarse el bolsillo en esto, y tras una charla en una Hack and Beers vi unos arduinos leonardo de un tamaño muy reducido:
Véis como los USBs de toda la vida, chiquitito y transportable... EMMMM NO, esa no era la imagen (estúpido Fare9...), aquí lo tenéis:
Aha, esto ya parece otra cosa, y bueno aquí tenéis el mio:
Esto, lo podéis comprar en el Aliexpress pues por unos 9€ con gastos de envío incluídos: BadUSB
Recibe el nombre de Badusb, pero como podéis ver su nombre científico es: BadUsb Escarabajo Mala Junta de Desarrollo ATMEGA32U4 USB teclado virtual Para Arduino (traducción directa del chino mandarín)
Estos cacharros tienen igual un procesador ATMEGA el cual les permite funcionar como un teclado, gracias a una librería de arduíno conocida como Keyboard (como vemos no se rompieron mucho la cabeza).
Además tenéis un IDE muy bonito, se puede descargar desde la página oficial de arduíno: https://www.arduino.cc/en/main/software
Bien, ahora vamos a explicar qué haremos así de juaquin de ese que hacen los juankers.
Haremos que al insertar el usb, se habrá una CMD con permisos de administrador (¿¿¿quién usa en windows una cuenta que no tenga la posibilidad de esos permisos???), seguidamente, ejecutaremos una serie de comandos de Powershell, que permitirán la descarga de un código y su ejecución directa.
El código a descargar será el siguiente: https://raw.githubusercontent.com/clymb3r/PowerShell/master/Invoke-Mimikatz/Invoke-Mimikatz.ps1 . Este código pertenece al framework de pentesting y post explotación Powersploit, y se encarga de inyectar directamente en la memoria de un proceso de ejecución, un programita conocido como Mimikatz, este programa es capaz de obtener directamente desde la RAM las credenciales del usuario, por tanto, es un punto muy fuerte para aquellos que se dedicen al tema del pentesting.
Tras obtener esos datos, se enviarán a un servidor que vamos a montar con python y una librería conocida como Flask.
De momento vamos arrancando el IDE de arduino y veamos que es cada cosilla:
################ ACTUALIZACIÓN
He subido al github una librería Keyboard modificada https://github.com/Fare9/MR_Robot_mimikatz/tree/master/Keyboard
Esta librería nos vale para tener layouts de teclado de diferentes países, tenéis que descargar la carpeta Keyboard y reemplazar dentro de Arduino/libraries la actual librería Keyboard (siempre hacer backup por si acaso). Tras hacer esto, reiniciar el Arduino IDE.
Se ha modificado también el código de MR_ROBOT (https://github.com/Fare9/MR_Robot_mimikatz/blob/master/MR_ROBOT/MR_ROBOT.ino) pero no son grandes cambios, simplemente se ha añadido la utilidad para usar otro layout de teclado.
##################################
1. Lo primero que vamos a ver es el código principal y luego iremos desmenuzando linea por linea y método por método:
En arduino, siempre tenemos dos métodos principales setup y loop , dentro del primero será donde daremos valor a las variables, o estableceremos los pines de arduíno (en este caso no es necesario esta parte), y lo que haremos aquí será inicializar la librería Keyboard para poder utilizarla.El segundo método es el que se ejecuta continuamente en un arduino normal, en este caso utilizamos una variable para evitar que sea un bucle, lo primero que realiza la función loop es una espera de 2000, en arduino indicas esperas en milisegundos, por ejemplo, para esperar que se produzcan ciertos eventos, o que algunos eventos no se modifiquen durante un cierto tiempo. En este caso esperamos a que el ordenador reconozca el usb como un teclado. Después comprobamos si el código ya se ha ejecutado, y si no, pues ejecutamos una serie de funciones: openCMDAsAdmin, whatsNewMimikatz y limpia. Finalmente establecemos ejecutado a 1 para que no se vuelva a ejecutar.
Vamos a ir viendo estas funciones:
2. openCMDAsAdmin(), esta función se encarga de abrir la CMD de windows como administrador, además se encarga de ofuscarla para evitar que sea reconocible los comandos:
Vamos a ver poquito a poquito qué dice aquí cada cosa, bien la primera línea, se encarga de apretar la tecla conocida como TECLA WINDOWS, y dejarla presionada, tras esto, pulsa la tecla 'R', y finalmente las libera las dos, esto abrirá una cajita como esta:
tras esto, se realiza una espera de medio segundo para dejar aparecer la caja, después utilizamos una función propia llamada "printa", la cual se encarga de modificar el layout del teclado a EN en lugar de ES, ya que la librería de Keyboard utiliza un layout de teclado Americano, luego escribe lo que le hemos pasado como variable, y reestablece el layout:
Tras apretar esto, nos pedirá la confirmación de abrir la consola como administrador:
Como vemos, no podemos coger el ratón y darle a "Si", sino que usaremos el atajo de teclado ALT+S, que es lo que mostramos en la línea 7 y 8 de la función. Tras obtener una shell como administrador, ofuscamos utilizando la siguiente función:
Esto dejará una SHELL como esta:
Como vemos esta shell es más complicado ver que se está escribiendo, pero como a la shell le da igual, pues continuamos.
3. whatsNewMimikatz(): esta función es la encargada de la descarga que antes hablamos, la ejecución y el envío de datos a un server:
Esto de powershell, nos realiza la descarga y ejecución del Invoke-Mimikatz.ps1, tras esto se realiza la subida a un servidor el cual luego veremos el código. Como véis donde pone URL_SERVER, tenéis que poner la URL de vuestro servidor, no seais cazurros...
4. limpia(), esta función es la encargada de limpiar un poco el rastro que hemos dejado en la máquina, lo que haremos será borrar el rastro de que hemos realizado la ejecución de cualquier programa:
Hasta aquí todo el código de Arduino, en imágenes (muajajajaja), pero tranquilos, como sé que también os mola el copy-paste más que el cesped a las vacas, en mi github tenéis el código completo: https://github.com/Fare9/MR_Robot_mimikatz/blob/master/MR_ROBOT/MR_ROBOT.ino
Ahora veremos el servidor que vamos a montar, este nos cabe entero en la fotito:
Esto que podéis ver es un server completo, que responde a peticiones POST y GET en la ruta / (root) del servidor, en verdad la petición GET no vale para nada, pero así veis un poquito más, este servidor se encarga de procesar las peticiones que enviaría el powershell, para finalmente guardar lo enviado en un archivo. (Código también en github)
La ejecución es sencilla, simplemente:
Vamos a poner en el script, la ip de la máquina kali, en mi caso la 10.0.2.10. Compilamos y metemos en el pincho, recordar una cosa en el arduino IDE:
En Herramientas, establecer placa: "Arduino Leonardo" y en puerto aquel donde esté el arduino.
Vamos a ejecutar y ver que pasa en la máquina kali:
Como vemos, hemos obtenido ciertos datos por el método POST, y estos corresponden a los datos del PC y finalmente a la contraseña en claro y sus hashes, mimikatz ha conseguido obtener las contraseñas en claro y ejecutarse en pocos segundos sin mayor interacción que enchufar un pendrive en un PC.
Hasta aquí este rápido post en referencia a MR.Robot, desde una perspectiva bastante de mileurista, ya sabéis que cualquier duda me podéis escribir a mi twitter: Fare9
Antes de finalizar, recordaros que nuestro compañero del blog Óscar aka Elvis, subió hace poco una máquina de CTF basada en juego de tronos, yo estoy ahora con ella actualmente y la verdad que resulta bastante entretenida, aquí el enlace: https://github.com/OscarAkaElvis/game-of-thrones-hacking-ctf
A jugar, jugar y divertirse!!!!!!
Idea original del post: https://www.hak5.org/blog/15-second-password-hack-mr-robot-style
Código arduino y Python autor: Fare9