
USBNinja – getarnter BadUSB
Es ist bekannt, dass USB-Sticks potentiell gefährlich sein können – jetzt gilt dies aber auch für USB-Kabel. Der RFID Research Group, dem Hersteller des USBNinja-Kabels, ist es gelungen, die Bauteile soweit zu verkleinern, dass sie in einen normalen Stecker eines USB-Kabels passen, ohne dass von außen ein Unterschied zu erkennen ist. Selbst Spezialisten können dieses Kabel nicht von einen normalen USB-Kabel unterscheiden.
Gestartet bzw. finanziert wurde das USBNinja-Kabel 2018 über die Plattform Crowd Suply. Die komplette Elektronik wurde auf einer kleinen Platine im USB-Stecker untergebracht. Neben dem eigentlichen Chip für den BadUSB-Angriff ist noch ein weiteres Modul für die Bluetooth-Verbindung integriert. Damit lässt sich der Angriff entweder mit einer Fernbedienung oder per Smartphone App starten. Die Fernbedienung kann mit dem Kabel erworben werden und hat zwei Knöpfe. Mit der App können vorab definierte Eingaben gestartet werden oder individuelle weitere Tastatureingaben geschrieben werden. Drei Varianten sind für die gängigsten Schnittstellen als 1m-Kabel verfügbar: USB C, Micro USB und Lightning. Die Stromübertragung und die Datenkommunikation funktionieren dabei wie bei einem normalen Kabel.


