
DLL-Passwortfilter-Implantat mit Exfiltrationsfähigkeiten
DLLPasswordFilterImplant ist eine benutzerdefinierte Passwortfilter-DLL, die das Erfassen der Anmeldedaten eines Benutzers ermöglicht. Jedes Passwortänderungsereignis in einer Domäne löst die registrierte DLL aus, um den Benutzernamen und das neue Passwort auszulesen, bevor dieses erfolgreich in Active Directory (AD) geändert wird.
Weitere Informationen zu Passwortfiltern finden Sie in der Microsoft-Dokumentation.
Erstellen Sie die DLL für die Zielarchitektur. Kompilieren Sie für 32-Bit-Systeme eine 32-Bit-Version und für 64-Bit-Systeme eine 64-Bit-Version.
Kopieren Sie die DLL in das Windows-Installationsverzeichnis. (Standardordner: \Windows\System32)
Registrieren Sie den Passwortfilter, indem Sie den folgenden Registrierungsschlüssel aktualisieren:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
Wenn der Unterschlüssel Notification Packages bereits vorhanden ist, fügen Sie den Namen der DLL („DLLPasswordFilterImplant“, falls Sie ihn nicht umbenannt haben) zu den vorhandenen Wertdaten hinzu. Überschreiben Sie nicht die vorhandenen Werte.
Wenn der Unterschlüssel nicht vorhanden ist, erstellen Sie ihn und fügen Sie den Namen der DLL („DLLPasswordFilterImplant“, falls Sie ihn nicht umbenannt haben) zu den Wertdaten hinzu.
HINWEIS: Fügen Sie beim Hinzufügen des DLL-Namens im Unterschlüssel Notification Packages keine Erweiterung .dll an.
Konfigurieren Sie den öffentlichen Schlüssel, der zum Verschlüsseln der Anmeldedaten verwendet werden soll.
KEY=key.pem
# Generate an RSA key and dump its public key. Keep the private key around for decryption
openssl genrsa -out $KEY 2048
# Prepare the Windows registry key entry.
echo 'Windows Registry Editor Version 5.00' > addKey.reg
echo >> addKey.reg
echo '[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa]' >> addKey.reg
# If python2 does not exist, use `python` instead.
echo "Key=hex:$(openssl rsa -in $KEY -pubout | sed -E '/^\-/d' | base64 -d | python2 -c 'import sys; print(",".join(["{:02x}".format(ord(b)) for b in sys.stdin.read()]))')" >> addKey.reg
Anschließend können Sie die Datei addKey.reg ausführen, um den rohen öffentlichen Schlüssel zur Registrierung hinzuzufügen.
Beachten Sie, dass die Verwendung asymmetrischer Verschlüsselung die Größe der zu exfiltrierenden Daten aufgrund von Nachrichten-Padding erheblich erhöht. Es gibt mögliche Verbesserungen, um den Daten-Overhead zu reduzieren.
Starten Sie das System neu. Quelle
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
Zeichenfolge mit dem Namen „Domain“. Geben Sie Ihre Domäne im Wert dieses Unterschlüssels an. Ihre Domäne muss mit einem „.“ beginnen. (Beispielwert: „.ihredomain.com“)Die verschlüsselten Daten werden mit OAEP gepaddet und können wie folgt entschlüsselt werden:
# Convert the stitched hex string to raw bytes.
xxd -r -p exfiltrated.hex > raw.bin
# Decrypt using the private key.
openssl rsautl -decrypt -oaep -inkey $KEY -in raw.bin -out decrypted.txt
Um den Passwortfilter vollständig von einem System zu entfernen:
Heben Sie die Registrierung des Passwortfilters auf, indem Sie den folgenden Registrierungsschlüssel aktualisieren:
HKEY_LOCAL_MACHINE SYSTEM\CurrentControlSet\Control\Lsa
Entfernen Sie im Unterschlüssel Notification Packages den Namen der DLL aus den vorhandenen Wertdaten. Entfernen Sie nicht andere vorhandene Werte.
Starten Sie das System neu.
Suchen Sie im Windows-Installationsverzeichnis (Standardordner: \Windows\System32) die Passwortfilter-DLL („DLLPasswordFilterImplant.DLL“, falls Sie sie nicht umbenannt haben) und löschen Sie die Datei.
Ein einfacher DNS-Server zum Empfangen der exfiltrierten Daten wird in scripts/ bereitgestellt. Führen Sie pip install -r scripts/requirement.txt aus, vorzugsweise in einer virtuellen Umgebung, und stellen Sie ihm dann einen .PEM-codierten privaten Schlüssel sowie eine optionale Ausgabedatei (Standard: creds.txt) zur Verfügung, in die die Anmeldedaten ausgegeben werden.
Derzeit unterstützt der DNS-Server keine gleichzeitigen Passwortänderungen und dient nur als Machbarkeitsnachweis. Pull-Requests, die die Robustheit des Servers erhöhen, sind jederzeit willkommen.
Funktioniert auf:
Der Passwortfilter wurde ausschließlich auf den oben aufgeführten Systemen getestet.
Hier sind einige Tools, die Ihnen beim Debuggen der DLL helfen können (falls erforderlich):