Bad Ducky: Un ejercicio de Hardware Hacking para Makers con Arduino, Metasploit y Kali Linux
En el artículo de hoy, vamos a realizar un ejercicio de hardware hacking para los Makers de este blog, en el que utilizaremos un clon de un Arduino Leonardo para automatizar la ejecución de acciones en un teclado (virtual), en un sistema, a través de una conexión USB. Para ello realizaremos un Ducky Script que cargará el microcontrolador desde una memoria.
Tras la ejecución de las instrucciones, el sistema se verá comprometido ya que un atacante, con una distribución con Kali Linux en este caso, obtendrá una shell con privilegios de administrador. Para realizar este ejercicio se ha requerido el uso del siguiente hardware. Prerrequisito: El layout del teclado se ha seleccionado en idioma inglés.
Figura 1: Bad Ducky: Un ejercicio de Hardware Hacking para Makers con Arduino,
Tras la ejecución de las instrucciones, el sistema se verá comprometido ya que un atacante, con una distribución con Kali Linux en este caso, obtendrá una shell con privilegios de administrador. Para realizar este ejercicio se ha requerido el uso del siguiente hardware. Prerrequisito: El layout del teclado se ha seleccionado en idioma inglés.
Figura 2: Hardware necesario
Para ello vamos a utilizar el firmware Bad Ducky. Con Arduino IDE abrimos el archivo bad_ducky.ino descargado del siguiente repositorio bad_ducky. Si quieres sacarle partido al Arduino IDE, la recomendación es que te estudies de principio a fin el libro de Arduino para Hackers & Makers: PocS & Hacks Just for Fun de Alvaro Nuñez-Romero y Alexandra Sánchez.
Figura 3: IDE Arduino – bad_ducky.ino
En este momento se conecta el dispositivo CJMCU en una ranura USB para proceder a su configuración. Para ello se seleccionan las siguientes opciones:
- Herramientas/Placa: Arduino Leonardo
- Herramientas/Puerto: COM3 (Arduino Leonardo)
Figura 4: Configuración de Placa y Puerto con el dispositivo conectado
Después de que se hayan realizado las configuraciones anteriores, vamos a verificar el código del fichero bad_ducky seleccionando el “check” que aparece en el IDE de Arduino en la parte superior izquierda y después seleccionamos la flecha, situada a la derecha de la opción verificar, para subir el código a la placa.
Figura 5: Verificamos y subimos el código a la placa
Una vez se haya subido el código se indicará en el log del IDE el resultado de la subida, después vamos a conectar la tarjeta microSD con el adaptador al ordenador y aplicamos el formato FAT32 a la tarjeta. Ahora, situamos el payload escrito en Ducky Script en un fichero .txt llamado payload.txt en la memoria.
Payload:
El propósito principal de este payload consiste en ofrecer una sesión Meterpreter de Metasploit con privilegios de administrador a un atacante. Y está estructurado en tres partes que vamos a ver una a una para entender mejor cómo planemos tomar control todal de la máquina.
Figura 6: Metasploit para Pentesters Gold Edition de Pablo González en 0xWord |
En la primera se desactiva Windows Defender abriendo el menú de Windows, escribiendo “Defender”, introduciéndose en la aplicación de Windows Defender y deshabilitando la monitorización en tiempo real. Cuando salta la alerta de UAC, se realiza el bypass emulando el comportamiento de un usuario seleccionando la opción “Yes”. Este proceso de desactivación del AV se podría haber realizado a través de una Powershell con el comando:
- Set-MpPreference -DisableRealTimeMonitoring $true
Pero para ello se requeriría modificar la clave del registro del Tamper Protection pero con propósito de que la demostración sea más visual, lo haremos simulando a un usuario que hace clic en YES.
En la segunda parte, abriremos una consola de Powershell con privilegios de administrador de la misma forma que hemos accedido a la aplicación Windows Defender. Para ello, a través del dispositivo, se ejecutarán las instrucciones que pulsan, virtualmente, las teclas CONTROL ESCAPE y que abrirán el menú de Windows. Se introduce “powershell” vía teclado (virtual), se selecciona la opción “Run as an Administrator” y se selecciona la opción “Yes” cuando aparezca el UAC.
Una vez obtenemos la consola comienza la tercera parte en la que se realiza una petición a un servidor del atacante que descargará un payload y lo alojará en C:\rev.exe. Después, se ejecutará dicho payload, y este proceso iniciará una shell inversa con la máquina atacante. La máquina atacante, en este caso es una distribución Kali Linux que ha sido emulada con VirtualBox teniendo como dirección IP: 192.168.1.40
Preparando el ataque:
La conexión entre la máquina víctima y la atacante será realizada por un ejecutable que se descargará y ejecutará el Ducky Script a través de una Powershell. El ejecutable ha sido generado previamente por el atacante con msfvenom:
El payload elegido es una shell de Meterpreter para Windows x86 que realizará una conexión desde la máquina víctima a un handler situado en 192.168.1.40:4444. Para servir el payload se ha levantado un servidor con el módulo de python3 http.server en 192.168.1.40:8000
Después de levantar el servidor se pone a la escucha el handler utilizando Metasploit configurado con el payload generado con msfvenom anteriormente y con los mismos parámetros LHOST y LPORT:
Configuración de la placa:
Una vez tenemos el payload dentro de la memoria, insertamos la memoria en el dispositivo CJMCU y vamos a hacer algo de la parte más Maker. Para configurar la placa debemos regresar al IDE de Arduino y seleccionar Herramientas/Monitor Serial.
En la segunda parte, abriremos una consola de Powershell con privilegios de administrador de la misma forma que hemos accedido a la aplicación Windows Defender. Para ello, a través del dispositivo, se ejecutarán las instrucciones que pulsan, virtualmente, las teclas CONTROL ESCAPE y que abrirán el menú de Windows. Se introduce “powershell” vía teclado (virtual), se selecciona la opción “Run as an Administrator” y se selecciona la opción “Yes” cuando aparezca el UAC.
Figura 7: Ducky Script Payload
Una vez obtenemos la consola comienza la tercera parte en la que se realiza una petición a un servidor del atacante que descargará un payload y lo alojará en C:\rev.exe. Después, se ejecutará dicho payload, y este proceso iniciará una shell inversa con la máquina atacante. La máquina atacante, en este caso es una distribución Kali Linux que ha sido emulada con VirtualBox teniendo como dirección IP: 192.168.1.40
Preparando el ataque:
La conexión entre la máquina víctima y la atacante será realizada por un ejecutable que se descargará y ejecutará el Ducky Script a través de una Powershell. El ejecutable ha sido generado previamente por el atacante con msfvenom:
Figura 8: Generación del payload con msfvenom.
El payload elegido es una shell de Meterpreter para Windows x86 que realizará una conexión desde la máquina víctima a un handler situado en 192.168.1.40:4444. Para servir el payload se ha levantado un servidor con el módulo de python3 http.server en 192.168.1.40:8000
Figura 9: Servidor levantado en el puerto 8000 en la máquina atacante
Después de levantar el servidor se pone a la escucha el handler utilizando Metasploit configurado con el payload generado con msfvenom anteriormente y con los mismos parámetros LHOST y LPORT:
Figura 10: Handler a la escucha en la máquina atacante
Configuración de la placa:
Una vez tenemos el payload dentro de la memoria, insertamos la memoria en el dispositivo CJMCU y vamos a hacer algo de la parte más Maker. Para configurar la placa debemos regresar al IDE de Arduino y seleccionar Herramientas/Monitor Serial.
Figura 11: Libros para Makers en 0xWord que deberías tener:
Una vez se haya abierto el monitor serial se han de seleccionar las siguientes opciones de configuración:
El resultado ha sido el esperado, tal y como se aprecia en la demostración podemos ver como se desactiva el antivirus, se lanza una powershell con privilegios de administrador y se descarga el payload para luego ejecutarlo. Una vez ejecutado obtenemos la sesión en Meterpreter de Metasploit.
¡Un saludo hackers!
- Modo seleccionado: a (Auto-disarm, este modo ejecutará una vez el payload y luego el dispositivo se podrá volver a configurar.)
- Lenguaje: Por defecto
- Payload seleccionado: payload.txt
Figura 12: Configuración del dispositivo CMJCU
Y ahora toca probar enuesto Bad Ducky, así que para verlo funcionando os hemos preparado este pequeño vídeo que explica bien el proceso completo que sigue nuestra PoC para conseguir nuestro objetivo, aquí lo tienes.
Figura 13: Bad Ducky DEMO
El resultado ha sido el esperado, tal y como se aprecia en la demostración podemos ver como se desactiva el antivirus, se lanza una powershell con privilegios de administrador y se descarga el payload para luego ejecutarlo. Una vez ejecutado obtenemos la sesión en Meterpreter de Metasploit.
Figura 14: Resultados después de la postexplotación.
¡Un saludo hackers!
Autor: Luis Eduardo Álvarez, Security Researcher & Software Developer
No hay comentarios:
Publicar un comentario