Tobias Scheible Cyber Security & IT-Forensik Dozent
Teensy USB-Entwicklerboard mit BadUSB

Teensy – BadUSB mit Arduino

Der Teensy ist ein sehr beliebtes Mikrocontroller-Entwicklungsboard, da es zur Arduino IDE kompatibel ist, sehr robust aufgebaut ist und viele Schnittstellen bietet. Da der USB Controller die Emulation einer Tastatur unterstützt, werden die Teensy Boards häufig für BadUSB Angriffe eingesetzt.

Dienstag, 08. Oktober 2019
0 Kommentare

Die Teensy-Boards besitzen eine geringe Abmessung und sind zu einem Preis ab 15 Euro verfügbar. Durch den für diese Größe leistungsstarken Prozessor und den vielen Schnittstellen werden Teensys in vielen verschiedenen Projekten eingesetzt. Der Erfolg wird auch von der guten Dokumentation, vielen Beispielen und einer starken Community getragen. Neben dem etablierten Teensy 3.2 gibt es den energiesparenden und günstigeren Teensy LC und die leistungsfähigeren Varianten mit einem Micro SD Kartenlesegerät, bekannt unter den Namen Teensy 3.5 und Teensy 3.6. Aktuell ist der neue Teensy 4.0 erschienen, der mit dem leistungsfähigen Prozessor ARM Cortex-M7 mit 600 MHz ausgestattet ist.

Teensy BadUSB-Board
Teensy Mikrocontroller-Entwicklungssystem mit BadUSB
BadUSB mit Teensy Teensy Mikrocontroller-Entwicklungssystem mit BadUSB

Bekannt wurde der Teensy in der IT-Sicherheitsbranche durch den Vortrag von Adrian Crenshaw, der auf der Sicherheitskonferenz DEF CON 18 im Jahr 2010 das Projekt „Programmable HID USB Keystroke Dongle: Using the Teensy as a pen testing device“ vorgestellt hat. 2012 veröffentlichte die Firma Offensive Security das Framework Peensy, womit viele Standardfunktionen als fertige Funktionen bereitstehen. Samy Kamkar veröffentlichte 2015 auf Github das Projekt USBdriveby, damit konnte ein komplexerer Angriff mit dem Teensy realisiert werden. Mit diesem Code kann verdeckt eine Hintertür installieret und DNS-Einstellungen auf einem Rechner per USB überschrieben werden.

Lehre

Ich setze den Teensy in der Lehre ein, um den Studierenden die Gefahren von BadUSB zu demonstrieren. Durch die Popularität des Boards gibt es viele Anleitungen und die kleine Größe und Robustheit sind ideal für den Unterricht.

Einrichtung

Arduino IDE

Der Teensy wird ebenso wie der Digispark mit der Arduino IDE programmiert. Allerdings wird die Unterstützung nicht über den integrierten „Boardmanager“ realisiert, sondern über das Add-on Teensyduino.

Teensyduino

Das Add-on Teensyduino für die Arduino IDE kann von der PJRC Website heruntergeladen werden. Als Voraussetzung muss die Arduino IDE installiert sein.

Windows

Unter Windows muss die TeensyduinoInstall.exe heruntergeladen und installiert werden. Als Erstes wird überprüft, ob die notwendigen Treiber vorhanden sind, danach werden die Bibliotheken installiert. Bei der Frage, welche Bibliotheken installiert werden sollen, kann die Vorauswahl übernommen werden.

Linux

Für Linux-Betriebssysteme stehen einzelne Installationsdateien zur Verfügung. Diese müssen heruntergeladen, die Rechte zum Ausführen gesetzt und anschließend die Datei ausgeführt werden. Das untere Beispiel zeigt die Installation im Terminal:

root@kali:~# wget https://www.pjrc.com/teensy/td_147/TeensyduinoInstall.linux64
root@kali:~# chmod +x TeensyduinoInstall.linux32
root@kali:~# ./TeensyduinoInstall.linux32

Für andere Linux-Systeme und -Architekturen und für macOS stehen ebenfalls Downloads bereit.

Konfiguration

