Tobias Scheible Cyber Security & IT-Forensik Dozent
BadUSB USBNinja Kabel mit Bluetooth Fernbedienung

USBNinja – getarnter BadUSB

Das USBNinja-Kabel ist ein Produkt, das die BadUSB-Fähigkeit mit Bluetooth in einem Kabel kombiniert. Die Komponenten werden dabei so geschickt verbaut, dass dem Kabel keine zusätzlichen Funktionen anzusehen oder anzumerken sind. Dabei kann es mit einem Smartphone per Bluetooth gesteuert werden und BadUSB-Angriffe durchführen.

Donnerstag, 17. Oktober 2019
0 Kommentare

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.

USBNinja – getarntes BadUSB-Kabel
USBNinja – unauffälliges BadUSB-Kabel mit Magnet-Ring
Hacking Gadget USBNinja USBNinja – unauffälliges BadUSB-Kabel mit Magnet-Ring
Alternative

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

Treiber

Als Erstes muss der Treiber, dieser ist nur für Windows verfügbar, heruntergeladen, entpackt und installiert werden.

Arduino IDE

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.

Voreinstellungen

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.

Boardverwalter

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.

Einstellungen

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(){
}
Magnet

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.

Über Tobias Scheible

Tobias Scheible

Hallo, mein Name ist Tobias Scheible. Ich bin begeisterter Informatiker und Sicherheitsforscher mit den Schwerpunkten Cyber Security und IT-Forensik. Mein Wissen teile ich gerne anhand von Fachartikeln hier in meinem Blog und in meinem Fachbuch. Als Referent halte ich Vorträge und Workshops für Verbände und Unternehmen u. a. auch offene Veranstaltungen für den VDI und die IHK.

Kommentare

Es wurde noch kein Kommentar abgegeben.

Schreibe einen Kommentar!

Hilfe zum Kommentieren und Hiweise

Um kommentieren zu können, geben sie bitte mindestens ihren Namen und ihre E-Mail-Adresse an. Bitte nutzen Sie die Kommentarfunktion nicht dazu, andere zu beleidigen oder Spam zu verbreiten. Trolle und Spammer sind hier unerwünscht! Unangemessene Kommentare, die zum Beispiel gegen geltendes Recht verstoßen, eine Gefährdung anderer Besucher darstellen oder keinen sinvollen Inhalt beinhalten, werden gelöscht oder angepasst.

Name: Ihr Name, der oberhalb des Kommentars steht, gerne auch Ihren echten Namen, das erleichtert die Kommunikation für alle. Sollte ein Spam-Keyword als Name verwendet werden, kann dieses entfernt oder korrigiert werden.

E-Mail: Ihre E-Mail Adresse dient zur Identifizierung weiterer Kommentare und damit ich direkt Kontakt aufnehmen kann. Die E-Mail Adresse wird natürlich nicht veröffentlicht und nicht weitergegeben.

Website: Hier können Sie ihren eigenen Blog bzw. ihre eigene Website eintragen, dadurch wird Ihr Name und Ihr Avatar-Bild verlinkt. Werden rein kommerzielle Angebote offensichtlich beworben, setze ich den Link auf nofollow und unangemessene werden einfach entfernt.

Erlaubte HTML-Tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <hr> <big> <small> <sub> <sup> <u>

Ihre E-Mailadresse wird nicht veröffentlicht. Mit dem Absenden anerkennen Sie die Datenschutzhinweis des Blogs.