ATtiny85@Keyboard: Difference between revisions

From
Jump to navigation Jump to search
(Created page with "=== 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...")
 
Line 16: Line 16:
</syntaxhighlight>
</syntaxhighlight>
einige Anpassungen vorgenommen werden. Für die Tastatur in diesem Beispiel müssen die Zeilen
einige Anpassungen vorgenommen werden. Für die Tastatur in diesem Beispiel müssen die Zeilen
<syntaxhighlight lang="bash">
#define USB_CFG_VENDOR_ID 0xc0, 0x16
#define USB_CFG_VENDOR_ID 0xc0, 0x16
</syntaxhighlight>
in
in
<syntaxhighlight lang="bash">
#define USB_CFG_VENDOR_ID 0x6d, 0x04
#define USB_CFG_VENDOR_ID 0x6d, 0x04
</syntaxhighlight>
und
und
<syntaxhighlight lang="bash">
#define USB_CFG_DEVICE_ID 0xdb, 0x27
#define USB_CFG_DEVICE_ID 0xdb, 0x27
</syntaxhighlight>
in
in
<syntaxhighlight lang="bash">
#define USB_CFG_DEVICE_ID 0x1d, 0xc3
#define USB_CFG_DEVICE_ID 0x1d, 0xc3
</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="bash">
#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>
in
in
<syntaxhighlight lang="bash">
#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>
und
und
<syntaxhighlight lang="bash">
#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>
in
in
<syntaxhighlight lang="bash">
#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
</syntaxhighlight>
angepasst werden.
angepasst werden.
Einen effektiven Schutz dagegen gibt es nicht, da die USB-ID immer angepasst werden kann (also selbst Whitelisting nicht hilft) und
Einen effektiven Schutz dagegen gibt es nicht, da die USB-ID immer angepasst werden kann (also selbst Whitelisting nicht hilft) und

Revision as of 10:22, 4 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

Schutzmaßnahmen gegen den Angriff

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. Für die Tastatur in diesem Beispiel 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. Einen effektiven Schutz dagegen 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). Die einzige Möglichkeit wäre alle USB-Ports am Rechner zu verplomben.

Umsetzung / Einbau

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