Qualcosa di simile e' BadUSB anche se in questo caso si prende una chiavetta di memoria USB che agisce come tastiera ma mantiene anche le sue caratteristiche di espansione di memoria.
Esempio di script automatico in esecuzione su Ubuntu Keyboard US Layout |
E' possibile fare qualcosa di simile anche con una Arduino Leonardo dato che anche questa scheda ha una funzionalita' di tastiera. Io ho acquistato un mini clone di Arduino Leonardo
La scheda originale viene programmata mediante un suo linguaggio di scripting ed a questo link sono disponibili vari payload (sia innocui che offensivi)
Per convertire i payload da Rubber Ducky a Arduino Leonardo si puo' usare il comodo servizio online https://nurrl.github.io/Duckuino/.
Attenzione : gli script sono sia funzione del sistema operativo che del layout della tastiera
Dal sito viene scaricato un file .zip con lo script .ino e Keyboard.h e Keyboard.cpp...non si tratta della libreria Keyboard di Arduino...nel file Keyboard.cpp si trova la configurazione del layout di tastiera desiderato (per esempio US od IT)
Per compilare lo sketch su Linux ho dovuto modificare il file Keyboard.h eliminando la riga
#include "HID.h"
inoltre il comando dell'esempio Hello World
Keyboard.press("r");
deve essere modificato in (il carattere e' incluso in apici singoli, la stringa in apici doppi)
Keyboard.press('r');
Un po' di note
1) Una volta caricato il payload questo viene mandato subito in esecuzione. In caso di payload malevolo puo' compromettere anche la macchina di sviluppo.Per questo motivo e' fortemente consigliato di inserire un delay nell'avvio del payload in modo da dare il tempo di disinserire la chiavetta.
2) Su Linux e Mac funziona tutto magnificamente ed in modo trasparente. Se si connette la schedina ad un computer Windows e si tenta di usare un payload malevole la cosa sara' molto meno trasparente perche' Windows si accorge che oltre all'interfaccia HID trova anche due dispositivi Arduino e tenta di scaricare i driver da Internet. Per evitare questa cosa ci sarebbe da pasticciare sui files boards.txt and USBDescriptor.h di Arduino IDE ma al momento non ho tempo di provarci