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:

  1. Escribir el payload
  2. Compilar el payload en la memoria micro SD
  3. Conectar la micro SD en el USB Rubber Ducky
  4. Conectar el Ducky en la máquina objetivo