
PXEThief — это набор инструментов, который может извлекать пароли из функциональности развертывания операционной системы в Microsoft Endpoint Configuration Manager
PXEThief — это набор инструментов, реализующий атаки, обсуждавшиеся на выступлении DEF CON 30 Извлечение паролей из Configuration Manager (https://forum.defcon.org/node/241925) на функциональность развёртывания операционных систем в Microsoft Endpoint Configuration Manager (или ConfigMgr, по‑прежнему часто называемом SCCM). Он позволяет собирать учётные данные настроенных учётных записей сетевого доступа (https://docs.microsoft.com/en-us/mem/configmgr/core/plan-design/hierarchy/accounts#network-access-account) и любые учётные записи последовательностей задач или учётные данные, хранящиеся в переменных коллекций ConfigMgr, настроенных для коллекции «Все неизвестные компьютеры». Эти учётные записи Active Directory, как правило, имеют избыточные права и позволяют повысить привилегии до административного доступа где‑то в домене, по крайней мере, по моему личному опыту.
Вероятно, самой серьёзной атакой, которую можно выполнить с помощью этого инструмента, является атака, когда развёртывание через PXE поддерживается для «Всех неизвестных компьютеров» на точке распространения без пароля или со слабым паролем. Избыточное выделение прав учётным записям ConfigMgr, доступным через OSD, о котором упоминалось выше, может затем позволить выполнить полную цепочку атак на Active Directory, имея лишь сетевой доступ к целевой среде.
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> следует использовать для генерации «хеша» файла переменных носителя, который можно применять для атак по подбору пароля с помощью модуля Hashcat, опубликованного по адресу https://github.com/MWR-CyberSec/configmgr-cryptderivekey-hashcat-module.
Файл, находящийся в основной папке PXEThief, используется для задания более статических параметров конфигурации. Они перечислены ниже:
[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 пытается автоматически определить наилучший интерфейс для Scapy для удобства. Для этого используются два основных метода. Если установлено значение 1, он будет пытаться использовать интерфейс, способный достичь шлюза по умолчанию машины, в качестве выходного интерфейса. Если значение равно 2, он будет искать первый интерфейс, у которого есть IP-адрес, не являющийся адресом автоматической настройки или localhost. В некоторых сценариях это не сможет выбрать подходящий интерфейс, поэтому вы можете принудительно задать конкретный интерфейс с помощью manual_interface_selection_by_id.manual_interface_selection_by_id позволяет указать целочисленный индекс интерфейса, который Scapy должен использовать. Идентификатор для использования в этом файле следует получить, запустив pxethief.py 10.sccm_base_url полезен для переопределения точки управления, с которой будет взаимодействовать инструмент. Это пригодится, если DNS не разрешается (поэтому значение, прочитанное из файла переменных носителя, не может быть использовано) или если вы обнаружили несколько точек управления и хотите направлять трафик на конкретную. Это значение следует указывать в виде базового URL, например http://mp.configmgr.com, а не mp.configmgr.com или http://mp.configmgr.com/stuff.auto_exploit_blank_password изменяет поведение pxethief 1, чтобы автоматически пытаться эксплуатировать точку распространения PXE без пароля. Установка значения 1 включает автоматическую эксплуатацию, а 0 выводит строку tftp-клиента, которую следует использовать для загрузки файла переменных носителя. Обратите внимание, что почти всегда вам нужно установить это значение в 1, поскольку PXE без пароля использует двоичный ключ, отправляемый в ответе DHCP, который вы получаете при запросе PXE-загрузки у точки распространения.Не реализовано в этом выпуске
pip install -r requirements.txt)pxethief.py 1 или pxethief.py 2 для обнаружения и создания файла переменных носителя, убедитесь, что используемый инструментом интерфейс установлен правильно; если это не так, задайте его вручную в 'settings.ini', определив правильный идентификатор индекса с помощью pxethief.py 10pxethief.py, а адрес прокси задать в строке 693. Я планирую перенести эту функцию в настройки файла 'settings.ini' в следующем обновлении кода.pywin32 для использования некоторых встроенных криптографических функций Windows. Это недоступно в Linux, поскольку криптографические API Windows недоступны в Linux :P Однако код Scapy в pxethief.py полностью работает в Linux, но вам потребуется удалить (как минимум) включение win32crypt, чтобы он работал под Linux.Ожидайте проблем с обработкой ошибок в этом инструменте; в ConfigMgr есть множество тонких нюансов, и хотя я значительно улучшил обработку ошибок при подготовке к выпуску инструмента, она ни в коем случае не является полной. Если есть пограничные случаи, которые приводят к сбоям, создайте подробный отчёт об ошибке или исправьте её и отправьте запрос на включение изменений :) Я рассмотрю их, чтобы понять, какие разумные улучшения можно внести. Прочитайте код/прослушайте выступление и поймите, что происходит, если вы собираетесь запускать его в рабочей среде. Помните об условиях лицензирования — использование инструмента осуществляется на ваш собственный риск.
Выявление и извлечение учётных данных из последовательностей задач SCCM/MECM — в этой статье я объясняю весь процесс того, как политики ConfigMgr находятся, загружаются и расшифровываются после получения действительного сертификата OSD. Также хочу выделить первые две ссылки в этой статье, поскольку они демонстрируют очень интересные текущие исследования SCCM в области безопасности.
Слайды DEF CON 30 — ссылка на слайды выступления
Copyright (C) 2022 Christopher Panayi, MWR CyberSec