Shadow Credentials
Intro
Check the original post for all the information about this technique.[1]
In summary, control of a user’s or computer’s msDS-KeyCredentialLink can let an attacker add a key credential, authenticate as that object with PKINIT, and—when the KDC and account support the necessary flows—use the resulting ticket with S4U2Self/user-to-user to recover the object’s NT hash.[1]
In the post, a method is outlined for setting up public-private key authentication credentials to acquire a unique Service Ticket that includes the target’s NTLM hash. This process involves the encrypted NTLM_SUPPLEMENTAL_CREDENTIAL within the Privilege Attribute Certificate (PAC), which can be decrypted.[1]
Requirements
To apply this technique, certain conditions must be met:[1]
- A minimum of one Windows Server 2016 Domain Controller is needed.
- The Domain Controller must have a server authentication digital certificate installed.
- The directory schema must contain
msDS-KeyCredentialLink; a Windows Server 2016 or newer DC and a PKINIT-capable certificate on the KDC are the practical platform requirements described by the research. Verify the domain’s schema/DC mix rather than assuming the domain functional-level label alone decides exploitability. - An account with delegated rights to modify the msDS-KeyCredentialLink attribute of the target object is required.
Abuse
The abuse of Key Trust for computer objects encompasses steps beyond obtaining a Ticket Granting Ticket (TGT) and the NTLM hash. The options include:[1]
- Creating an RC4 silver ticket to act as privileged users on the intended host.
- Using the TGT with S4U2Self for impersonation of privileged users, necessitating alterations to the Service Ticket to add a service class to the service name.
A significant advantage of Key Trust abuse is its limitation to the attacker-generated private key, avoiding delegation to potentially vulnerable accounts and not requiring the creation of a computer account, which could be challenging to remove.[1]
Tools
### Whisker
Whisker uses DSInternals to manipulate msDS-KeyCredentialLink from C#. Whisker and its Python counterpart pyWhisker support adding, listing, removing, and clearing key credentials.[2][4]
Whisker functions include:
- Add: Generates a key pair and adds a key credential.
- List: Displays all key credential entries.
- Remove: Deletes a specified key credential.
- Clear: Erases all key credentials, potentially disrupting legitimate WHfB usage.
Whisker.exe add /target:computername$ /domain:constoso.local /dc:dc1.contoso.local /path:C:\path\to\file.pfx /password:P@ssword1
pyWhisker
pyWhisker brings the workflow to UNIX-like systems with Impacket and PyDSInternals, including list/add/remove and JSON import/export operations.[4]
python3 pywhisker.py -d "domain.local" -u "user1" -p "complexpassword" --target "user2" --action "list"
ShadowSpray
ShadowSpray enumerates domain objects over which the operator has rights such as GenericWrite/GenericAll, attempts to add key credentials broadly, and includes cleanup/recursive modes. Broad spraying is disruptive and conspicuous; use explicit targets and retain each added DeviceID for precise removal.[3]