Home › Capire a fondo › BadUSB su ESP

BadUSB su ESP (come funziona e come farlo)

Un dispositivo che finge di essere una tastiera e digita comandi in un lampo. Qui: perché funziona, quale ESP serve, e uno sketch di esempio innocuo per provarlo sul tuo PC.

Provalo solo sul tuo computer. Usarlo sul PC di altri = accesso abusivo, reato. L'esempio qui sotto scrive solo un messaggio, non fa danni.

Perché funziona

Il computer si fida ciecamente delle tastiere. Quando colleghi una tastiera USB, Windows non chiede permessi: assume che chi digita sei tu. Un BadUSB sfrutta esattamente questo: non è una chiavetta di dati, si presenta al PC come una tastiera (dispositivo "HID" = Human Interface Device) e "digita" da solo una sequenza di tasti a velocità disumana — apre un terminale e lancia comandi in 2 secondi.

È diverso da un virus su file: non c'è nessun file da scansionare, l'antivirus vede solo "una tastiera che scrive". Per questo è potente.

Quale ESP serve (importante)

SchedaVa bene per BadUSB?
ESP32-S2 / ESP32-S3 Sì: hanno l'USB nativo, possono fingersi tastiera direttamente.
ESP32 classico / ESP8266 Da soli no (niente USB device). Si usano nel progetto WiFi Duck abbinati o solo per il controllo WiFi.
Digispark (ATtiny85) Il "BadUSB per principianti", ma non è un ESP.
Per il tuo caso: prendi una ESP32-S2 o ESP32-S3. Il vantaggio dell'ESP è che puoi comandarla via WiFi (progetto WiFi Duck di Spacehuhn).

Come si fa: HID keyboard su ESP32-S2/S3 (Arduino)

Cosa serve
Arduino IDE + supporto ESP32 (Boards Manager). Nella scheda, imposta USB Mode = "USB-OTG (TinyUSB)"
Come funziona
La libreria USBHIDKeyboard fa presentare la ESP come tastiera; Keyboard.print() "preme" i tasti.
Perché funziona
Il PC riconosce un HID keyboard standard e accetta l'input come se lo digitassi tu.

Sketch di esempio innocuo (apre il Blocco note e scrive un messaggio — nessun danno):

// BadUSB demo INNOCUO per ESP32-S2/S3 — solo sul TUO PC
#include "USB.h"
#include "USBHIDKeyboard.h"
USBHIDKeyboard Keyboard;

void setup() {
  Keyboard.begin();
  USB.begin();
  delay(2000);                       // aspetta che il PC riconosca la "tastiera"

  // apre Esegui (tasto Win + R)
  Keyboard.press(KEY_LEFT_GUI);
  Keyboard.press('r');
  Keyboard.releaseAll();
  delay(500);

  Keyboard.println("notepad");       // apre il Blocco note
  delay(1000);
  Keyboard.println("Ciao! Questo e' un test BadUSB innocuo.");
}

void loop() {}                        // esegue una volta sola

Compili, carichi sulla ESP, la stacchi e la ricolleghi: dopo 2 secondi "digita" da sola. Questo è tutto il meccanismo — la differenza tra un test e un attacco è cosa gli fai scrivere.

DuckyScript e WiFi Duck

Nel mondo BadUSB i "payload" si scrivono in un linguaggio semplice chiamato DuckyScript:

DELAY 2000
GUI r              # Win+R
STRING notepad
ENTER
STRING Ciao dal mio BadUSB
ENTER

Il progetto WiFi Duck (Spacehuhn, open source) porta questo su ESP: carichi lo script e lo lanci/modifichi da un pannello WiFi dal telefono. Ottimo per imparare, tutto documentato sul suo GitHub.

Come ci si difende dal BadUSB

  • Blocca la porta: policy che impediscono nuovi dispositivi HID (USBGuard su Linux, controlli device su Windows).
  • Blocco schermo: un PC bloccato non accetta comandi.
  • Non collegare chiavette/dispositivi trovati o di dubbia provenienza (è il classico "USB drop").
  • Software che chiede conferma quando appare una nuova tastiera.
Tecniche fisiche/HID correlate: Arsenale · Social / Fisico (Rubber Ducky, Bash Bunny). Progetti hardware IoT: Testare casa (IoT).