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.
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)
| Scheda | Va 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. |
Come si fa: HID keyboard su ESP32-S2/S3 (Arduino)
USBHIDKeyboard fa presentare la ESP come tastiera; Keyboard.print() "preme" i tasti.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.