
PXEThief es un conjunto de herramientas que puede extraer contraseñas de la funcionalidad de Implementación del Sistema Operativo en Microsoft Endpoint Configuration Manager.
PXEThief es un conjunto de herramientas que implementa las vías de ataque discutidas en la charla de DEF CON 30 Pulling Passwords out of Configuration Manager (https://forum.defcon.org/node/241925) contra la funcionalidad de Implementación del Sistema Operativo en Microsoft Endpoint Configuration Manager (o ConfigMgr, todavía conocido comúnmente como SCCM). Permite la recolección de credenciales de Cuentas de Acceso de Red configuradas (https://docs.microsoft.com/en-us/mem/configmgr/core/plan-design/hierarchy/accounts#network-access-account) y cualquier Cuenta de Secuencia de Tareas o credenciales almacenadas dentro de Variables de Colección de ConfigMgr que se hayan configurado para la colección "Todos los equipos desconocidos". Estas cuentas de Active Directory suelen tener permisos excesivos y permiten la escalada de privilegios a acceso administrativo en algún lugar del dominio, al menos en mi experiencia personal.
Probablemente, el ataque más grave que se puede ejecutar con esta herramienta implicaría que la implementación iniciada por PXE esté soportada para "Todos los equipos desconocidos" en un punto de distribución sin contraseña, o con una contraseña débil. La asignación excesiva de permisos de las cuentas de ConfigMgr expuestas a OSD mencionada anteriormente puede entonces permitir que se ejecute una cadena completa de ataque a Active Directory con solo acceso de red al entorno objetivo.
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> debe usarse para generar un 'hash' de un archivo de variables de medios que se puede utilizar para ataques de adivinación de contraseñas con el módulo Hashcat publicado en https://github.com/MWR-CyberSec/configmgr-cryptderivekey-hashcat-module.
Un archivo contenido en la carpeta principal de PXEThief se utiliza para establecer opciones de configuración más estáticas. Estas son las siguientes:
[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 intentará determinar automáticamente la mejor interfaz para que Scapy la use, por conveniencia. Esto lo hace mediante dos técnicas principales. Si se establece en 1, intentará usar la interfaz que pueda alcanzar la puerta de enlace predeterminada de la máquina como interfaz de salida. Si se establece en 2, buscará la primera interfaz que encuentre que tenga una dirección IP que no sea de autoconfiguración o localhost. Esto fallará en seleccionar la interfaz adecuada en algunos escenarios, por lo que puede forzar el uso de una interfaz específica con 'manual_interface_selection_by_id'.manual_interface_selection_by_id le permite especificar el índice entero de la interfaz que desea que Scapy use. El ID a usar en este archivo debe obtenerse ejecutando pxethief.py 10.sccm_base_url es útil para sobrescribir el Punto de Administración con el que la herramienta se comunicará. Esto es útil si DNS no resuelve (por lo que el valor leído del archivo de variables de medios no se puede usar) o si ha identificado varios Puntos de Administración y desea enviar su tráfico a uno específico. Esto debe proporcionarse en forma de URL base, por ejemplo, http://mp.configmgr.com en lugar de mp.configmgr.com o http://mp.configmgr.com/stuff.auto_exploit_blank_password cambia el comportamiento de pxethief 1 para intentar automáticamente explotar un Punto de Distribución PXE sin protección de contraseña. Establecer esto en 1 habilitará la explotación automática, mientras que establecerlo en 0 imprimirá la cadena del cliente tftp que debe usar para descargar el archivo de variables de medios. Tenga en cuenta que casi siempre querrá tener esto establecido en 1, ya que el PXE sin protección de contraseña hace uso de una clave binaria que se envía en la respuesta DHCP que recibe cuando solicita al Punto de Distribución que realice un arranque PXE.No implementado en esta versión
pip install -r requirements.txt)pxethief.py 1 o pxethief.py 2 para identificar y generar un archivo de variables de medios, asegúrese de que la interfaz utilizada por la herramienta esté configurada en la correcta; si no es correcta, configúrela manualmente en 'settings.ini' identificando el ID de índice correcto para usar desde pxethief.py 10pxethief.py y la dirección del proxy se puede establecer en la línea 693. Planeo mover esta característica para que sea configurable en 'settings.ini' en la próxima actualización del código basepywin32 para utilizar algunas funciones criptográficas integradas de Windows. Esto no está disponible en Linux, ya que las API de criptografía de Windows no están disponibles en Linux :P El código de Scapy en pxethief.py, sin embargo, es totalmente funcional en Linux, pero necesitará parchear (al menos) la inclusión de win32crypt para que se ejecute en LinuxEspere encontrar problemas con el manejo de errores con esta herramienta; hay matices sutiles con todo en ConfigMgr y, aunque he mejorado sustancialmente el manejo de errores en preparación para el lanzamiento de la herramienta, esto no está completo de ninguna manera. Si hay casos extremos que fallan, cree un issue detallado o arréglelo y haga un pull request :) Revisaré estos para ver dónde se pueden hacer mejoras razonables. Lea el código/vea la charla y comprenda lo que está sucediendo si va a ejecutarlo en un entorno de producción. Tenga en cuenta los términos de licencia, es decir, el uso de la herramienta es bajo su propio riesgo.
Identifying and retrieving credentials from SCCM/MECM Task Sequences - En esta publicación, explico todo el flujo de cómo se encuentran, descargan y descifran las políticas de ConfigMgr después de obtener un certificado OSD válido. También quiero destacar las dos primeras referencias en esta publicación, ya que muestran investigaciones ofensivas sobre SCCM muy interesantes que están en curso actualmente.
DEF CON 30 Slides - Enlace a las diapositivas de la charla
Copyright (C) 2022 Christopher Panayi, MWR CyberSec