Nachdem das Add-on Teensyduino erfolgreich installiert worden ist, können Sie die Arduino IDE starten. Wählen Sie im Menü „Werkzeuge“ das Untermenü „Boards“ aus und dann die entsprechende Version Ihres Teensy, zum Beispiel den Eintrag „Teensy 3.2 / 3.1“. Als Nächstes wird unter „Werkzeuge > Keyboard USB Type” die Option „Keyboard“ ausgewählt, damit eine virtuelle Tastatureingabe möglich ist. Als letzten Schritt müssen Sie noch die Sprache einstellen, dazu müssen Sie unter „Werkzeuge > Keyboard Layout“ den Punkt „German“ auswählen. Dadurch wird die deutsche Tastaturausgabe unterstützt und es müssen keine extra Header-Dateien eingebunden werden.

Teensy Beispiele

Die Programmierung des Teensy gestaltet sich sehr einfach, da zum einen Standardfunktionen verwendet werden und zum anderen die Befehle gut dokumentiert sind.

Notepad öffnen

Im ersten Beispiel wird der Texteditor Notepad geöffnet. Dazu wird zuerst eine Pause von drei Sekunden (3000 Millisekunden) ausgeführt, um dem Betriebssystem Zeit für die Initialisierung einzuräumen. Anschließend wird mit der Funktion Keyboard.set_modifier() definiert, dass die Windows-Taste gedrückt werden soll. Weitere Sondertasten können mit einer Pipe verknüpft werden. Mit Keyboard.set_key1() wird die Taste R gesetzt, hier können bis neun Varianten definiert werden (Keyboard.set_key1() bis Keyboard.set_key9()). Der Befehl Keyboard.send_now() führt die vorher definierte Tastenkombination aus. Danach folgt noch einmal eine kurze Pause, um dem Dialogfenster Zeit zum Öffnen zu geben. Als Letztes erfolgt mit Keyboard.println() die Eingabe inklusive eines Umbruchs bzw. Enter am Ende und damit wird der Texteditor Notepad gestartet.

void setup(){  
    delay(3000);
    Keyboard.set_modifier(MODIFIERKEY_GUI);
    Keyboard.set_key1(KEY_R);
    Keyboard.send_now();
    delay(200);
    Keyboard.println("notepad");
}  
void loop(){  
}  

CMD mit Adminrechte öffnen

Im nächsten Beispiel öffnen wir die Eingabeaufforderung mit Adminrechte. Es wird vorausgesetzt, dass der Admin-Benutzer kein anderes Passwort als der Standard-Benutzer verwendet. Hier wird die Funktionalität verwendet, dass ein Programm mit der Tastenkombination STRG + SHIFT und ENTER als Administrator gestartet wird. Der folgende Dialog wird mit der Pfeiltaste nach links und Enter bestätigt.

void setup(){  
    delay(3000);
    Keyboard.set_modifier(MODIFIERKEY_GUI);
    Keyboard.set_key1(KEY_R);
    Keyboard.send_now();
    delay(200);
    Keyboard.print("cmd");
    Keyboard.set_modifier(MODIFIERKEY_CTRL | MODIFIERKEY_SHIFT);
    Keyboard.set_key1(KEY_ENTER);
    Keyboard.send_now();
    delay(400);
    Keyboard.set_modifier(0);
    Keyboard.set_key1(KEY_LEFT);
    Keyboard.send_now();
    Keyboard.set_key1(KEY_ENTER);
    Keyboard.send_now();
}  
void loop(){  
} 

Weitere Beispiele

Durch die Popularität des Teensy sind viele weitere Projekte entstanden. Zum Beispiel hat der Entwickler Edo Maland auf Github das Projekt Pateensy mit verschiedenen Beispielen veröffentlicht, die tief in das System eingreifen. Vom selben Entwickler stammt auch Brutal, ein Generator für Teensy Payloads.

Fazit Teensy

Der Teensy ist eines der besten Boards, mit sehr viel Leistung, vielen Anschlüssen und das bei einer kleinen Größe. Die Unterstützung in der Arduino IDE und die Dokumentation sind ausgezeichnet. Durch die große Beliebtheit gibt es viele Beispielprojekte und fertige Codes, die aufgegriffen werden können. Und durch die Robustheit ist er ideal für Experimente geeignet.

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.