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

11/7/15

Abusando del Android Debug Bridge (ADB)




El ADB es una herramienta versatil, tipo linea de comandos que nos permite comunicarnos con dispositivos android conectados.
Podemos encontrar la tool adb en el SDK de android en <sdk>/platform-tools/
Esta herramienta permite un acceso sin autenticacion* y sin obstrucciones, ya que corre como root. Como unico obstaculo el dispositivo debe tener el USB Debugging habilitado.
Podemos acceder por via de usb, conectandolo a la pc por el cable, y en la consola:
adb [-d|-e|-s] comando 

-d -e y -s son para conexiones directas a dipositivo, emulador o mediante numero de serie, en la web oficil se explica cada parametro.

Tambien se puede conectar por medio de la red, algunos dispositivos tienen el usb debugging habilitado por default, al igual que el servidor adb habilitado en el puerto 5555, si no, para habilitar el adb por red, debemos conectar el dispositivo mediante usb y en la consola
"adb tcpip 5555"
despues, una vez desconectado el usb, desde la consola
adb connect ip-del-dispositivo:5555

y ya podemos enviar comandos.

Podemos encontrar los comandos en la web oficial de desarrolladores de android:
developer.android.com/tools/help/shell.html
developer.android.com/tools/help/adb.html

Algunas de las acciones mas peligrosas que podemos realizar mediante adb son:
- Instalar aplicaciones .apk.
- Copiar archivos desde y hacia el dispositivo.
- Abrir una shell interactiva.

Para habilitar el USB Debugging en los dipositivos, tenemos que hacerlo desde opciones de desarrollador, si no tenemos la opcion de developer o desarrollador, vamos a Settings > About Phone > Build Number y tocamos 7 veces, de esa forma aparece la opcion.

Los ataques mas conocidos sobre adb son el juicejacking y el drive-by fisico (hice un post antes sobre esta tecnica, p2p-adb kos), el juicejacking consiste en armar una estacion para cargar baterias y, cuando la victima conecta su dispositivo a la estacion de carga, se le sube un malware.

Podemos, abusando del adb, mediante el exploit RageAgainstTheCage rootear nuestro dispositivo que tenga el bootloader bloqueado o locked.

*Aclaracion: algunas versiones mas recientes agregaron autenticacion para ADB.

Android Hacker's Handbook.