USB Rubber Ducky 101
Creo que al igual que muchos, desde el capítulo 6 de la segunda temporada de Mr. Robot (eps2.4_m4ster-s1ave.aes), se me quedó grabado el nombre de un hardware muy particular… USB Rubber Ducky.
USB Rubber Ducky (o USB Patito de Goma), es un hardware creado por Hak5, el cual, simula ser un pendrive normal, pero en realidad es una herramienta que inyecta pulsaciones de teclas (es un teclado camuflado).
Al momento de conectar este USB, es reconocido con un driver Atmel, haciéndose pasar por un teclado normal (para no levantar sospechas y evitar que sea bloqueado por antivirus o firewall) y ejecuta las teclas indicadas en su código.
W0lf-F4ng:~ W0lf_F4ng$ system_profiler SPUSBDataType USB: USB 3.0 Bus: Host Controller Driver: AppleUSBXHCIWPT PCI Device ID: 0x9cb1 PCI Revision ID: 0x0003 PCI Vendor ID: 0x8086 HID Keyboard: Product ID: 0x2401 Vendor ID: 0x03eb (Atmel Corporation) Version: 2.01 Speed: Up to 12 Mb/sec Manufacturer: ATMEL AVR Location ID: 0x14100000 / 28 Current Available (mA): 500 Current Required (mA): 100 Extra Operating Current (mA): 0
Las especificaciones técnicas del Rubber Ducky son:
- Ranura para micro SD
- Botón que permite re-ejecutar el código
- LED que indica el estado del dispositivo
- Conector USB tipo A
- Procesador de 60 MHz de 32 bits
Además, incorpora lo siguiente:
- Lector USB de memorias micro SD
- Case USB
- Adaptador a micro USB
Imagen que muestra las especificaciones del hardware:
Imagen que muestra los componentes que vienen con el Rubber:
Ahora que sabemos qué tipo de hardware posee y los componentes que incorpora el Rubber Ducky cuando lo compramos, es necesario saber cómo funciona.
El Rubber Ducky trabaja con un lenguaje de programación llamado Ducky Script, en el cual, cada comando es una instrucción de teclas a presionar.
La sintaxis de este lenguaje es el siguiente:
Sintaxis | Descripción |
---|---|
REM | Comentarios, código que no será procesado |
DEFAULT_DELAY / DEFAULTDELAY | Se debe definir un valor entre 0 y 10000 (milisegundos), el cual establecerá un delay a todas las secuencias de comandos |
DELAY | Define un valor entre 0 y 10000 (milisegundos), el cual establecerá un delay entre secuencias de comandos |
STRING | Permite inyectar cadenas de caracteres: a-z A-Z 0-9 !-) `~+=_-“‘;:<,>.?[{]}/|!@#$%^&*() |
WINDOWS / GUI | Equivale a la tecla windows o la tecla cmd en macos |
APP / MENU | Equivale a la combinación de teclas SHIFT F10 de windows (clic derecho) |
SHIFT | Simula la tecla SHIFT, y esta se puede combinar con: DELETE, HOME, INSERT, PAGEUP, PAGEDOWN, WINDOWS, GUI, UPARROW, DOWNARROW, LEFTARROW, RIGHTARROW, TAB |
ALT | Simula la tecla ALT, y esta se puede combinar con: END, ESC, ESCAPE, F1-F12, caracteres simples (ejemplo: f, s), SPACE, TAB |
CONTROL / CTRL | Simula la tecla CTRL, y esta se puede combinar con: BREAK, PAUSE, F1-F12, ESCAPE, ESC, caracteres simples |
DOWNARROW / DOWN | Simulan las teclas de dirección |
LEFTARROW / LEFT | Simulan las teclas de dirección |
RIGHTARROW / RIGHT | Simulan las teclas de dirección |
UPARROW / UP | Simulan las teclas de dirección |
BREAK / PAUSE | Equivale a la combinación CTRL BREAK |
CAPSLOCK | Es la tecla que permite escribir en mayúsculas o minúsculas |
DELETE | Simula la tecla suprimir |
END | Tecla que permite ir al final de algo (página web, documento, etc.) |
ESC / ESCAPE | Tecla de escape |
HOME | En español equivale a la tecla inicio |
INSERT | Simula la tecla insertar |
NUMLOCK | Tecla para bloquear o desbloquear los numerales en los teclados |
PAGEUP | Simula la tecla Page Up |
PAGEDOWN | Simula la tecla Page Down |
PRINTSCREEN | Tecla para tomar screenshots |
SCROLLLOCK | Simula la tecla Scroll Lock |
SPACE | Tecla espacio |
TAB | Tecla de tabulación |
REPEAT | Repite la cantidad de veces que le indiquemos lo ya ejecutado |
Como Rubber Ducky es un teclado, es necesario saber el sistema operativo de la víctima, lenguaje configurado en el teclado de dicho PC/Móvil, y las teclas que posee, porque puede que tengamos problemas si lo queremos conectar en un PC con un teclado que no posea una las teclas que queremos usar, o si queremos buscar algo haciendo una combinación de teclas y luego usar un string, y lo buscamos en inglés, pero el sistema operativo esta en español, por lo tanto, es necesario saber esos detalles si queremos jugar con el Ducky en alguna computadora.
Sabiendo como es el lenguaje, y lo que necesitamos tener en cuenta al momento de crear un script (payload), es necesario saber cómo complicar el código, para que se pueda ejecutar.
Para compilar el código, existe un encoder llamado Duckencoder, al momento de compilar, se debe especificar el nombre del archivo como inject.bin.
Para usar el compilador, se usa el siguiente comando:
java -jar duckencoder.jar -i <archivo_origen> -o /<ruta>/inject.bin
W0lf-F4ng:Rubber Ducky W0lf_F4ng$ java -jar duckencoder.jar -i payload.txt -o /Volumes/WF-RBDUCKY/inject.bin Hak5 Duck Encoder 2.6.3 Loading File ..... [ OK ] Loading Keyboard File ..... [ OK ] Loading Language File ..... [ OK ] Loading DuckyScript ..... [ OK ] DuckyScript Complete..... [ OK ] W0lf-F4ng:Rubber Ducky W0lf_F4ng$ ls /Volumes/WF-RBDUCKY/ System Volume Information inject.bin
A continuación, dejo un ejemplo de un payload, el cual abrirá un editor de texto, y escribirá hola mundo:
REM en este payload se abrira sublime y se escribira Hola Mundo!!! DELAY 1000 GUI SPACE DELAY 50 STRING sublime ENTER DELAY 300 STRING Hola Mundo!!!
Una vez cargado el payload en el Ducky, al momento de conectarlo en la máquina víctima, este se ejecuta:
Por lo tanto, podemos decir que USB Rubber Ducky es una herramienta muy útil para jugar y hacer maldades, no es complicado de hacer un payload, debido que el lenguaje de programación es muy sencillo.
Para finalizar, les dejo el flujo a seguir al momento de querer utilizar el Rubber:
- Escribir el payload
- Compilar el payload en la memoria micro SD
- Conectar la micro SD en el USB Rubber Ducky
- Conectar el Ducky en la máquina objetivo