La **Resource-Based Constrained Delegation** (RBCD), ou délégation contrainte basée sur les ressources, a été introduite avec Windows Server 2012. Contrairement à la délégation contrainte traditionnelle, le contrôle est inversé : ce n'est plus le compte qui délègue qui définit la cible, mais la **ressource cible qui définit qui peut déléguer vers elle**.
Cette approche est plus sécurisée en théorie, mais une mauvaise configuration des permissions sur les objets ordinateurs peut permettre à un attaquant de prendre le contrôle de ces derniers.
## Mécanisme
Le fonctionnement de la RBCD repose sur un seul attribut : `msDS-AllowedToActOnBehalfOfOtherIdentity`.
- Cet attribut se trouve sur l'objet de la ressource cible (par exemple, un objet ordinateur).
- Il contient un descripteur de sécurité qui liste les "principals" (comptes utilisateurs ou ordinateurs) autorisés à usurper une identité pour accéder à cette ressource.
Si un attaquant obtient le droit de modifier cet attribut sur un ordinateur cible, il peut s'y ajouter son propre compte (qu'il contrôle) et ainsi obtenir un droit de délégation contrainte sur cette machine.
## Énumération
L'objectif est de trouver des objets ordinateurs sur lesquels on possède des droits d'écriture, notamment `GenericWrite` ou le droit d'écrire la propriété `msDS-AllowedToActOnBehalfOfOtherIdentity`.
### Avec PowerView
```powershell
# Trouver les ordinateurs sur lesquels j'ai des droits de type GenericWrite
Find-DomainObject -Owner 'VOTRE_USER' -SearchBase 'CN=Computers,DC=domaine,DC=local' | Get-DomainObjectAcl -ResolveGUIDs | ?{($_.ActiveDirectoryRights -match 'GenericWrite')}
# Chercher des ACL spécifiques liées à la RBCD
Get-DomainObjectAcl -SamAccountName "OrdinateurCible
quot; -ResolveGUIDs | ?{$_.ObjectAceType -eq '1131f6aa-9c07-11d1-f79f-00c04fc2dcd2'}
```
### Avec le module ActiveDirectory
```powershell
# Lister les ACL d'un objet ordinateur
(Get-Acl "AD:\CN=OrdinateurCible,CN=Computers,DC=domaine,DC=local").Access
```
### BloodHound
BloodHound est l'outil le plus efficace pour visualiser ces chemins d'attaque. Les requêtes intéressantes sont :
- `Find principals with GenericWrite`
- `Find principals with GenericAll`
- `Shortest Paths to High Value Targets`
## Exploitation
Le scénario d'attaque typique est le suivant :
1. L'attaquant a compromis un compte `user_compromis`.
2. L'attaquant découvre qu'il a le droit `GenericWrite` sur un ordinateur `SRV-CIBLE`.
3. L'attaquant a besoin d'un deuxième compte qu'il contrôle. Il peut en créer un s'il y a une `MachineAccountQuota` > 0.
4. Il configure la RBCD sur `SRV-CIBLE` pour autoriser son compte contrôlé à y déléguer.
5. Il exécute l'attaque S4U.
### Créer un compte de machine (si nécessaire)
Si la `MachineAccountQuota` est supérieure à 0, on peut créer un compte machine avec `addcomputer.py` d'Impacket.
```bash
impacket-addcomputer -computer-name 'ATTAQUANT-PC