19/6/16

Arduino UNO - HID Attack

Cada tanto volvemos, este es un proyecto que me da vueltas en la cabeza siempre, mucho se hablo de los ataques BadUSB, y del aprovechamiento de la desproteccion ante dispositivos HID, (human interface device), como un teclado o un mouse. Al contrario de un usb que es analizado al conectarlo y existen protecciones contra el autorun, un dispositivo hid se conecta y hace lo suyo sin dificultad alguna.

Existen dispositivos comerciales como el Rubber-Ducky, especialmente diseñados para explotar esta vulnerabilidad, el RB esta muy bien desarrollado, con una comunidad atras que constantemente realiza aportes, y posee un sinfin de posibilidades. Tambien estan las placas Teensy, que tambien se ha utilizado ampliamente, ya en la blackhat, y ahora recientemente Samy, con su UsbDriveby.

La idea, con el arduino uno, es reducir el costo, ya que estas placas cuestan entre $150 y $200 pesos, pero ademas se les puede agregar otros modulos de hardware que quedan en la imaginacion de cada uno, pantallas, botones, sensores, bluetooth etc. aunque nos encontramos con ciertos obstaculos, el mio en este momento es, el poder usar un modulo SD, para poder transferir un archivo desde el arduino a la PC y poder ejecutarlo (por el momento no pude, y no encontre informacion).

Vamos a necesitar:

- Arduino UNO R3
- OS (Se recomienda linux)
- dfu-programmer packet
- Arduino-keyboard-0.3.hex (USB keyboard firmware)
- Arduino-usbserial-uno.hex (firmware original, lo guardamos como .hex)

Lo primero que tenemos que hacer es bootear nuestro arduino en modo DFU, para asi poder instalar el nuevo firmware, lo que hacemos es conectarlo, y hacer un puente con un jumper entre los dos pines que se muestran en la imagen, o en el link de youtube.




https://www.youtube.com/watch?v=E8XyRwXQr8Q

Ahora, suponiendo que tenemos instalado el dfu-programmer, lo que tenemos que hacer es borrar el firmware de nuestro arduino e instalar el original.

sudo dfu-programmer atmega16u2 erase --force
sudo dfu-programmer atmega16u2 flash 'Arduino-usbserial-uno.hex'
sudo dfu-programmer atmega16u2 reset


Ahora desde el Arduino IDE podemos subir nuestro codigo. y despues flashear el firmware Arduino UNO Keyboard, recordemos que nuestro arduino va a emular un teclado.

sudo dfu-programmer atmega16u2 erase --force
sudo dfu-programmer atmega16u2 flash 'Arduino-keyboard-0.3.hex.hex'
sudo dfu-programmer atmega16u2 reset


Cada vez que querramos hacer una modificacion al codigo, vamos a tener que hacer todos los pasos de 0.

Aca dejo el codigo de quien desarollo todo esto, https://github.com/spksoft/Backdoor-Downloader-with-Arduino-UNO/blob/master/code.ino no lo prueben directamente asi porque se van a infectar con quien sabe que. Abranlo modifiquenlo, experimenten, lo que hacen en particular estas lineas, es descargar un archivo, backdoor, y ejecutarlo.

Como dije mas arriba, aca el limite es nuestra imaginacion, en windows nos vamos a ver limitados por el cmd, o powershell dependiendo la version, queda en nuestro ingenio lo que podamos hacer, desde descargar un archivo, agregar un administrador, eliminar archivos, etc etc etc.

Material Consultado:
https://github.com/spksoft/Backdoor-Downloader-with-Arduino-UNO/
http://mitchtech.net/arduino-usb-hid-keyboard/
http://magikh0e.ihtb.org/pubHardwareHacking/
https://samy.pl/usbdriveby/
https://www.soldierx.com/bbs/201503/Weaponized-Arduino-USB-HID-Attack-targeting-Kali-Linux
https://github.com/hak5darren/USB-Rubber-Ducky/wiki/Payload---powershell-wget---execute
http://iivanmendozaa.blogspot.com.ar/2015/05/arduino-uno-como-dispositivo-hid.html