
PXEThief ist eine Sammlung von Tools, die Passwörter aus der Betriebssystembereitstellungsfunktion von Microsoft Endpoint Configuration Manager extrahieren kann.
PXEThief ist eine Sammlung von Tools, die Angriffspfade implementiert, die im DEF CON 30 Vortrag Pulling Passwords out of Configuration Manager (https://forum.defcon.org/node/241925) gegen die Betriebssystembereitstellungsfunktion in Microsoft Endpoint Configuration Manager (oder ConfigMgr, immer noch allgemein als SCCM bekannt) diskutiert wurden. Es ermöglicht das Sammeln von Anmeldeinformationen von konfigurierten Netzwerkzugangskonten (https://docs.microsoft.com/en-us/mem/configmgr/core/plan-design/hierarchy/accounts#network-access-account) sowie von Tasksequenzkonten oder Anmeldeinformationen, die in ConfigMgr-Sammlungsvariablen gespeichert sind, die für die Sammlung 'Alle unbekannten Computer' konfiguriert wurden. Diese Active Directory-Konten sind häufig überberechtigt und ermöglichen eine Eskalation der Berechtigungen zu administrativem Zugriff irgendwo in der Domäne, zumindest nach meiner persönlichen Erfahrung.
Wahrscheinlich würde der schwerwiegendste Angriff, der mit diesen Tools ausgeführt werden kann, die PXE-initiierte Bereitstellung für 'Alle unbekannten Computer' auf einem Verteilungspunkt ohne Passwort oder mit einem schwachen Passwort beinhalten. Die oben erwähnte Überberechtigung von ConfigMgr-Konten, die der OSD ausgesetzt sind, kann dann eine vollständige Active Directory-Angriffskette ermöglichen, die nur mit Netzwerkzugriff auf die Zielumgebung ausgeführt werden kann.
python pxethief.py -h
pxethief.py 1 - Automatically identify and download encrypted media file using DHCP PXE boot request. Additionally, attempt exploitation of blank media password when auto_exploit_blank_password is set to 1 in 'settings.ini'
pxethief.py 2 <IP Address of DP Server> - Coerce PXE Boot against a specific MECM Distribution Point server designated by IP address
pxethief.py 3 <variables-file-name> <Password-guess> - Attempt to decrypt a saved media variables file (obtained from PXE, bootable or prestaged media) and retrieve sensitive data from MECM DP
pxethief.py 4 <variables-file-name> <policy-file-path> <password> - Attempt to decrypt a saved media variables file and Policy XML file retrieved from a stand-alone TS media
pxethief.py 5 <variables-file-name> - Print the hash corresponding to a specified media variables file for cracking in Hashcat
pxethief.py 6 <identityguid> <identitycert-file-name> - Retrieve task sequences using the values obtained from registry keys on a DP
pxethief.py 7 <Reserved1-value> - Decrypt stored PXE password from SCCM DP registry key (reg query HKLM\software\microsoft\sms\dp /v Reserved1)
pxethief.py 8 - Write new default 'settings.ini' file in PXEThief directory
pxethief.py 10 - Print Scapy interface table to identify interface indexes for use in 'settings.ini'
pxethief.py -h - Print PXEThief help text
pxethief.py 5 <variables-file-name> sollte verwendet werden, um einen 'Hash' einer Medienvariablendatei zu generieren, der für Passwort-Rateangriffe mit dem Hashcat-Modul verwendet werden kann, das unter https://github.com/MWR-CyberSec/configmgr-cryptderivekey-hashcat-module veröffentlicht wurde.
Eine Datei, die sich im Hauptverzeichnis von PXEThief befindet, wird verwendet, um statischere Konfigurationsoptionen festzulegen. Diese sind wie folgt:
[SCAPY SETTINGS]
automatic_interface_selection_mode = 1
manual_interface_selection_by_id =
[HTTP CONNECTION SETTINGS]
use_proxy = 0
use_tls = 0
[GENERAL SETTINGS]
sccm_base_url =
auto_exploit_blank_password = 1
automatic_interface_selection_mode versucht automatisch die beste Schnittstelle für Scapy zu ermitteln, der Einfachheit halber. Dies geschieht mittels zweier Haupttechniken. Wenn auf 1 gesetzt, wird versucht, die Schnittstelle zu verwenden, die das Standard-Gateway des Rechners erreichen kann, als Ausgabeschnittstelle. Wenn auf 2 gesetzt, wird nach der ersten Schnittstelle gesucht, die eine IP-Adresse hat, die keine Autokonfigurations- oder Localhost-IP-Adresse ist. Dies kann in einigen Szenarien dazu führen, dass die passende Schnittstelle nicht ausgewählt wird, weshalb Sie die Verwendung einer bestimmten Schnittstelle mit 'manual_interface_selection_by_id' erzwingen können.manual_interface_selection_by_id ermöglicht es Ihnen, den ganzzahligen Index der Schnittstelle anzugeben, die Scapy verwenden soll. Die in dieser Datei zu verwendende ID sollte durch Ausführen von pxethief.py 10 ermittelt werden.sccm_base_url ist nützlich, um den Management Point zu überschreiben, mit dem das Tool kommuniziert. Dies ist nützlich, wenn DNS nicht auflöst (der aus der Medienvariablendatei gelesene Wert kann daher nicht verwendet werden) oder wenn Sie mehrere Management Points identifiziert haben und Ihren Datenverkehr an einen bestimmten senden möchten. Dies sollte in Form einer Basis-URL angegeben werden, z.B. http://mp.configmgr.com anstelle von mp.configmgr.com oder http://mp.configmgr.com/stuff.auto_exploit_blank_password ändert das Verhalten von pxethief 1, um automatisch zu versuchen, einen nicht passwortgeschützten PXE-Verteilungspunkt auszunutzen. Wenn Sie dies auf 1 setzen, wird die automatische Ausnutzung aktiviert, während Sie auf 0 gesetzt den TFTP-Client-String ausgibt, den Sie zum Herunterladen der Medienvariablendatei verwenden sollten. Beachten Sie, dass Sie dies fast immer auf 1 setzen möchten, da nicht passwortgeschütztes PXE einen binären Schlüssel verwendet, der in der DHCP-Antwort gesendet wird, die Sie erhalten, wenn Sie den Verteilungspunkt bitten, einen PXE-Boot durchzuführen.In dieser Version nicht implementiert
pip install -r requirements.txt)pxethief.py 1 oder pxethief.py 2 verwenden, um eine Medienvariablendatei zu identifizieren und zu generieren, stellen Sie sicher, dass die vom Tool verwendete Schnittstelle auf die richtige gesetzt ist. Wenn sie nicht korrekt ist, setzen Sie sie manuell in 'settings.ini', indem Sie die richtige Index-ID aus pxethief.py 10 ermitteln.pxethief.py aktiviert werden und die Adresse des Proxys kann in Zeile 693 festgelegt werden. Ich plane, diese Funktion in der nächsten Aktualisierung des Codes in 'settings.ini' konfigurierbar zu machen.pywin32, um einige integrierte Windows-Kryptografiefunktionen zu nutzen. Dies ist unter Linux nicht verfügbar, da die Windows-Kryptografie-APIs unter Linux nicht verfügbar sind :P Der Scapy-Code in pxethief.py ist jedoch unter Linux voll funktionsfähig, aber Sie müssen (zumindest) den Include von win32crypt entfernen, um es unter Linux auszuführen.Erwarten Sie, dass Sie bei diesem Tool auf Probleme mit der Fehlerbehandlung stoßen; es gibt subtile Nuancen bei allem in ConfigMgr, und obwohl ich die Fehlerbehandlung im Vorfeld der Veröffentlichung des Tools erheblich verbessert habe, ist dies keineswegs vollständig. Wenn es Randfälle gibt, die fehlschlagen, erstellen Sie ein detailliertes Issue oder beheben Sie es und erstellen Sie einen Pull-Request :) Ich werde diese überprüfen, um zu sehen, wo vernünftige Verbesserungen vorgenommen werden können. Lesen Sie den Code/sehen Sie sich den Vortrag an und verstehen Sie, was vor sich geht, wenn Sie es in einer Produktionsumgebung ausführen. Denken Sie an die Lizenzbedingungen - d.h. die Nutzung des Tools erfolgt auf eigenes Risiko.
Identifying and retrieving credentials from SCCM/MECM Task Sequences - In diesem Beitrag erkläre ich den gesamten Ablauf, wie ConfigMgr-Richtlinien gefunden, heruntergeladen und entschlüsselt werden, nachdem ein gültiges OSD-Zertifikat erhalten wurde. Ich möchte auch die ersten beiden Referenzen in diesem Beitrag hervorheben, da sie sehr interessante offensive SCCM-Forschung zeigen, die derzeit im Gange ist.
DEF CON 30 Folien - Link zu den Vortragsfolien
Copyright (C) 2022 Christopher Panayi, MWR CyberSec