Resource-based Constrained Delegation
Principes de base de la délégation restreinte basée sur les ressources
Cela est similaire à la Délégation restreinte de base mais au lieu de donner des autorisations à un objet pour usurper l'identité de n'importe quel utilisateur pour un service. La délégation restreinte basée sur les ressources définit dans l'objet qui peut usurper l'identité de n'importe quel utilisateur pour lui.
Dans ce cas, l'objet restreint aura un attribut appelé msDS-AllowedToActOnBehalfOfOtherIdentity avec le nom de l'utilisateur qui peut usurper l'identité de tout autre utilisateur pour lui.
Une autre différence importante de cette délégation restreinte par rapport aux autres délégations est que tout utilisateur avec des permissions d'écriture sur un compte machine (GenericAll/GenericWrite/WriteDacl/WriteProperty/etc) peut définir le msDS-AllowedToActOnBehalfOfOtherIdentity (Dans les autres formes de délégation, vous aviez besoin de privilèges d'administrateur de domaine).
Nouveaux concepts
Dans la délégation restreinte, il a été dit que le drapeau TrustedToAuthForDelegation
à l'intérieur de la valeur userAccountControl de l'utilisateur est nécessaire pour effectuer un S4U2Self. Mais ce n'est pas tout à fait vrai.
La réalité est que même sans cette valeur, vous pouvez effectuer un S4U2Self contre n'importe quel utilisateur si vous êtes un service (avez un SPN) mais, si vous avez TrustedToAuthForDelegation
, le TGS retourné sera Transmissible et si vous ne l'avez pas, le TGS retourné ne sera pas Transmissible.
Cependant, si le TGS utilisé dans S4U2Proxy n'est pas Transmissible en essayant d'exploiter une délégation restreinte de base, cela ne fonctionnera pas. Mais si vous essayez d'exploiter une délégation restreinte basée sur les ressources, cela fonctionnera (ce n'est pas une vulnérabilité, c'est une fonctionnalité, apparemment).
Structure de l'attaque
Si vous avez des privilèges équivalents en écriture sur un compte Ordinateur, vous pouvez obtenir un accès privilégié sur cette machine.
Supposons que l'attaquant a déjà des privilèges équivalents en écriture sur l'ordinateur victime.
L'attaquant compromet un compte qui a un SPN ou en crée un ("Service A"). Notez que n'importe quel Utilisateur Administrateur sans aucun autre privilège spécial peut créer jusqu'à 10 objets Ordinateur (MachineAccountQuota) et leur attribuer un SPN. Ainsi, l'attaquant peut simplement créer un objet Ordinateur et attribuer un SPN.
L'attaquant abuse de son privilège d'ÉCRITURE sur l'ordinateur victime (ServiceB) pour configurer une délégation restreinte basée sur les ressources pour permettre à ServiceA d'usurper l'identité de n'importe quel utilisateur contre cet ordinateur victime (ServiceB).
L'attaquant utilise Rubeus pour effectuer une attaque S4U complète (S4U2Self et S4U2Proxy) de Service A à Service B pour un utilisateur avec un accès privilégié à Service B.
S4U2Self (à partir du compte compromis/créé avec le SPN) : Demande un TGS de l'Administrateur pour moi (Non Transmissible).
S4U2Proxy : Utilise le TGS non Transmissible de l'étape précédente pour demander un TGS de l'Administrateur à l'hôte victime.
Même si vous utilisez un TGS non Transmissible, comme vous exploitez une délégation restreinte basée sur les ressources, cela fonctionnera.
L'attaquant peut transmettre le ticket et usurper l'utilisateur pour obtenir accès au ServiceB victime.
Pour vérifier le MachineAccountQuota du domaine, vous pouvez utiliser:
Attaque
Création d'un objet ordinateur
Vous pouvez créer un objet ordinateur à l'intérieur du domaine en utilisant powermad:
Configuration de la délégation contrainte basée sur les ressources
Utilisation du module PowerShell activedirectory
En utilisant powerview
Réalisation d'une attaque S4U complète
Tout d'abord, nous avons créé le nouvel objet Ordinateur avec le mot de passe 123456
, nous avons donc besoin du hash de ce mot de passe :
Cela affichera les hachages RC4 et AES pour ce compte. Maintenant, l'attaque peut être effectuée :
Vous pouvez générer plus de tickets en demandant une seule fois en utilisant le paramètre /altservice
de Rubeus :
Notez que les utilisateurs ont un attribut appelé "Ne peut pas être délégué". Si un utilisateur a cet attribut à True, vous ne pourrez pas vous faire passer pour lui. Cette propriété peut être vue dans bloodhound.
Accès
La dernière ligne de commande effectuera l'attaque S4U complète et injectera le TGS de l'Administrateur vers l'hôte victime en mémoire. Dans cet exemple, un TGS pour le service CIFS a été demandé à l'Administrateur, vous pourrez donc accéder à C$:
Abus des différents tickets de service
Apprenez-en plus sur les tickets de service disponibles ici.
Erreurs Kerberos
KDC_ERR_ETYPE_NOTSUPP
: Cela signifie que Kerberos est configuré pour ne pas utiliser DES ou RC4 et que vous fournissez simplement le hachage RC4. Fournissez à Rubeus au moins le hachage AES256 (ou fournissez simplement les hachages rc4, aes128 et aes256). Exemple :[Rubeus.Program]::MainString("s4u /user:FAKECOMPUTER /aes256:CC648CF0F809EE1AA25C52E963AC0487E87AC32B1F71ACC5304C73BF566268DA /aes128:5FC3D06ED6E8EA2C9BB9CC301EA37AD4 /rc4:EF266C6B963C0BB683941032008AD47F /impersonateuser:Administrator /msdsspn:CIFS/M3DC.M3C.LOCAL /ptt".split())
KRB_AP_ERR_SKEW
: Cela signifie que l'heure de l'ordinateur actuel est différente de celle du contrôleur de domaine et que Kerberos ne fonctionne pas correctement.preauth_failed
: Cela signifie que le nom d'utilisateur + les hachages donnés ne fonctionnent pas pour se connecter. Vous avez peut-être oublié de mettre le "$" à l'intérieur du nom d'utilisateur lors de la génération des hachages (.\Rubeus.exe hash /password:123456 /user:FAKECOMPUTER$ /domain:domain.local
)KDC_ERR_BADOPTION
: Cela peut signifier :L'utilisateur que vous essayez d'usurper ne peut pas accéder au service désiré (parce que vous ne pouvez pas l'usurper ou parce qu'il n'a pas assez de privilèges)
Le service demandé n'existe pas (si vous demandez un ticket pour winrm mais que winrm n'est pas en cours d'exécution)
Le faux ordinateur créé a perdu ses privilèges sur le serveur vulnérable et vous devez les lui redonner.
Références
Last updated