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.
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.
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
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.
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.
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.
- 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)