
Semplice strumento di iniezione di tasti per Windows e Linux che esfiltra i dati WiFi memorizzati (SSID e password).

Hai mai visto un film in cui un hacker inserisce un’apparentemente comune chiavetta USB in un computer e ruba istantaneamente i dati? Oggi costruirai un dispositivo che fa esattamente questo.
⚠️ Disclaimer:
Tutti i contenuti in questo progetto sono destinati esclusivamente a scopi di ricerca sulla sicurezza.
Nell'estate del 2022, mi sono prefisso di costruire un dispositivo in grado di estrarre dati da un computer target. Ma come si fa esattamente a distribuire malware ed esfiltrare informazioni? Nelle sezioni seguenti, esaminerò i passaggi essenziali, i concetti sottostanti e le sfumature tecniche coinvolte nella creazione di uno strumento personalizzato di injection dei tasti. Sebbene questo progetto prenda di mira specificamente le credenziali WiFi, il payload può essere facilmente modificato per scopi più avanzati o maliziosi: gli unici veri limiti sono la tua creatività e competenza tecnica.
Nel tempo, il progetto è cresciuto fino a includere un'ampia varietà di script e strumenti. È stato creato originariamente per dimostrare le capacità di un Rubber Ducky, in particolare una versione economica che utilizza il Raspberry Pi Pico (RPi Pico). Attualmente, i due componenti principali del progetto sono:
Accesso fisico al computer della vittima sbloccato.
Il computer deve avere accesso a Internet per inviare i dati rubati tramite SMTP per l'esfiltrazione su un mezzo di rete.
Conoscenza della password del computer della vittima per l'exploit Linux.
Dopo aver creato un pico-ducky, devi solo copiare il payload modificato (adattato ai tuoi dettagli SMTP per l'exploit Windows e/o adattato alla password Linux e al nome dell'unità USB) sul RPi Pico.
[!NOTE]
È possibile costruire questo strumento usando il Rubber Ducky, ma tieni presente che RPi Pico costa circa $4.00 e il Rubber Ducky costa $80.00.
Tuttavia, mentre pico-ducky è una buona soluzione economica, Rubber Ducky offre funzionalità come la furtività e l'uso dell'ultima versione di DuckyScript.
Per utilizzare Ducky Script per scrivere il payload sul tuo RPi Pico, devi prima convertirlo in un pico-ducky. Segui questi semplici passaggi per creare un pico-ducky.
Uno strumento di injection dei tasti, una volta collegato a un computer host, esegue comandi malevoli simulando la digitazione di tasti da parte di un utente. Sebbene assomigli a una chiavetta USB, si comporta come una tastiera che digita un payload preprogrammato. Strumenti come Rubber Ducky possono digitare oltre 1.000 parole al minuto. Una volta creato, chiunque abbia accesso fisico può distribuire questo payload con facilità.
Il payload utilizza il comando STRING per elaborare i tasti di injection. Accetta uno o più caratteri alfanumerici/di punteggiatura e digiterà il resto della linea esattamente com'è sulla macchina target. ENTER/SPACE simulerà la pressione dei tasti della tastiera.
Usiamo il comando DELAY per mettere temporaneamente in pausa l'esecuzione del payload. Ciò è utile quando un payload deve attendere un elemento, come una riga di comando, per caricarsi. Il ritardo è utile all'inizio, quando un nuovo dispositivo USB viene collegato a un computer target. Inizialmente, il computer deve completare una serie di azioni prima di poter iniziare ad accettare comandi di input. Nel caso dei HID, il tempo di configurazione è molto breve. Nella maggior parte dei casi, richiede una frazione di secondo perché i driver sono integrati. Tuttavia, in alcuni casi, un PC più lento potrebbe impiegare più tempo per riconoscere il pico-ducky. Il consiglio generale è di regolare il tempo di ritardo in base al tuo target.
L'esfiltrazione dei dati è il trasferimento non autorizzato di dati da un computer/dispositivo. Una volta raccolti i dati, un avversario può impacchettarli per evitare il rilevamento durante l'invio dei dati sulla rete utilizzando crittografia o compressione. I due modi più comuni di esfiltrazione sono:
Questo approccio è stato utilizzato per l'exploit Windows. L'intero payload può essere visto qui.
Questo approccio è stato utilizzato per l'exploit Linux. L'intero payload può essere visto qui.
Per utilizzare il payload Windows (payload1.dd), non è necessario collegare alcun cavetto jumper tra i pin.
Una volta che le password sono state esportate nel file .txt, il payload invierà i dati all'email designata utilizzando Yahoo SMTP. Per istruzioni più dettagliate, visita il seguente link. Inoltre, il modello di payload deve essere aggiornato con le tue informazioni SMTP, il che significa che devi aggiornare RECEIVER_EMAIL, SENDER_EMAIL e la tua PASSWORD email. Inoltre, potresti anche aggiornare il corpo e l'oggetto dell'email.
[!NOTE]
Dopo aver inviato i dati tramite email, il file
.txtviene eliminato.Puoi anche utilizzare un SMTP di un altro provider email, ma dovresti fare attenzione al server SMTP e ai numeri di porta che scriverai nel payload.
Tieni presente che alcune reti potrebbero bloccare l'utilizzo di un SMTP sconosciuto al firewall.
Per utilizzare il payload Linux (payload2.dd) devi collegare un cavetto jumper tra GND e GPIO5 per rispettare il codice in code.py sul tuo RPi Pico. Per maggiori informazioni su come configurare più payload sul tuo RPi Pico, visita questo link.
Fig. 1: Exploit su Linux
Una volta che le password sono state esportate dal computer, i dati verranno salvati sulla chiavetta USB designata. Affinché questo payload funzioni correttamente, deve essere aggiornato con il nome corretto della tua unità USB, il che significa che dovrai sostituire USBSTICK con il nome della tua unità USB in due punti.
Inoltre, dovrai anche aggiornare la PASSWORD Linux nel payload in tre punti. Come detto sopra, affinché questo exploit abbia successo, dovrai conoscere la password del computer Linux della vittima, il che rende questo attacco meno plausibile.
Per eseguire lo script wifi_passwords_print.sh dovrai aggiornare lo script con il nome corretto della tua chiavetta USB, dopodiché puoi digitare il seguente comando nel tuo terminale:
echo PASSWORD | sudo -S sh wifi_passwords_print.sh USBSTICK
dove PASSWORD è la password del tuo account e USBSTICK è il nome del tuo dispositivo USB.
NetworkManager si basa sul concetto di profili di connessione e utilizza plugin per leggere/scrivere dati. Utilizza un formato di file .ini-style chiamato keyfile e memorizza i profili di configurazione di rete. Il keyfile è un plugin che supporta tutti i tipi di connessione e le capacità di NetworkManager. I file si trovano in /etc/NetworkManager/system-connections/. Basandosi sul formato keyfile, il payload utilizza il comando grep con regex per estrarre i dati di interesse. Per il filtraggio dei file, è stata utilizzata un'asserzione lookbehind positiva modificata ((?<=keyword)). Mentre l'asserzione lookbehind positiva corrisponderà a una certa posizione nella stringa, sc. in una posizione subito dopo la parola chiave senza rendere quel testo stesso parte della corrispondenza, la regex (?<=keyword).* corrisponderà a qualsiasi testo dopo la parola chiave. Ciò consente al payload di abbinare i valori dopo le parole chiave SSID e psk (chiave pre-condivisa).
Per maggiori informazioni su NetworkManager ecco alcuni link utili:
Di seguito è riportato un esempio dei dati esfiltrati e formattati dalla macchina della vittima in un file .txt.
Uno dei vantaggi di Rubber Ducky rispetto a RPi Pico è che non viene visualizzato come dispositivo di archiviazione di massa USB una volta collegato. Una volta collegato al computer, la macchina lo vede solo come tastiera USB. Questo non è un comportamento predefinito per il RPi Pico. Se vuoi impedire al tuo RPi Pico di apparire come dispositivo di archiviazione di massa USB quando collegato, devi collegare un cavetto jumper tra il pin 18 (GND) e il pin 20 (GPIO15). Per maggiori dettagli visita questo link.
💡 Suggerimento:
- Carica il payload sul RPi Pico prima di collegare i pin.
- Non saldare i pin perché probabilmente vorrai cambiare/aggiornare il payload a un certo punto.
Quando crei un file payload funzionante, puoi utilizzare lo script writer.py, oppure puoi modificare manualmente il file modello. Per eseguire correttamente lo script, dovrai passare, oltre al nome del file script, un nome per il sistema operativo (windows o linux) e il nome del file payload (ad es. payload1.dd). Di seguito puoi trovare un esempio di come eseguire lo script writer quando crei un payload Windows.
python3 writer.py windows payload1.dd
Con alcune piccole modifiche, gli script precedentemente utilizzati possono anche essere adattati per funzionare sul Bash Bunny. Il Bash Bunny funziona emulando un dispositivo USB attendibile [1]. Per questo progetto, lo configureremo per emulare un dispositivo di archiviazione flash utilizzando il seguente comando [1, 2]:
ATTACKMODE HID STORAGE
Utilizzando il comando DuckyScript ATTACKMODE, possiamo definire quale tipo di dispositivo il Bash Bunny dovrebbe emulare [1]. Ogni modalità di attacco si registra nel sistema con un ID fornitore USB (VID) e un ID prodotto (PID) unici [1]. È anche possibile combinare più modalità di attacco concatenandole.
Fig. 2: Bash Bunny Mark I collegato a un PC
Il Bash Bunny supporta i comandi originali di DuckyScript, motivo per cui sono stato in grado di riutilizzare lo script della sezione Rubber Ducky. Per utilizzare questi comandi inline, dobbiamo prefissarli con il comando QUACK [1]. Ad esempio, invece di scrivere WINDOWS r, scriviamo Q WINDOWS r.
Per caricare i payload sul Bash Bunny, il dispositivo deve essere impostato in arming mode (posizione dell'interruttore 3—quella più vicina alla presa USB) [1]. Una volta connesso, copia payload.txt e exfil.txt in payloads\switch1. I payload devono essere denominati payload.txt [1,2], mentre eventuali file di supporto referenziati dal payload possono essere nominati liberamente.
Per riferimento, la struttura della directory di archiviazione di massa del Bash Bunny è la seguente [2]:
BashBunny/
├── loot/
│ └── (i dati esfiltrati dai payload verranno salvati qui)
└── payloads/
├── library/
│ └── (script o moduli riutilizzabili)
├── switch1/
│ ├── payload.txt
│ └── (file opzionali, ad es., exfil.txt, script, ecc.)
└── switch2/
├── payload.txt
└── (file opzionali)
Fig. 3: Struttura della directory di archiviazione di massa del Bash Bunny
Una volta che lo script ha finito di eseguire, i risultati verranno salvati in loot\wifi_pass.txt. Se il computer target non ha password WiFi salvate, il file sarà vuoto.
[!NOTE]
Poiché l'attacco Bash Bunny si basa su uno script PowerShell (
exfil.txt), può essere utilizzato solo su sistemi Windows. Per utilizzare un approccio simile su Linux, dovrai modificare il payload e sostituire lo script PowerShell con lo script Bash a cui si fa riferimento nella sezione Linux precedente.
Questo pico-ducky funziona attualmente solo su sistema operativo Windows.
Questo attacco richiede l'accesso fisico a un dispositivo sbloccato per essere implementato con successo.
L'exploit Linux ha molte meno probabilità di successo, perché per riuscirci non solo hai bisogno di accesso fisico a un dispositivo sbloccato, ma devi anche conoscere la password dell'amministratore per la macchina Linux.
Il firewall della macchina o il firewall di rete potrebbero impedire l'invio dei dati rubati tramite il mezzo di rete.
I ritardi del payload potrebbero essere inadeguati a causa delle diverse velocità dei computer utilizzati per implementare un attacco.
Il dispositivo pico-ducky non è molto furtivo, anzi è piuttosto il contrario, è piuttosto ingombrante specialmente se saldi i pin.
Inoltre, il dispositivo pico-ducky è notevolmente più lento rispetto al Rubber Ducky che esegue lo stesso script.
Se il Caps Lock è attivo, parte del codice del payload non verrà eseguita e l'exploit fallirà.
Se il computer ha una lingua non inglese impostata, questo exploit non avrà successo.
Attualmente, pico-ducky non supporta DuckyScript 3.0, è possibile utilizzare solo DuckyScript 1.0. Se hai bisogno della versione 3.0 dovrai utilizzare il Rubber Ducky. Per questo exploit la versione 3.0 non è necessaria!