Der Rubber Ducky von Hak5 verwendet einen Microcontroller, der als virtuelle Tastatur fungieren kann. Somit kann alles mit ihm gemacht werden, was auch mit einer Tastatur gemacht werden kann. Allerdings deutlich schneller, als ein Mensch tippen kann, es lassen sich mehr als 1000 Wörtern pro Minute realisieren. Er wurde ursprünglich als Tool zur Automatisierung von Administrationsaufgaben entwickelt. Mittlerweile wird er aber häufig für Social Engineering Tests eingesetzt.
Der BadUSB-Stick besitzt ein unauffälliges Gehäuse, welches zum Beispiel den USB-Sticks entspricht, die typischerweise auf Messen verteilt werden. Im Inneren verfügt er über eine 60 MHz 32-Bit AT32UC3B1256 CPU mit einem 256K Speicher, eine High Speed USB 2.0-Schnittstelle, Micro SD-Kartenleser, Mikrotaster, eine mehrfarbige LED und einen Standard USB Typ A-Anschluss.
Aufbau des Sticks
Um den Stick zu konfigurieren, muss er geöffnet werden. Dazu muss als Erstes der Metallbügel entfernt werden. Dieser wird einfach etwas nach außen gebogen und kann dann abgezogen werden. Anschließend muss das schwarze Gehäuse geöffnet werden. Dazu kann in die Öffnung gegenüber der USB-Schnittstelle ein spitzer Gegenstand eingebracht werden und so die beiden Hälften des Gehäuses auseinander hebeln. Durch das Öffnen des Gehäuses wird das auf der Platine angebrachte Lesegerät für eine Micro SD-Speicherkarte sichtbar. Um das BadUSB-Gerät zu programmieren, muss dieses entnommen werden. Auf der einen Seite ist die CPU sichtbar und auf der anderen Seite die LED, der Taster und das Lesegerät.
Mit der LED wird der Status des Rubber Ducky angezeigt, sie ist nur bei geöffnetem Gehäuse sichtbar. Die LED blinkt grün, wenn der Stick aktiv ist und ein Angriff durchgeführt wird, also Tastatureingaben vorgenommen werden. Die LED leuchtet dauerhaft rot, wenn ein Fehler vorliegt. Zum Beispiel, wenn die Micro SD-Karte nicht gelesen werden kann oder die Angriffsdatei falsch kodiert wurde oder sich nicht am richtigen Speicherplatz befindet.
Der Taster ist ebenfalls nur bei geöffnetem Gehäuse zugänglich und wird nur für die Entwicklung benötigt. Er wird verwendet, um entweder den Angriff erneut auszuführen oder um den Bootloader zu starten, um die Firmware des Ruber Ducky zu aktualisieren.
Der Micro SD-Speicherkartenleser unterstützt FAT-formatierte Karten bis zu 2 GB. Auf der Karte befindet sich die Datei mit dem vorbereiteten Angriff. Dies hat den Vorteil, dass der Stick selbst nicht programmiert werden muss, sondern die Arbeit bequem am Rechner erfolgt.
Funktionsweise
Die Scriptsprache, mit der sich die Tastenbefehle ausführen lassen, heißt Ducky Script. Durch die einfache Schreibweise ist die Einstiegshürde sehr niedrig und innerhalb von kürzester Zeit können die ersten Ergebnisse erzielt werden. Ducky Scripts können in jedem Texteditor wie z.B. Notepad unter Windows, Textedit auf Mac, Vim unter Linux geschrieben werden. Ducky Script-Dateien müssen dem Standard-ASCII Zeichensatz entsprechen und dürfen keine Unicodezeichen enthalten. Das Script wird anschließend umgewandelt und auf einer Micro-SD Karte im .bin Format gespeichert.
Die einfachste Methode ist die Verwendung eines Online-Tools für die Generierung der .bin-Datei. Das Duck Toolkit hat sich als das schnellste und robusteste Tool etabliert. Damit kann die Umwandlung unkompliziert erfolgen und eine Umkehrfunktion ist ebenfalls vorhanden. Zusätzlich gibt es einen Generator mit vorgefertigten Befehlsfolgen.
Programmierung
Die Programmierung des Rubber Ducky bzw. das Schreiben des Ducky Scripts ist sehr einfach. Es hat sich zu einem inoffiziellen Standard entwickelt, sodass auch viele andere Hardware-Tools mit Ducky Script umgehen können. Oder es gibt zumindest einen Konverter, um Ducky Scripts für die Zielplattform zu übersetzen. Alle möglichen Tastatureingaben können im offiziellen Wiki nachgelesen werden.
Die Entwicklung eines erfolgreichen Payloads ist ein Prozess mit kontinuierlichem Recherchieren, Schreiben, Kodieren, Testen und Optimieren. Es beginnt damit, dass die Tastenkürzel für viele Operationen nicht bekannt sind, da die Bedienung eines Rechners typischerweise mit der Maus stattfindet. Daher müssen diese recherchiert werden und häufig gibt es viele Wege, um ein Ziel zu erreichen. Hierbei gilt es, den effektivsten Weg zu finden, um mit wenig Befehlen schnell ans Ziel zu kommen.
Das nachfolgende Ducky Script Beispiel zeigt eine einfache Anwendung. In der ersten Zeile befindet sich mit dem Befehl REM ein Kommentar. Darunter erfolgt mit der Anweisung DELAY und dem Wert 1000 eine Pause von 1000 Millisekunden. Die dritte Zeile enthält den Befehl STRING, womit der nachfolgende Text „Hello World“ ausgegeben wird.
REM Dies ist ein Kommentar und wird nicht ausgeführt DELAY 1000 STRING Hello World
Der Beispiel-Paylout kann zum Beispiel im Notepad geschrieben werden. Anschließend wird die Seite Duck Toolkit aufgerufen und der „Payload Encoder“ ausgewählt. Der Code kann per Copy & Paste in das Eingabefeld kopiert werden. Mit einem Klick auf den Button „Encode Payload“ wird die Datei Inject.bin generiert und zum Download angeboten. Sie kann nun auf die Hauptebene der Micro SD-Karte kopiert werden. Die Speicherkarte kann nun in den Ruber Ducky gesteckt werden. Jetzt müssen Sie noch einen Texteditor öffnen, um die Ausgabe zu sehen und können dann den Rubber Ducky an einen Rechner anschließen. Nach einer kurzen Initialisierung werden die Tastaturbefehle an den Rechner geschickt und ausgeführt. Im Texteditor erscheint „Hello World“.
Beispiele
Spannend wird es, wenn mit dem Ruber Ducky Programme gestartet werden und darin weitere Befehle ausgeführt werden.
Taschenrechner öffnen
Zum Einstieg öffnen wir den Taschenrechner unter Windows. Die Pausen werden benötigt, da zum einen das Betriebssystem Zeit benötigt, das Gerät zu initialisieren, und zum anderen die Dialoge Zeit zum Öffnen benötigen. Erfolgt zu schnell die nächste Eingabe, geht diese verloren. Mit dem Befehl „GUI r“ wird der Ausführen-Dialog gestartet. Darin wird „calc“ geschrieben und mit der Enter-Taste bestätigt.
DELAY 1000 GUI r DELAY 250 STRING calc ENTER
Website aufrufen
Eine Website lässt sich sehr einfach aufrufen. Dazu wird einfach der Ausführen-Dialog gestartet, die URL eingetragen und mit Enter bestätigt. Windows öffnet daraufhin die URL mit dem Standard-Webbrowser.
DELAY 1000 GUI r DELAY 250 STRING https://scheible.it ENTER
Im Editor schreiben
Das nachfolgende Beispiel zeigt das Öffnen des Ausführen-Dialogs und den Start von Notepad. Mit dem Befehl „GUI r“ wird der Ausführen-Dialog gestartet. Darin wird „notepad“ geschrieben und mit der Enter-Taste bestätigt. Anschließend wird der Text „Rubber Ducky“ im Editor geschrieben.
DELAY 1000 GUI r DELAY 250 STRING notepad ENTER DELAY 250 STRING Rubber Ducky
Fertige Ducky Scripts
Fertige Ducky Scripts können einfach über die offizielle Github Seite von Hak5 heruntergeladen werden. Weitere Beispiele für den Rubber Ducky gibt es auf der Ducktoolkit Website.
Rubber Ducky Clone
Mittlerweile gibt es einige Boards, die die Funktionalität des Rubber Ducky imitieren. Dabei handelt es sich um Boards ohne Gehäuse, die den Prozessor ATMEGA32U4 verwenden und ein Micro SD-Kartenlesegerät besitzen. Der Chip kann mit der Arduino IDE programmiert werden. Es stehen fertige Scripte zur Verfügung, die die Funktionalität realisieren, auf der Micro SD-Karte ein kompiliertes Ducky Script auszuführen. Dadurch muss wie beim Rubber Ducky nur noch der Inhalt auf der SD-Karte angepasst werden.
Es existieren mehrere Varianten der Boards und auf GitHub gibt es verschiedene Projekte wie Bad Ducky, Ducky Clone, und Duckduino-microSD. Hier muss darauf geachtet werden, dass die Hardware und Software zusammenpasst.
Fazit Rubber Ducky
Der Rubber Ducky ist wohl die erfolgreichste BadUSB-Hardware am Markt. Er kostet zwar etwas mehr als die anderen Geräte, allerdings erhält man dafür ein robustes und unkompliziertes Device. Mit der Nutzung Ducky Scripts und der Micro SD-Karte können BadUSB-Angriffe schnell und ohne Programmierkenntnisse realisiert werden. Durch die Online-Konverter ist nicht einmal die Installation einer Software erforderlich. Dadurch sind der Entwicklung von Angriffsszenarien keine Grenzen gesetzt und mit dem unauffälligen USB-Gehäuse eignet er sich auch für praxisnahe Penetrationstests.
Schutzmöglichkeiten gegen BadUSB-Angriffe habe ich im zentralen Artikel der Artikelserie im Abschnitt „Gegenmaßnahmen“ beschreiben.
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
- DSTIKE WIFI Duck – Keystroke Injection
- 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)