Eine Alternative zu USBNinja ist das O.MG Cable. Es wurde von Mike Grover entwickelt und auf der Sicherheitskonferenz Defcon vorgestellt. Das präparierte Kabel ist allerdings nur mit einem Lightning-Stecker verfügbar, dafür wird WiFi anstatt Bluetooth verwendet, was die Reichweite für die Steuerung erhöht. Das O.MG Cable kann zum Beispiel bei Hak5 bestellt werden.
Einrichtung
Die Programmierung des USBNinja-Kabels erfolgt über die Arduino IDE.
Installation
Als Erstes muss der Treiber, dieser ist nur für Windows verfügbar, heruntergeladen, entpackt und installiert werden.
Für die Programmierung des USBNinja wird die Arduino IDE verwendet. Laden Sie die Software für Ihr Betriebssystem herunter. Wenn Windows verwendet wird, kann die erste Variante „Windows Installer, for Windows XP and up“ gewählt werden. Klicken Sie auf der nächsten Seite auf den Link „JUST DOWNLOAD“, der sich unten links neben dem Button befindet, um den Download zu starten. Nachdem der Download abgeschlossen ist, installieren Sie die Arduino IDE entsprechend der Anleitung.
Starten Sie nun die Arduino IDE. Um den USBNinja zu programmieren, muss das Board noch hinzugefügt werden. Gehen Sie dazu im Menü auf „Datei“ und wählen den Punkt „Voreinstellungen“ aus. Im unteren Bereich des Dialogs gibt es den Punkt „Zusätzliche Boardverwalter-URLs:“ mit einem Eingabefeld. In dieses Eingabefeld muss der folgende Eintrag hinzugefügt werden:
http://usbninja.com/arduino/package_USBNinja_index.json
Ist hier schon ein Eintrag vorhanden, kann auf das Icon ganz rechts geklickt werden und die URL in das Eingabefenster eingetragen werden. Jede URL muss in einer extra Zeile stehen. Danach kann das Fenster „Voreinstellungen“ mit einem Klick auf den Button „OK“ rechts unten geschlossen werden.
Jetzt muss das Softwarepaket für das USBNinja-Kabel hinzugefügt werden. Klicken Sie dafür auf den Menüpunkt „Werkzeuge“ und gehen auf den Menüpunkt „Board …“ und wählen dort im Untermenü den obersten Punkt „Boardverwalter…“ aus. Geben Sie in das nun erscheinende Fenster oben in das Suchfeld „USB Ninja“ ein. Als Ergebnis erscheint der Eintrag „USB Ninja“. Klicken Sie auf den Button „Installieren“ um das Board hinzuzufügen. Nach der Installation können Sie das Fenster schließen.
Nun ist das Board im Menü verfügbar. Um es auszuwählen, selektieren Sie im Menü wieder den Punkt „Werkzeuge“ und gehen Sie auf den Unterpunkt „Board: …“. Dort ist jetzt die neue Rubrik „USB Ninja boards“ vorhanden. Wählen Sie den Eintrag „USB Ninja cable(BLE+Hall sensor)“ aus. Nun kann das USBNinja-Kabel programmiert werden.
Programmierung
Die Programmierung des USBNinja-Kabels erfolgt ähnlich wie beim DigiSpark oder dem Teensy. Hier wird allerdings als Erstes die Sprachdefinition „#define LAYOUT_GERMAN“ deklariert und eine eigene Header-Datei verwendet, die „NinjaKeyboard.h“. Der Aufruf „USBninjaOnline()“ sorgt dafür, dass das Modul aktiviert wird, gleichzeitig wird die Datenverbindung über das Kabel deaktiviert. Mit „NinjaKeyboard.begin()“ erfolgt die Initialisierung als USB-Tastatur. Am Ende werden diese beiden Aufrufe wieder zurückgesetzt. Die beiden Funktionen „payloadA()“ und „payloadB()“ müssen immer vorhanden sein, sie entsprechen den Buttons auf der Fernbedienung.
#define LAYOUT_GERMAN #include <NinjaKeyboard.h> void setup(){ NinjaKeyboard.delay(3000); USBninjaOnline(); NinjaKeyboard.begin(); NinjaKeyboard.println("Hallo Welt"); NinjaKeyboard.end(); USBninjaOffline(); } void loop(){ } void payloadA(){ } void payloadB(){ }
Nachdem das Programm in der Arduino IDE geschrieben wurde, kann der Upload erfolgen. Der Programmiermodus wird nicht automatisch aktiviert, sondern über einen Reed-Kontakt und einem Magnet. Daher muss der mitgelieferte Magnet an das hintere Ende des Steckers, dort wo das Kabel anfängt, gehalten werden und danach darf erst die Verbindung mit dem Rechner erfolgen. Daraufhin erscheint die Meldung, dass der Upload ausgeführt wird.
USBNinja Beispiele
Start per Magnet
Der Magnet kann nicht nur für die Aktivierung des Programmiermodus verwendet werden, sondern auch für die spätere Aktivierung bzw. Start des BadUSB-Angriffs. Damit kann das Kabel angeschlossen werden, ohne dass das Skript gleich ausgeführt wird, stattdessen wird es erst nachdem der Magnet an den Stecker gehalten wird gestartet. Das technische Bauteil dafür wird als Hall-Sensor(https://de.wikipedia.org/wiki/Hall-Sensor) bezeichnet. Um den Sensor auszulesen wird der Code in die „loop()“ verlagert und seien Rückgabe kontinuierlich überprüft. Ist der Magnet nicht in der Nähe ist der Wert der Variable des Pins des Sensor auf „TRUE“, ist er in der Nähe ändert sich der Wert auf „LOW“.
#define LAYOUT_GERMAN #include <NinjaKeyboard.h> void setup(){ } void loop(){ if(digitalRead(USBDIRECTPIN) == LOW) NinjaKeyboard.delay(3000); USBninjaOnline(); NinjaKeyboard.begin(); NinjaKeyboard.println("Hallo Welt"); NinjaKeyboard.end(); USBninjaOffline(); } } void payloadA(){ } void payloadB(){ }
Fernbedienung
Um den Payload mit der Fernbedienung zu starten, werden die zwei Funktionen „payloadA()“ und „payloadB()“ verwendet. Im „setup()“ Bereich wird der Wert „SetRunOnce(PAYLOADA,true)“ gesetzt, damit die Befehle nach dem Drücken des Knopfes nur einmal ausgeführt werden. Als Standard werden sie in einer Endlosschleife ausgeführt. Der Code für den Button „a“ wird in die Funktion „payloadA()„ und für den Button „b“ in die Funktion „payloadA()“ geschrieben. Wird das USBNinja-Kabel an einen Rechner angeschlossen, wird kein Code ausgeführt. Erst mit dem Betätigen der Buttons auf der Furnierung wird die Ausführung initialisiert.
#define LAYOUT_GERMAN #include <NinjaKeyboard.h> void setup(){ SetRunOnce(PAYLOADA,true); } void loop(){ } void payloadA(){ NinjaKeyboard.delay(3000); USBninjaOnline(); NinjaKeyboard.begin(); NinjaKeyboard.println("Hallo Welt"); NinjaKeyboard.end(); USBninjaOffline(); } void payloadB(){ }
Weitere Beispiele
Weitere Beispielprogramme für das USBNinja-Kabel können einfach direkt über die Arduino IDE unter „Datei > Beispiele“ aufgerufen werden. Die Beispiele sind sehr gut kommentiert und es gibt weitere Tipps für weitere Payloads auf Github im Projekt USBNinjaPayloads.
Fazit USBNinja
Das USB-Ninja-Kabel ist durch die Monetarisierung der Hardware ein faszinierendes Produkt. Es hebt die BadUSB-Angriffsart auf ein neues Level, da selbst mit viel Erfahrung solch ein Kabel nicht als Gefahr erkennbar ist. Die Verwendung des Magnets ist ein interessanter Ansatz, um den Start zu beschleunigen. Die Steuerung per Fernbedienung ist zwar interessant, aber durch die Beschränkung auf zwei Optionen ist die App hier deutlich überlegen.
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
- 21.05.2025 (Vortrag) VDI-Vortrag Hacking-Hardware, VDI Zollern-Baar, Albstadt (weitere Infos)
- 24.06.2025 (Vortrag) Vortrag am Innovationscampus Sigmaringen, WFS-Wirtschaftsförderung, Sigmaringen (weitere Infos)
- 24.06.2025 (Workshop) Hacking- und Pentest-Hardware Workshop, Scheible UG, Mannheim (weitere Infos)
- 26.06.2025 (Workshop) Hacking- und Pentest-Hardware Workshop, Scheible UG, Zürich (weitere Infos)
- 10.07.2025 (Workshop) Hacking- und Pentest-Hardware Workshop, Scheible UG, Stuttgart (weitere Infos)
- 08.10.2025 (Workshop) Hacking- und Pentest-Hardware Workshop, Scheible UG, Balingen (weitere Infos)