ATtiny85@Keyboard
Motivation / Beschreibung des Angriffs
Die meisten Menschen, die einen USB-Stick finden, stecken diesen ohne Bedenken an einen PC und schauen nach, was sich dort drauf befindet. Nur wenige sind sich bewusst, dass dieser Schadsoftware enthalten könnte, die sich dann unbemerkt auf dem PC ausbreitet. Ist man bei USB-Sticks eventuell noch vorsichtig, macht man sich bei einer Tastatur oder Maus weniger gedanken und schließt sie in der Regel bedenkenlos an. Bei dem hier vorgestellten Angriff geht es um eine manipulierte Tastatur, die von außen den Anschein einer normalen Tastatur erweckt. Sie funktioniert wie jede andere und der Nutzer merkt von der Manipulation nichts. Mittels Funk kann jedoch vom Angreifer auf einen in der Tastatur verbauten ATtiny85 von Digispark umgeschaltet werden, sodass dieser zuvor programmierte Tastenkombinationen auf dem Zielrechner ausführt. Dadurch kann beispielsweise ein DOS-Angriff umgesetzt werden oder (auf Grund des geringen Speichers des ATtiny) Schadsoftware aus dem Internet nachgeladen werden. Ebenfalls denkbar ist, Befehle während des Betriebs per Funk zu übertragen. Dies würde jedoch wahrscheinlich nur sehr langsam funktionieren auf Grund der geringen Datenübertragungsrate, allerdings könnte man diese durch den Einsatz eines Bluetooth-Moduls deutlich erhöhen. Hierbei stößt man allerdings auf ein Platzproblem, da die Hohlräume innerhalb des Tastaturkörpers stark begrenzt sind.
Beschreibung ATtiny85
Ein Digispark ist ein fertig bestücktes, Arduino-kompatibles Entwickler-Board in der Größe einer 1-Euro-Münze, ausgestattet mit Atmels achtbeinigem Mikrocontroller Attiny85 und einem USB-Programmieranschluss. Der verfügbare Speicherplatz auf der Platine beträgt 6 Kilobyte. Einmal an einen Server, Arbeitsplatzcomputer oder auch an ein mobiles IT-Gerät über die USB-Schnittstelle angeschlossen, wird die Platine dank des HID-Standards als Tastatur erkannt und von allen gängigen Betriebssystemen akzeptiert, vergleichbar also einem USB Rubber Ducky. Die nun aufgerufenen Skripte geben sich als tippender Benutzer aus, das IT-System behandelt sie wie Tastatureingaben. [1]
Verschleiern der Anwesenheit des ATtiny85
Damit ein Nutzer nicht bemerkt, dass die ihm vorliegende Tastatur manipuliert ist, darf sie keinerlei Hinweise auf Änderungen geben. Von außen sollte sie den Anschein erwecken, niemals geöffnet worden zu sein und es sollten keinerlei Kabel herausschauen oder Beschädigungen zu finden sein. Aber auch die USB-ID der Tastatur sollte sowohl im normalen, als auch im Betrieb des ATtiny85 die selbe sein. Hierzu müssen, während der ATtiny85 angeschlossen ist, in der Datei
~/.arduino15/packages/digistump/hardware/avr/1.6.7/libraries/DigisparkKeyboard
einige Anpassungen vorgenommen werden. In dem beschriebenen Beispiel wurde eine Logitech K200 verwendet. Für diese Tastatur müssen die Zeilen
#define USB_CFG_VENDOR_ID 0xc0, 0x16
in
#define USB_CFG_VENDOR_ID 0x6d, 0x04
und
#define USB_CFG_DEVICE_ID 0xdb, 0x27
in
#define USB_CFG_DEVICE_ID 0x1d, 0xc3
geändert werden. Dadurch erkennt der PC an dem die Tastatur angeschlossen wird den ATtiny mit der gleichen ID und der gleichen Bezeichnung wie die Tastatur. Der Befehl "sudo lsusb -vs <BUS>:<DEVICE>" bietet zusätzlich Informationen über das angegebene USB-Gerät. Auch hier werden Hersteller- und Produkt-ID angezeigt, die zuvor bereits angepasst wurden. Weiterhin werden unter anderem auch Hersteller- und Produktname angezeigt. Diese können in der oben genannten Datei ebenfalls durch ändern der Zeilen:
#define USB_CFG_VENDOR_NAME 'd','i','g','i','s','t','u','m','p','.','c','o','m'
#define USB_CFG_VENDOR_NAME_LEN 13
in
#define USB_CFG_VENDOR_NAME 'L','o','g','i','t','e','c','h'
#define USB_CFG_VENDOR_NAME_LEN 8
und
#define USB_CFG_DEVICE_NAME 'D','i','g','i','K','e','y'
#define USB_CFG_DEVICE_NAME_LEN 7
in
#define USB_CFG_DEVICE_NAME 'U','S','B',' ','K','e','y','b','o','a','r','d'
#define USB_CFG_DEVICE_NAME_LEN 12
angepasst werden.
Umsetzung / Einbau
Die folgende Abbildung zeigt die geöffnete und bereits manipulierte Tastatur.
Die originale Tastatur besitzt lediglich die Platine, die links oben zu sehen ist. Über deren Kontakte die 3-lagige Tastaturfolie/Membrane verbunden wird, welche die zweidimensionale Tastenadressierung realisiert. An den Ausgängen der Platine zum USB-Kabel wurden weitere Leitungen angebracht, die zu einer Schaltung führen. Diese Schaltung wurde mit einem Funkmodul (Platine rechts außen) und dem ATtiny85 (Platine links außen) verbunden. Durch die Funkfernbedienung (rechts der Platinen) kann zwischen den verschiedenen Modi (DOS, Download, Listen, normaler Betrieb) hin und her geschaltet werden. Die zusätzlichen Platinen wurden in den einzigen Hohlraum der Tastatur eingesetzt, in dem Bereich um die Pfeiltasten. Das USB-Kabel, welches nach unten hin weg führt ist zum Programmieren des ATtiny vorgesehen. Wie im Kapitel Probleme und Lösungen beschrieben gibt es Probleme alles über ein Kabel zu realisieren. Für Debugzwecke ist die Leitung aus der zusammengeschraubten Tastatur geführt und sichtbar. Bei einem realen Einsatz kann man sie jedoch schnell und einfach verstecken. Generell kann es abgenommen werden, sodass lediglich vier dünne Kabel bleiben.
Schutzmaßnahmen gegen den Angrff
Einen effektiven Schutz gegen die Angriffe gibt es nicht, da die USB-ID immer angepasst werden kann (also selbst Whitelisting nicht hilft) und zumindest bei Eingabegeräten selten eine gesonderte Prüfung (aufschrauben etc.) stattfindet (im Vgl. zu USB-Sticks, bei denen oft appelliert wird keine gefundenen Sticks zu nutzen). Die einzige Möglichkeit wäre alle USB-Ports am Rechner zu verplomben.
Probleme und Lösungen
Beim Verbinden mit einem PC geht der ATtiny85 anfangs in einen Programmiermodus, in dem man ein Programm übertragen kann. Nach kurzer Zeit beginnt er jedoch mit der Ausführung des gespeicherten Programms. Bei der Umsetzung ist dabei folgendes Problem aufgetreten: Nachdem die Tastatur angeschlossen wurde, läuft sie normal und Eingaben sind möglich. Schaltet man dann auf den ATtiny um, so geht er nicht in den Programmiermodus, sondern direkt in die Ausführung des Programms. Ein Programmieren ist somit nicht mehr möglich. Das liegt wohl daran, dass für einen vollständigen Reboot die Stromversorgung gänzlich getrennt werden muss. Ein Softwarereboot lässt den ATtiny85 bei der Ausführung des Programms starten. Mögliche Lösungen für dieses Problem sind zum einen, dass man ein Mal ein Programm auf den ATtiny85 lädt, ihn dann in die Tastatur lötet und sie so nutzt. Eine Anpassung oder Änderung des Programms wäre dann nur möglich, wenn man ihn wieder heraus löten würde. Zum anderen kann man noch einen zusätzlichen USB-Ausgang an den ATtiny85 anbringen, der aus der Tastatur hängt und eventuell ebenfalls durch etwas weniger Aufwand in der Tastatur verstaut werden kann. Somit hat man eine Programmierschnittstelle, denn wenn man die Tastatur nur über diesen USB-Ausgang anschließt erhält man ausschließlich zugriff auf den ATtiny85. Dieser bootet normal und gelangt in den Programmiermodus. Das Schalten der Zustände des ATtiny erfolgt mit Hilfe eines Funkempfängers (433Mhz) und einem entsprechenden Sender, welcher 4 Codes/Tasten anbietet. Damit lassen sich 3 Angriffe programmieren, sowie ist eine Taste für das Schalten auf die eigentliche Tastatur zuständig.