ATtiny85@Keyboard: Difference between revisions
(2 intermediate revisions by one other user not shown) | |||
Line 14: | Line 14: | ||
</syntaxhighlight> |
</syntaxhighlight> |
||
einige Anpassungen vorgenommen werden. In dem beschriebenen Beispiel wurde eine Logitech K200 verwendet. Für diese Tastatur müssen die Zeilen |
einige Anpassungen vorgenommen werden. In dem beschriebenen Beispiel wurde eine Logitech K200 verwendet. Für diese Tastatur müssen die Zeilen |
||
<syntaxhighlight lang=" |
<syntaxhighlight lang="cpp"> |
||
#define USB_CFG_VENDOR_ID 0xc0, 0x16 |
#define USB_CFG_VENDOR_ID 0xc0, 0x16 |
||
</syntaxhighlight> |
</syntaxhighlight> |
||
in |
in |
||
<syntaxhighlight lang=" |
<syntaxhighlight lang="cpp"> |
||
#define USB_CFG_VENDOR_ID 0x6d, 0x04 |
#define USB_CFG_VENDOR_ID 0x6d, 0x04 |
||
</syntaxhighlight> |
</syntaxhighlight> |
||
und |
und |
||
<syntaxhighlight lang=" |
<syntaxhighlight lang="cpp"> |
||
#define USB_CFG_DEVICE_ID 0xdb, 0x27 |
#define USB_CFG_DEVICE_ID 0xdb, 0x27 |
||
</syntaxhighlight> |
</syntaxhighlight> |
||
in |
in |
||
<syntaxhighlight lang=" |
<syntaxhighlight lang="cpp"> |
||
#define USB_CFG_DEVICE_ID 0x1d, 0xc3 |
#define USB_CFG_DEVICE_ID 0x1d, 0xc3 |
||
</syntaxhighlight> |
</syntaxhighlight> |
||
geändert werden. |
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: |
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: |
||
<syntaxhighlight lang=" |
<syntaxhighlight lang="cpp"> |
||
#define USB_CFG_VENDOR_NAME 'd','i','g','i','s','t','u','m','p','.','c','o','m' |
#define USB_CFG_VENDOR_NAME 'd','i','g','i','s','t','u','m','p','.','c','o','m' |
||
#define USB_CFG_VENDOR_NAME_LEN 13 |
#define USB_CFG_VENDOR_NAME_LEN 13 |
||
</syntaxhighlight> |
</syntaxhighlight> |
||
in |
in |
||
<syntaxhighlight lang=" |
<syntaxhighlight lang="cpp"> |
||
#define USB_CFG_VENDOR_NAME 'L','o','g','i','t','e','c','h' |
#define USB_CFG_VENDOR_NAME 'L','o','g','i','t','e','c','h' |
||
#define USB_CFG_VENDOR_NAME_LEN 8 |
#define USB_CFG_VENDOR_NAME_LEN 8 |
||
</syntaxhighlight> |
</syntaxhighlight> |
||
und |
und |
||
<syntaxhighlight lang=" |
<syntaxhighlight lang="cpp"> |
||
#define USB_CFG_DEVICE_NAME 'D','i','g','i','K','e','y' |
#define USB_CFG_DEVICE_NAME 'D','i','g','i','K','e','y' |
||
#define USB_CFG_DEVICE_NAME_LEN 7 |
#define USB_CFG_DEVICE_NAME_LEN 7 |
||
</syntaxhighlight> |
</syntaxhighlight> |
||
in |
in |
||
<syntaxhighlight lang=" |
<syntaxhighlight lang="cpp"> |
||
#define USB_CFG_DEVICE_NAME 'U','S','B',' ','K','e','y','b','o','a','r','d' |
#define USB_CFG_DEVICE_NAME 'U','S','B',' ','K','e','y','b','o','a','r','d' |
||
#define USB_CFG_DEVICE_NAME_LEN 12 |
#define USB_CFG_DEVICE_NAME_LEN 12 |
||
Line 72: | Line 72: | ||
Bei diesem Angriff wird von dem ATtiny ein Terminal geöffnet und mittels wget von einer Internetseite (beispielsweise Dropbox) ein dort zuvor platziertes Programm heruntergeladen und anschließend ausgeführt. Hierbei sind alle möglichen Programme denkbar (Verschlüsselungstrojaner etc.). |
Bei diesem Angriff wird von dem ATtiny ein Terminal geöffnet und mittels wget von einer Internetseite (beispielsweise Dropbox) ein dort zuvor platziertes Programm heruntergeladen und anschließend ausgeführt. Hierbei sind alle möglichen Programme denkbar (Verschlüsselungstrojaner etc.). |
||
==== Listen ==== |
==== Listen and Repeat ==== |
||
Bei diesem Angriff werden dem ATtiny extern Befehle in Echtzeit zugesendet, die dieser auf dem Zielrechner ausführt. Somit kann der Angreifer gezielt Befehle absetzen. |
Bei diesem Angriff werden dem ATtiny extern Befehle in Echtzeit zugesendet, die dieser auf dem Zielrechner ausführt. Somit kann der Angreifer gezielt Befehle absetzen. |
||
Line 84: | Line 84: | ||
=== Fazit === |
=== Fazit === |
||
Dieses Projekt zeichnet sich durch seine kostengünstige Umsetzung aus. Die Materialkosten belaufen sich nur auf wenige Euro. Einmal entworfen lassen sich die Tastaturen mit geringem Zeitaufwand reproduzieren. Gegen diese Art von Angriff gibt es praktisch keinen wirksamen Schutz für gängige Betriebssysteme. Für einen flächendeckenden Angriff auf viele Personen oder ein ganzes Unternehmen wäre es wohl zu Aufwendig. Vor allem da sich im beschriebenen Beispiel der Angreifer, auf Grund der geringen Funkreichweite, nah an dem Opfer befinden muss. Es ist aber hingegen für gezielte Angriffe auf einzelne Personen sehr gut geeignet (evtl. für Geheimdienste). |
Latest revision as of 13:35, 21 October 2019
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 und Code
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 wird die 3-lagige Tastaturfolie/Membrane verbunden, 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-Angriff, Schadsoftware nachladen, 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 die Leitung abgenommen werden, sodass lediglich vier dünne Kabel bleiben.
Die folgende Abbildung zeigt den Schaltplan der Hardwareumsetzung.
Der Code für den ATtiny ist hier zu finden.
Angriffe
Denial of Service (DoS)
Bei diesem Angriff wird von dem ATtiny ein beliebiges Programm ohne Delay mehrfach geöffnet. In der Ausführungsschleife wird die Tastenkombination für beispielsweise das Öffnen des Explorers oder des Terminals wieder und wieder ausgeführt. Somit werden in kürzester Zeit (<5sek) mehrere 100 Prozesse gestartet, die den Zielrechner in der Regel zum Absturz bzw. zur Arbeitsunfähigkeit bringen.
Schadsoftware nachladen
Bei diesem Angriff wird von dem ATtiny ein Terminal geöffnet und mittels wget von einer Internetseite (beispielsweise Dropbox) ein dort zuvor platziertes Programm heruntergeladen und anschließend ausgeführt. Hierbei sind alle möglichen Programme denkbar (Verschlüsselungstrojaner etc.).
Listen and Repeat
Bei diesem Angriff werden dem ATtiny extern Befehle in Echtzeit zugesendet, die dieser auf dem Zielrechner ausführt. Somit kann der Angreifer gezielt Befehle absetzen.
Schutzmaßnahmen gegen die Angrffe
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.
Fazit
Dieses Projekt zeichnet sich durch seine kostengünstige Umsetzung aus. Die Materialkosten belaufen sich nur auf wenige Euro. Einmal entworfen lassen sich die Tastaturen mit geringem Zeitaufwand reproduzieren. Gegen diese Art von Angriff gibt es praktisch keinen wirksamen Schutz für gängige Betriebssysteme. Für einen flächendeckenden Angriff auf viele Personen oder ein ganzes Unternehmen wäre es wohl zu Aufwendig. Vor allem da sich im beschriebenen Beispiel der Angreifer, auf Grund der geringen Funkreichweite, nah an dem Opfer befinden muss. Es ist aber hingegen für gezielte Angriffe auf einzelne Personen sehr gut geeignet (evtl. für Geheimdienste).