Active Directory Methodology

Reading time: 34 minutes

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking'i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Basic overview

Active Directory, ağ yöneticilerinin bir ağ içinde domain, users ve objects oluşturup yönetmesini sağlayan temel bir teknolojidir. Ölçeklenebilir şekilde tasarlanmış olup çok sayıda kullanıcıyı yönetilebilir groups ve subgroups içine organize etmeyi ve farklı seviyelerde access rights kontrol etmeyi mümkün kılar.

Active Directory yapısı üç ana katmandan oluşur: domains, trees ve forests. Bir domain, ortak bir veritabanını paylaşan users veya devices gibi nesnelerin koleksiyonunu kapsar. Trees, ortak bir yapıya bağlı domain gruplarıdır ve bir forest, birbirleriyle trust relationships aracılığıyla bağlı birden çok tree koleksiyonunu temsil ederek organizasyon yapısının en üst katmanını oluşturur. Her bir seviyede belirli access ve communication rights atanabilir.

Active Directory içindeki temel kavramlar şunlardır:

  1. Directory – Active Directory nesneleri ile ilgili tüm bilgilerin tutulduğu yer.
  2. Object – Directory içindeki varlıkları ifade eder; örneğin users, groups veya shared folders.
  3. Domain – Directory nesneleri için bir kapsayıcıdır; bir forest içinde birden fazla domain bulunabilir ve her biri kendi nesne koleksiyonunu tutar.
  4. Tree – Ortak bir root domain paylaşan domainlerin gruplandırılması.
  5. Forest – Active Directory’de organizasyon yapısının zirvesi; birden fazla tree’den ve bunlar arasındaki trust relationships’ten oluşur.

Active Directory Domain Services (AD DS), ağ içinde merkezi yönetim ve iletişim için kritik bir dizi hizmeti kapsar. Bu hizmetler şunlardır:

  1. Domain Services – Verilerin merkezi depolanmasını sağlar ve users ile domains arasındaki etkileşimleri, authentication ve search fonksiyonları dahil olmak üzere yönetir.
  2. Certificate Services – Güvenli digital certificates oluşturma, dağıtma ve yönetmeyi denetler.
  3. Lightweight Directory Services – LDAP protokolü aracılığıyla directory-etkin uygulamaları destekler.
  4. Directory Federation Services – Tek oturum açma (single-sign-on) yetenekleri sağlayarak kullanıcıların birden fazla web uygulamasında tek oturumda kimlik doğrulaması yapmasına olanak tanır.
  5. Rights Management – Telif hakkı materyallerinin yetkisiz dağıtımını ve kullanımını kısıtlayarak korunmasına yardımcı olur.
  6. DNS Servicedomain names çözümü için kritik öneme sahiptir.

Daha ayrıntılı bilgi için bakınız: TechTerms - Active Directory Definition

Kerberos Authentication

Bir AD'yi nasıl atacığınızı öğrenmek için Kerberos authentication process'i gerçekten iyi anlamanız gerekir.
Bu sayfayı hâlâ nasıl çalıştığını bilmiyorsanız okuyun.

Cheat Sheet

Hangi komutları kullanarak bir AD'yi enumerate/exploit edebileceğinize hızlıca bakmak için https://wadcoms.github.io/ adresine göz atabilirsiniz.

warning

Kerberos iletişimi eylemler için tam nitelikli alan adı (FQDN) gerektirir. Bir makineye IP adresiyle erişmeye çalışırsanız, NTLM kullanılır ve Kerberos kullanılmaz.

Recon Active Directory (No creds/sessions)

Eğer bir AD ortamına erişiminiz var ama herhangi bir credentials/sessions yoksa, şunları yapabilirsiniz:

  • Pentest the network:
  • Ağı tarayın, makineleri ve açık portları bulun ve zafiyetlerden yararlanmaya veya bu makinelerden kimlik bilgilerini elde etmeye çalışın (örneğin, printers could be very interesting targets).
  • DNS enumere etmek, domain içindeki web, printers, shares, vpn, media gibi kilit sunucular hakkında bilgi verebilir.
  • gobuster dns -d domain.local -t 25 -w /opt/Seclist/Discovery/DNS/subdomain-top2000.txt
  • Daha fazla bilgi için Genel Pentesting Methodology sayfasına bakın.
  • Check for null and Guest access on smb services (modern Windows sürümlerinde bu çalışmayabilir):
  • enum4linux -a -u "" -p "" <DC IP> && enum4linux -a -u "guest" -p "" <DC IP>
  • smbmap -u "" -p "" -P 445 -H <DC IP> && smbmap -u "guest" -p "" -P 445 -H <DC IP>
  • smbclient -U '%' -L //<DC IP> && smbclient -U 'guest%' -L //
  • Bir SMB sunucusunu nasıl enumerate edeceğinize dair daha detaylı bir rehber şurada bulunabilir:

139,445 - Pentesting SMB

  • Enumerate Ldap
  • nmap -n -sV --script "ldap* and not brute" -p 389 <DC IP>
  • LDAP'ı nasıl enumerate edeceğinize dair daha detaylı bir rehber şurada (özellikle anonymous access'a dikkat):

389, 636, 3268, 3269 - Pentesting LDAP

  • Poison the network
  • Responder ile impersonating services yaparak kimlik bilgileri toplayın (../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
  • abusing the relay attack ile hostlara erişin
  • Kötü amaçlı UPnP servisleri açarak kimlik bilgilerini toplayın (evil-S) (../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md)SDP
  • OSINT:
  • İç dokümanlar, sosyal medya, domain içindeki servisler (özellikle web) ve kamuya açık kaynaklardan kullanıcı adları/isimler çıkarın.
  • Eğer şirket çalışanlarının tam isimlerini bulursanız, farklı AD username conventions deneyebilirsiniz (read this). En yaygın konvansiyonlar: NameSurname, Name.Surname, NamSur (her iki isimden 3'er harf), Nam.Sur, NSurname, N.Surname, SurnameName, Surname.Name, SurnameN, Surname.N, 3 random letters and 3 random numbers (abc123).
  • Araçlar:
  • w0Tx/generate-ad-username
  • urbanadventurer/username-anarchy

User enumeration

  • Anonymous SMB/LDAP enum: pentesting SMB ve pentesting LDAP sayfalarına bakın.
  • Kerbrute enum: Geçersiz bir username istendiğinde sunucu Kerberos error kodu KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN ile cevap vererek kullanıcının geçersiz olduğunu belirlememize izin verir. Valid usernames ya bir AS-REP içinde TGT döndürür ya da kullanıcının pre-authentication yapması gerektiğini belirten KRB5KDC_ERR_PREAUTH_REQUIRED hatasını verir.
  • No Authentication against MS-NRPC: Domain controller'larda MS-NRPC (Netlogon) arayüzüne auth-level = 1 (No authentication) kullanarak erişim. Yöntem, MS-NRPC arayüzüne bind ettikten sonra DsrGetDcNameEx2 fonksiyonunu çağırarak herhangi bir credential olmadan kullanıcının veya bilgisayarın var olup olmadığını kontrol eder. Bu tür bir enumerasyonu uygulayan araç NauthNRPC'dir. Araştırma şu adreste bulunabilir: here
bash
./kerbrute_linux_amd64 userenum -d lab.ropnop.com --dc 10.10.10.10 usernames.txt #From https://github.com/ropnop/kerbrute/releases

nmap -p 88 --script=krb5-enum-users --script-args="krb5-enum-users.realm='DOMAIN'" <IP>
Nmap -p 88 --script=krb5-enum-users --script-args krb5-enum-users.realm='<domain>',userdb=/root/Desktop/usernames.txt <IP>

msf> use auxiliary/gather/kerberos_enumusers

crackmapexec smb dominio.es  -u '' -p '' --users | awk '{print $4}' | uniq
python3 nauth.py -t target -u users_file.txt #From https://github.com/sud0Ru/NauthNRPC
  • OWA (Outlook Web Access) Sunucusu

Ağda bu sunuculardan birini bulduysanız, ayrıca bunun üzerinde user enumeration against it gerçekleştirebilirsiniz. Örneğin, MailSniper:

bash
ipmo C:\Tools\MailSniper\MailSniper.ps1
# Get info about the domain
Invoke-DomainHarvestOWA -ExchHostname [ip]
# Enumerate valid users from a list of potential usernames
Invoke-UsernameHarvestOWA -ExchHostname [ip] -Domain [domain] -UserList .\possible-usernames.txt -OutFile valid.txt
# Password spraying
Invoke-PasswordSprayOWA -ExchHostname [ip] -UserList .\valid.txt -Password Summer2021
# Get addresses list from the compromised mail
Get-GlobalAddressList -ExchHostname [ip] -UserName [domain]\[username] -Password Summer2021 -OutFile gal.txt

warning

You can find lists of usernames in this github repo and this one (statistically-likely-usernames).

However, you should have the name of the people working on the company from the recon step you should have performed before this. With the name and surname you could used the script namemash.py to generate potential valid usernames.

Bir veya birkaç kullanıcı adını bilmek

Tamam, geçerli bir kullanıcı adına zaten sahip olduğunuzu biliyorsanız ama şifre yoksa... O zaman deneyin:

  • ASREPRoast: Eğer bir kullanıcı DONT_REQ_PREAUTH özniteliğine sahip değilse o kullanıcı için AS_REP message talep edebilirsiniz; bu mesaj kullanıcı parolasından türetilen bir anahtarla şifrelenmiş bazı veriler içerir.
  • Password Spraying: Bulunan her kullanıcı için en yaygın şifreleri deneyin, belki bazı kullanıcılar zayıf bir şifre kullanıyordur (şifre politikasını unutmayın!).
  • Not: ayrıca kullanıcıların posta sunucularına erişmeye çalışmak için OWA sunucularını da spray edebilirsiniz.

Password Spraying / Brute Force

LLMNR/NBT-NS Poisoning

Bazı challenge hashes elde ederek ağın bazı protokollerini poisoning edip bunları kırabilirsiniz:

Spoofing LLMNR, NBT-NS, mDNS/DNS and WPAD and Relay Attacks

NTLM Relay

If you have managed to enumerate the Active Directory you will have more emails and a better understanding of the network. You might be able to to force NTLM relay attacks to get access to the AD env.

Steal NTLM Creds

If you can access other PCs or shares with the null or guest user you could place files (like a SCF file) that if somehow accessed will trigger an NTLM authentication against you so you can steal the NTLM challenge to crack it:

Places to steal NTLM creds

Kimlik Bilgileri/oturum ile Active Directory'yi keşfetme

Bu aşama için geçerli bir domain hesabının kimlik bilgilerini veya oturumunu ele geçirmiş olmanız gerekir. Eğer bazı geçerli kimlik bilgilerine veya domain kullanıcısı olarak bir shell'e sahipseniz, önceki seçeneklerin diğer kullanıcıları ele geçirmek için hâlâ geçerli olduğunu unutmayın.

Yetkili enumerate işlemine başlamadan önce Kerberos double hop problem'in ne olduğunu bilmelisiniz.

Kerberos Double Hop Problem

Enumeration

Bir hesabı ele geçirmek, tüm domain'i ele geçirmek için büyük bir adımdır, çünkü Active Directory Enumeration'a başlayabileceksiniz:

ASREPRoast hakkında artık her olası savunmasız kullanıcıyı bulabilirsiniz ve Password Spraying ile tüm kullanıcı adlarının bir listesini alıp ele geçirilen hesabın şifresini, boş şifreleri veya umut vadeden yeni şifreleri deneyebilirsiniz.

Windows'tan tüm domain kullanıcı adlarını almak çok kolaydır (net user /domain ,Get-DomainUser or wmic useraccount get name,sid). Linux'ta ise şunu kullanabilirsiniz: GetADUsers.py -all -dc-ip 10.10.10.110 domain.com/username or enum4linux -a -u "user" -p "password" <DC IP>

Even if this Enumeration section looks small this is the most important part of all. Access the links (mainly the one of cmd, powershell, powerview and BloodHound), learn how to enumerate a domain and practice until you feel comfortable. During an assessment, this will be the key moment to find your way to DA or to decide that nothing can be done.

Kerberoast

Kerberoasting, servislerle ilişkilendirilmiş kullanıcı hesapları tarafından kullanılan TGS tickets elde etmeyi ve bunların şifrelemesini—ki bu şifreleme kullanıcı parolalarına dayanır—offline kırmayı içerir.

More about this in:

Kerberoast

Uzaktan bağlantı (RDP, SSH, FTP, Win-RM, etc)

Bazı kimlik bilgilerini elde ettikten sonra herhangi bir makineye erişiminiz olup olmadığını kontrol edebilirsiniz. Bu amaçla, port taramalarınıza göre farklı protokollerle birçok sunucuya bağlanmayı denemek için CrackMapExec kullanabilirsiniz.

Local Privilege Escalation

Eğer normal bir domain kullanıcısı olarak kimlik bilgilerini veya oturumu ele geçirdiyseniz ve bu kullanıcıyla domain içindeki herhangi bir makineye erişiminiz varsa, yerel ayrıcalıkları yükseltmenin ve kimlik bilgilerini toplamaya çalışmanın yollarını aramalısınız. Çünkü sadece yerel administrator ayrıcalıklarıyla diğer kullanıcıların hash'lerini bellekte (LSASS) ve yerelde (SAM) dump edebilirsiniz.

Bu kitapta local privilege escalation in Windows hakkında tam bir sayfa ve bir checklist bulunmaktadır. Ayrıca WinPEAS kullanmayı unutmayın.

Current Session Tickets

Mevcut kullanıcıda beklenmedik kaynaklara erişim izni veren tickets bulmanız çok olasılık dışıdır, ama şunları kontrol edebilirsiniz:

bash
## List all tickets (if not admin, only current user tickets)
.\Rubeus.exe triage
## Dump the interesting one by luid
.\Rubeus.exe dump /service:krbtgt /luid:<luid> /nowrap
[IO.File]::WriteAllBytes("ticket.kirbi", [Convert]::FromBase64String("<BASE64_TICKET>"))

NTLM Relay

Eğer Active Directory'yi enumerate etmeyi başardıysanız daha fazla e-posta ve ağ hakkında daha iyi bir anlayışa sahip olursunuz. NTLM relay attacks** zorlayabiliyor olabilirsiniz.**

Looks for Creds in Computer Shares | SMB Shares

Artık bazı temel kimlik bilgilerine sahipseniz, AD içinde paylaşılan herhangi bir ilginç dosyayı bulup bulamayacağınızı kontrol etmelisiniz. Bunu manuel yapabilirsiniz ama çok sıkıcı ve tekrarlayan bir iştir (ve yüzlerce doküman bulursanız kontrol etmeniz daha da uzun sürer).

Bu araçları öğrenmek için bu linke tıklayın.

Steal NTLM Creds

Eğer diğer PC'lere veya paylaşımlara erişebiliyorsanız, birinin erişmesi durumunda size karşı bir NTLM authentication'ı tetikleyecek dosyalar (ör. bir SCF dosyası) yerleştirebilir ve böylece kırmak için NTLM challenge'ını çalabilirsiniz:

Places to steal NTLM creds

CVE-2021-1675/CVE-2021-34527 PrintNightmare

Bu zafiyet herhangi bir doğrulanmış kullanıcının domain controller'ı ele geçirmesine izin veriyordu.

PrintNightmare

Privilege escalation on Active Directory WITH privileged credentials/session

Aşağıdaki teknikler için normal bir domain user yeterli değildir; bu saldırıları gerçekleştirmek için bazı özel ayrıcalıklar/kimlik bilgilerine ihtiyacınız vardır.

Hash extraction

Umarız AsRepRoast, Password Spraying, Kerberoast, Responder (relay dahil), EvilSSDP, escalating privileges locally gibi yöntemlerle birkaç local admin hesabını compromise etmeyi başarmışsınızdır.
Sonra, şimdi tüm hash'leri bellekten ve yerelden dump etme zamanı.
Hash'leri elde etmenin farklı yolları hakkında bu sayfayı okuyun.

Pass the Hash

Bir kullanıcının hash'ine sahip olduğunuzda, onu taklit etmek için kullanabilirsiniz.
Bu hash'i kullanarak NTLM authentication gerçekleştirecek bir tool kullanmanız gerekir veya yeni bir sessionlogon oluşturup bu hash'i LSASS içine inject ederek, herhangi bir NTLM authentication yapıldığında o hash'in kullanılması sağlanabilir. Son seçenek mimikatz'in yaptığı yöntemdir.
Daha fazla bilgi için bu sayfayı okuyun.

Over Pass the Hash/Pass the Key

Bu saldırı, yaygın olarak kullanılan NTLM üzerinden Pass The Hash'e alternatif olarak kullanıcının NTLM hash'ini kullanıp Kerberos ticket istemeyi hedefler. Bu yüzden NTLM protokolünün devre dışı bırakıldığı ve yalnızca Kerberos'un kimlik doğrulama protokolü olarak izin verildiği ağlarda özellikle faydalı olabilir.

Over Pass the Hash/Pass the Key

Pass the Ticket

Pass The Ticket (PTT) saldırı yönteminde, saldırganlar parola veya hash değerleri yerine bir kullanıcının kimlik doğrulama ticket'ını çalar. Bu çalınan ticket daha sonra kullanıcıyı taklit etmek için kullanılarak ağ içindeki kaynaklara ve servislere yetkisiz erişim sağlar.

Pass the Ticket

Credentials Reuse

Eğer bir local administrator'un hash'ine veya parolasına sahipseniz, bununla diğer PC'lere lokal olarak login olmaya çalışmalısınız.

bash
# Local Auth Spray (once you found some local admin pass or hash)
## --local-auth flag indicate to only try 1 time per machine
crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9cab376ecd08491764a0 | grep +

warning

Bu oldukça gürültülü olduğunu ve LAPS bunun için hafifletebileceğini unutmayın.

Eğer bir kullanıcı MSSQL instancelarına erişim ayrıcalıklarına sahipse, bunu MSSQL hostunda komut çalıştırmak (eğer SA olarak çalışıyorsa), NetNTLM hashini çalmak veya hatta bir relay attack gerçekleştirmek için kullanabilir.
Ayrıca, eğer bir MSSQL instance başka bir MSSQL instance tarafından trusted (database link) ise ve kullanıcı trusted veritabanı üzerinde yetkiye sahipse, trust ilişkisinden faydalanarak diğer instance üzerinde de sorgu çalıştırabilecek. Bu trustlar zincirlenebilir ve bir noktada kullanıcı komut çalıştırabileceği yanlış yapılandırılmış bir veritabanı bulabilir.
Veritabanları arasındaki linkler forest trust'ları boyunca bile çalışır.

MSSQL AD Abuse

IT asset/deployment platforms abuse

Üçüncü taraf envanter ve deployment suite'leri sıklıkla kimlik bilgilerine ve kod yürütmeye güçlü yollar açar. Bakınız:

Sccm Management Point Relay Sql Policy Secrets

Lansweeper Security

Unconstrained Delegation

Eğer herhangi bir Computer object'inde ADS_UF_TRUSTED_FOR_DELEGATION attribute'u bulunuyorsa ve bilgisayar üzerinde domain ayrıcalıklarınız varsa, bilgisayara oturum açan her kullanıcının belleğinden TGT'leri dökebilirsiniz.
Dolayısıyla, eğer bir Domain Admin bilgisayara logon olursa, onun TGT'sini döküp Pass the Ticket kullanarak onu taklit edebilirsiniz.
Constrained delegation sayesinde otomatik olarak bir Print Server'ı bile ele geçirebilirsiniz (umarız DC olmaz).

Unconstrained Delegation

Constrained Delegation

Eğer bir kullanıcı veya computer "Constrained Delegation" için izinliyse, bu kullanıcı bir bilgisayardaki bazı servislere erişmek için herhangi bir kullanıcıyı taklit edebilir.
Buna ek olarak, eğer bu kullanıcı/computer'ın hash'ini ele geçirirseniz, bazı servislere erişmek için herhangi bir kullanıcıyı (hatta domain admin'leri) taklit edebilirsiniz.

Constrained Delegation

Resourced-based Constrain Delegation

Uzak bir bilgisayarın Active Directory objesi üzerinde WRITE ayrıcalığına sahip olmak, yükseltilmiş ayrıcalıklarla kod yürütme elde etmeyi mümkün kılar:

Resource-based Constrained Delegation

Permissions/ACLs Abuse

Kompromize edilmiş kullanıcı bazı domain objeleri üzerinde ilginç ayrıcalıklara sahip olabilir; bu da size daha sonra lateral hareket/yükselme imkanı verebilir.

Abusing Active Directory ACLs/ACEs

Printer Spooler service abuse

Domain içinde Spool service'in dinlediğini keşfetmek, yeni kimlik bilgileri elde etmek ve ayrıcalıkları yükseltmek için kötüye kullanılabilir.

Force NTLM Privileged Authentication

Third party sessions abuse

Eğer diğer kullanıcılar kompromize olmuş makineye erişiyorsa, bellekten kimlik bilgileri toplanabilir ve hatta onların süreçlerine beacon enjekte edilerek onları taklit etmek mümkün olabilir.
Genelde kullanıcılar sisteme RDP ile erişir, bu yüzden üçüncü taraf RDP oturumlarına karşı birkaç saldırının nasıl gerçekleştirileceği burada yer alıyor:

RDP Sessions Abuse

LAPS

LAPS, domain'e bağlı bilgisayarlarda local Administrator parolasının yönetimi için bir sistem sağlar; parolanın rastgele, benzersiz ve sık değiştirildiğinden emin olur. Bu parolalar Active Directory'de saklanır ve erişim yalnızca ACL'lerle yetkilendirilmiş kullanıcılarla kontrol edilir. Bu parolalara erişim için yeterli izinlere sahipseniz, diğer bilgisayarlara pivot yapmak mümkün olur.

LAPS

Certificate Theft

Kompromize olmuş makinadan sertifikaları toplamak, ortam içinde ayrıcalık yükseltme için bir yol olabilir:

AD CS Certificate Theft

Certificate Templates Abuse

Eğer zayıf template'ler yapılandırılmışsa, bunları ayrıcalıkları yükseltmek için kötüye kullanmak mümkün olabilir:

AD CS Domain Escalation

Post-exploitation with high privilege account

Dumping Domain Credentials

Bir kez Domain Admin veya daha iyisi Enterprise Admin ayrıcalıklarını elde ettiğinizde, domain veritabanını (ntds.dit) dökebilirsiniz.

More information about DCSync attack can be found here.

More information about how to steal the NTDS.dit can be found here

Privesc as Persistence

Önceden tartışılan bazı teknikler persistence için kullanılabilir.
Örneğin şunları yapabilirsiniz:

  • Kullanıcıları Kerberoast için savunmasız hale getirmek
bash
Set-DomainObject -Identity <username> -Set @{serviceprincipalname="fake/NOTHING"}r
  • Kullanıcıları ASREPRoast için savunmasız hale getirmek
bash
Set-DomainObject -Identity <username> -XOR @{UserAccountControl=4194304}
  • Bir kullanıcıya DCSync ayrıcalıkları vermek
bash
Add-DomainObjectAcl -TargetIdentity "DC=SUB,DC=DOMAIN,DC=LOCAL" -PrincipalIdentity bfarmer -Rights DCSync

Silver Ticket

Silver Ticket attack, belirli bir hizmet için meşru bir Ticket Granting Service (TGS) ticket'ı oluşturur; bunu örneğin PC account'ın NTLM hashini kullanarak yapar. Bu yöntem hizmet ayrıcalıklarına erişmek için kullanılır.

Silver Ticket

Golden Ticket

Golden Ticket attack, bir saldırganın Active Directory ortamında krbtgt accountının NTLM hashine erişmesiyle ilgilidir. Bu hesap, tüm Ticket Granting Ticket (TGT)'leri imzalamak için kullanıldığından özeldir; TGT'ler AD ağı içinde kimlik doğrulama için gereklidir.

Saldırgan bu hash'i elde ettiğinde, istediği herhangi bir hesap için TGT oluşturabilir (Silver ticket saldırısına benzer şekilde).

Golden Ticket

Diamond Ticket

Bunlar, common golden ticket tespit mekanizmalarını aşacak şekilde sahte olarak üretilmiş golden ticket'lardır.

Diamond Ticket

Certificates Account Persistence

Bir hesabın sertifikalarına sahip olmak veya onları talep edebilmek, kullanıcının hesabında (parolayı değiştirse bile) kalıcı olmak için çok iyi bir yoldur:

AD CS Account Persistence

Certificates Domain Persistence

Sertifikaları kullanarak, domain içinde yüksek ayrıcalıklarla kalıcı olmak da mümkündür:

AD CS Domain Persistence

AdminSDHolder Group

Active Directory'deki AdminSDHolder objesi, privileged grupların (ör. Domain Admins ve Enterprise Admins) güvenliğini sağlamak için bu gruplara standart bir Access Control List (ACL) uygular ve yetkisiz değişiklikleri engeller. Ancak, bu özellik kötüye kullanılabilir; eğer bir saldırgan AdminSDHolder'ın ACL'ini normal bir kullanıcıya tam erişim verecek şekilde değiştirirse, o kullanıcı tüm privileged gruplar üzerinde geniş kontrol kazanır. Bu güvenlik önlemi, yakından izlenmezse istenmeyen erişime yol açabilir.

More information about AdminDSHolder Group here.

DSRM Credentials

Her Domain Controller (DC) içinde bir local administrator hesabı bulunur. Böyle bir makine üzerinde admin hakları elde ederek, local Administrator hash'ini mimikatz kullanarak çıkarabilirsiniz. Ardından bu parolanın kullanılabilmesi için registry üzerinde bir değişiklik yapmanız gerekir; bu sayede local Administrator hesabına uzaktan erişim sağlanabilir.

DSRM Credentials

ACL Persistence

Belirli domain objeleri üzerinde bir kullanıcıya bazı özel izinler verebilir ve bu izinler kullanıcının gelecekte ayrıcalık yükseltmesi yapmasını sağlayabilir.

Abusing Active Directory ACLs/ACEs

Security Descriptors

Security descriptorler, bir objenin üzerindeki izinleri depolamak için kullanılır. Eğer bir objenin security descriptor'unda küçük bir değişiklik yapabilirseniz, o objenin üzerinde üyeliğe gerek olmadan çok ilginç ayrıcalıklar elde edebilirsiniz.

Security Descriptors

Skeleton Key

LSASS'i bellekte değiştirerek evrensel bir parola oluşturun; bu, tüm domain hesaplarına erişim sağlar.

Skeleton Key

Custom SSP

Learn what is a SSP (Security Support Provider) here.
Kendi SSP'nizi oluşturup makineye erişimde kullanılan kimlik bilgilerini plaintext olarak yakalayabilirsiniz.

Custom SSP

DCShadow

Yeni bir Domain Controller kaydeder ve bunu belirli objelere (SIDHistory, SPN'ler...) attribute push etmek için kullanır; yapılan değişikliklerle ilgili log bırakmaz. Bunun için DA ayrıcalıkları ve root domain içinde olmanız gerekir.
Yanlış veri kullanırsanız, oldukça kötü log'lar oluşacağını unutmayın.

DCShadow

LAPS Persistence

Daha önce LAPS parolalarını okuma iznine sahip olduğunuzda ayrıcalıkları nasıl yükseltebileceğinizi tartışmıştık. Ancak bu parolalar aynı zamanda persistence için de kullanılabilir.
Bakınız:

LAPS

Forest Privilege Escalation - Domain Trusts

Microsoft, Forest'u güvenlik sınırı olarak görür. Bu, tek bir domain'in ele geçirilmesinin tüm Forest'in ele geçirilmesine yol açabileceği anlamına gelir.

Basic Information

Bir domain trust, bir domain'deki kullanıcının başka bir domain'deki kaynaklara erişmesini sağlayan bir güvenlik mekanizmasıdır. Temelde iki domain'in kimlik doğrulama sistemleri arasında bir bağlantı oluşturur, böylece kimlik doğrulama doğrulamaları sorunsuzca akabilir. Domainler bir trust kurduğunda, DC'lerinde trust'ın bütünlüğü için önemli olan belirli anahtarlar değiş tokuş edilir ve saklanır.

Tipik bir senaryoda, bir kullanıcı trusted domain'deki bir servise erişmek istiyorsa önce kendi domaininin DC'sinden bir inter-realm TGT talep etmelidir. Bu TGT, her iki domainin üzerinde anlaştığı paylaşılan bir anahtar ile şifrelenmiştir. Kullanıcı sonra bu TGT'yi trusted domain'in DC'sine sunarak bir servis ticket'ı (TGS) alır. Trusted domain'in DC'si inter-realm TGT'yi doğruladığında, servise erişim vermek için bir TGS çıkarır.

Adımlar:

  1. Domain 1'de bir istemci bilgisayar, NTLM hashini kullanarak Domain Controller (DC1)'den bir Ticket Granting Ticket (TGT) talep etmeye başlar.
  2. DC1 istemci başarıyla kimlik doğrulaması yapıldıysa yeni bir TGT verir.
  3. İstemci daha sonra Domain 2 kaynaklarına erişmek için gerekli olan bir inter-realm TGT'yi DC1'den talep eder.
  4. Inter-realm TGT, iki yönlü domain trust'ın bir parçası olarak DC1 ve DC2 arasında paylaşılan bir trust key ile şifrelenir.
  5. İstemci inter-realm TGT'yi Domain 2'nin Domain Controller (DC2)'sine götürür.
  6. DC2, inter-realm TGT'yi kendi paylaşılan trust key'iyle doğrular ve geçerliyse istemcinin erişmek istediği Domain 2 içindeki sunucu için bir Ticket Granting Service (TGS) verir.
  7. Son olarak, istemci bu TGS'yi sunucuya sunar; TGS sunucunun account hash'i ile şifrelenmiştir ve bu sayede Domain 2'deki hizmete erişim sağlar.

Different trusts

Bir trust'ın tek yönlü veya iki yönlü olabileceğini fark etmek önemlidir. İki yönlü seçimde her iki domain de birbirine güvenir, ancak tek yönlü trust ilişkisinde bir domain trusted diğeri ise trusting olur. Bu durumda, trusted olan domain'den trusting domain içindeki kaynaklara erişebilirsiniz.

Eğer Domain A, Domain B'ye trust veriyorsa, A trusting domain'dir ve B trusted olandır. Ayrıca, Domain A'de bu bir Outbound trust; ve Domain B'de bu bir Inbound trust olur.

Farklı trusting ilişkileri

  • Parent-Child Trusts: Aynı forest içinde yaygın bir kurulumdur; bir child domain otomatik olarak parent domain ile iki yönlü transitif trust'a sahiptir. Bu, kimlik doğrulama isteklerinin parent ve child arasında sorunsuz akabileceği anlamına gelir.
  • Cross-link Trusts: "shortcut trusts" olarak da adlandırılır; child domainler arasında referral süreçlerini hızlandırmak için kurulur. Karmaşık forest'larda kimlik doğrulama referral'ları genellikle forest root'a kadar çıkıp hedef domaine tekrar inmek zorunda kalır; cross-link'ler bu yolu kısaltır ve coğrafi dağıtılmış ortamlarda faydalıdır.
  • External Trusts: Farklı, ilişkili olmayan domain'ler arasında kurulur ve doğası gereği non-transitive'dir. Microsoft'un belgesine göre (https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx), external trust'lar forest dışında kalan ve forest trust ile bağlı olmayan bir domain'deki kaynaklara erişim için kullanışlıdır. Güvenlik, external trust'larla SID filtering ile güçlendirilir.
  • Tree-root Trusts: Forest root domain ile yeni eklenen bir tree root arasında otomatik olarak kurulur. Sıklıkla karşılaşılan bir durum olmamakla birlikte, tree-root trust'lar yeni domain ağaçlarının bir forest'a eklenmesi için önemlidir; onlara benzersiz bir domain adı sunar ve iki yönlü transitiviteyi sağlar. Daha fazla bilgi Microsoft'un rehberinde bulunabilir (https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx).
  • Forest Trusts: İki forest root domain arasında iki yönlü transitif trust'tır; aynı zamanda SID filtering uygular.
  • MIT Trusts: Bu trust'lar, Windows olmayan, RFC4120-uyumlu Kerberos domain'leri ile kurulur. MIT trust'lar daha özelleşmiş olup Windows ekosistemi dışındaki Kerberos tabanlı sistemlerle entegrasyon gerektiren ortamlar için uygundur.

Other differences in trusting relationships

  • Bir trust ilişkisi ayrıca transitive (A B'ye trust veriyorsa, B C'ye trust veriyorsa A C'ye trust verir) veya non-transitive olabilir.
  • Bir trust ilişkisi çift yönlü trust (her iki taraf da birbirine güvenir) veya tek yönlü trust (sadece biri diğerine güvenir) olarak kurulabilir.

Attack Path

  1. Trusting ilişkilerini enumerate edin
  2. Hangi security principal(user/group/computer)'un diğer domainin kaynaklarına erişimi olup olmadığını kontrol edin; belki ACE girdileriyle veya diğer domain'in gruplarında yer alarak. Domainler arası ilişkileri arayın (trust mu bu amaçla oluşturulmuş olabilir).
  3. Bu durumda kerberoast başka bir seçenek olabilir.
  4. Pivot yapabilecek hesapları kompromize edin.

Başka bir domaine kaynaklara erişimi olan saldırganların üç ana mekanizma yoluyla erişimi olabilir:

  • Local Group Membership: Principal'lar makinelerdeki “Administrators” gibi local gruplara eklenmiş olabilir; bu onların o makine üzerinde önemli kontrol elde etmelerini sağlar.
  • Foreign Domain Group Membership: Principal'lar yabancı domain içindeki grupların da üyeleri olabilir. Ancak bu yöntemin etkinliği, trust'ın doğasına ve grubun kapsamına bağlıdır.
  • Access Control Lists (ACLs): Principal'lar bir ACL içinde, özellikle bir DACL içindeki ACE olarak tanımlanmış olabilir ve bu onlara belirli kaynaklara erişim verir. ACL'lerin, DACL'lerin ve ACE'lerin mekaniklerine derinlemesine dalmak isteyenler için “An ACE Up The Sleeve” isimli whitepaper çok değerli bir kaynaktır.

Find external users/groups with permissions

Yabancı security principal'ları bulmak için CN=<user_SID>,CN=ForeignSecurityPrincipals,DC=domain,DC=com kontrol edebilirsiniz. Bunlar dış bir domain/forestten gelen user/group olacaktır.

Bunu Bloodhound'da veya powerview kullanarak kontrol edebilirsiniz:

powershell
# Get users that are i groups outside of the current domain
Get-DomainForeignUser

# Get groups inside a domain with users our
Get-DomainForeignGroupMember

Child-to-Parent forest privilege escalation

bash
# Fro powerview
Get-DomainTrust

SourceName      : sub.domain.local    --> current domain
TargetName      : domain.local        --> foreign domain
TrustType       : WINDOWS_ACTIVE_DIRECTORY
TrustAttributes : WITHIN_FOREST       --> WITHIN_FOREST: Both in the same forest
TrustDirection  : Bidirectional       --> Trust direction (2ways in this case)
WhenCreated     : 2/19/2021 1:28:00 PM
WhenChanged     : 2/19/2021 1:28:00 PM

Etki alanı güvenlerini listelemenin diğer yolları:

bash
# Get DCs
nltest /dsgetdc:<DOMAIN>

# Get all domain trusts
nltest /domain_trusts /all_trusts /v

# Get all trust of a domain
nltest /dclist:sub.domain.local
nltest /server:dc.sub.domain.local /domain_trusts /all_trusts

warning

İki adet trusted key var, biri Child --> Parent ve diğeri Parent --> Child.
Hangi anahtarın mevcut domain tarafından kullanıldığını şu komutlarla görebilirsiniz:

Invoke-Mimikatz -Command '"lsadump::trust /patch"' -ComputerName dc.my.domain.local
Invoke-Mimikatz -Command '"lsadump::dcsync /user:dcorp\mcorp$"'

SID-History Injection

Güveni suistimal ederek SID-History injection ile child/parent domain'e Enterprise admin olarak yükseltme:

SID-History Injection

Exploit writeable Configuration NC

Configuration Naming Context (NC)'nin nasıl suistimal edilebileceğini anlamak kritik öneme sahiptir. Configuration NC, Active Directory (AD) ortamlarında bir forest içindeki konfigürasyon verileri için merkezi bir depo görevi görür. Bu veriler forest içindeki her Domain Controller (DC)'ye replikasyon edilir ve yazılabilir DC'ler Configuration NC'nin yazılabilir bir kopyasını tutar. Bunu suistimal edebilmek için bir DC üzerinde SYSTEM ayrıcalıklarına sahip olmak gerekir; tercihen bir child DC.

Link GPO to root DC site

Configuration NC'nin Sites container'ı, AD forest içindeki tüm domaine bağlı bilgisayarların site bilgilerini içerir. Herhangi bir DC üzerinde SYSTEM ayrıcalıkları ile işlem yaparak, saldırganlar GPO'ları root DC site'larına bağlayabilir. Bu eylem, bu site'lara uygulanan politikaları manipüle ederek root domain'i potansiyel olarak tehlikeye atabilir.

Daha derinlemesine bilgi için şu araştırma incelenebilir: Bypassing SID Filtering.

Compromise any gMSA in the forest

Bir saldırı vektörü, domain içindeki ayrıcalıklı gMSA'ları hedeflemeyi içerir. gMSA'ların parolalarını hesaplamak için gerekli olan KDS Root key, Configuration NC içinde saklanır. Herhangi bir DC üzerinde SYSTEM ayrıcalıkları ile KDS Root key'e erişmek ve forest genelindeki herhangi bir gMSA için parolaları hesaplamak mümkündür.

Detaylı analiz ve adım adım rehberlik için bakınız:

Golden Dmsa Gmsa

Tamamlayıcı delegated MSA saldırısı (BadSuccessor – migration attribute'larını suistimal etme):

Badsuccessor Dmsa Migration Abuse

Ek dış araştırma: Golden gMSA Trust Attacks.

Schema change attack

Bu yöntem sabır gerektirir; yeni ayrıcalıklı AD nesnelerinin oluşturulmasını beklemeyi içerir. SYSTEM ayrıcalıkları ile bir saldırgan AD Schema'yı değiştirerek herhangi bir kullanıcıya tüm sınıflar üzerinde tam kontrol verebilir. Bu, yeni oluşturulan AD nesneleri üzerinde yetkisiz erişim ve kontrol ile sonuçlanabilir.

Daha fazla okuma için: Schema Change Trust Attacks.

From DA to EA with ADCS ESC5

ADCS ESC5 zafiyeti, forest içindeki herhangi bir kullanıcı olarak kimlik doğrulama sağlayan bir sertifika şablonu oluşturmak için Public Key Infrastructure (PKI) nesneleri üzerinde kontrol sağlamayı hedefler. PKI nesneleri Configuration NC içinde bulunduğundan, yazılabilir bir child DC'nin ele geçirilmesi ESC5 saldırılarının gerçekleştirilmesini mümkün kılar.

Bununla ilgili daha fazla detayı şurada okuyabilirsiniz: From DA to EA with ESC5. ADCS olmayan senaryolarda saldırgan gerekli bileşenleri kurma imkânına sahiptir; bu konu şu kaynakta tartışılmaktadır: Escalating from Child Domain Admins to Enterprise Admins.

Harici Forest Domain - Tek Yönlü (Inbound) veya çift yönlü

bash
Get-DomainTrust
SourceName      : a.domain.local   --> Current domain
TargetName      : domain.external  --> Destination domain
TrustType       : WINDOWS-ACTIVE_DIRECTORY
TrustAttributes :
TrustDirection  : Inbound          --> Inboud trust
WhenCreated     : 2/19/2021 10:50:56 PM
WhenChanged     : 2/19/2021 10:50:56 PM

Bu senaryoda domain'iniz, dış bir domain tarafından güveniliyor ve size onun üzerinde belirsiz izinler veriliyor. Dış domain üzerinde hangi erişimlere sahip olduğunuzu belirlemek için domain'inizin hangi principals'larının hangi erişimlere sahip olduğunu bulmanız ve ardından bunları suistimal etmeyi denemeniz gerekecek:

External Forest Domain - OneWay (Inbound) or bidirectional

Harici Orman Domain - Tek Yönlü (Giden)

bash
Get-DomainTrust -Domain current.local

SourceName      : current.local   --> Current domain
TargetName      : external.local  --> Destination domain
TrustType       : WINDOWS_ACTIVE_DIRECTORY
TrustAttributes : FOREST_TRANSITIVE
TrustDirection  : Outbound        --> Outbound trust
WhenCreated     : 2/19/2021 10:15:24 PM
WhenChanged     : 2/19/2021 10:15:24 PM

In this senaryoda domain’iniz farklı bir domain’den bir principal’a bazı privileges veriyor.

Ancak, bir domain is trusted olduğunda, trusting domain tarafından, trusted domain predictable name ile bir user oluşturur ve password olarak trusted password’u kullanır. Bu, trusting domain’deki bir kullanıcıya erişip trusted domain’in içine girerek onu enumerate etmek ve daha fazla ayrıcalık için yükseltme denemesi yapmanın mümkün olduğu anlamına gelir:

External Forest Domain - One-Way (Outbound)

Trusted domain’i ele geçirmenin bir diğer yolu, domain trust’ın opposite direction’ında oluşturulmuş bir SQL trusted link bulmaktır (bu çok yaygın değildir).

Trusted domain’i ele geçirmenin bir diğer yolu da, trusted domain’den bir kullanıcının RDP ile erişebildiği bir makinede beklemektir. Ardından saldırgan RDP session sürecine kod enjekte edebilir ve oradan victim’in origin domain’ine erişebilir.
Ayrıca, eğer victim sabit diskini mount ettiyse, saldırgan RDP session sürecinden hard drive’ın startup klasörüne backdoors koyabilir. Bu teknik RDPInception olarak adlandırılır.

RDP Sessions Abuse

Domain trust abuse mitigation

SID Filtering:

  • SID history attribute’u kullanılarak forest trust’lar üzerinden yapılan saldırı riski, tüm inter-forest trust’larda varsayılan olarak etkin olan SID Filtering ile azaltılır. Bu, Microsoft’un ormandan (forest) ziyade domain’i güvenlik sınırı olarak görme yaklaşımına dayanarak intra-forest trust’ların güvenli olduğu varsayımına dayanmaktadır.
  • Ancak bir sorun vardır: SID Filtering uygulamaları ve kullanıcı erişimini bozabilir, bu yüzden bazen devre dışı bırakılabilir.

Selective Authentication:

  • Inter-forest trust’lar için Selective Authentication kullanmak, iki forest’tan gelen kullanıcıların otomatik olarak authenticate edilmemesini sağlar. Bunun yerine, trusting domain veya forest içindeki domain ve sunuculara erişim için açık izinler gereklidir.
  • Bu önlemlerin writable Configuration Naming Context (NC) veya trust account’a yönelik saldırılara karşı koruma sağlamadığını not etmek önemlidir.

More information about domain trusts in ired.team.

AD -> Azure & Azure -> AD

Page not found - HackTricks Cloud

Bazı Genel Savunmalar

Kimlik bilgilerini nasıl koruyacağınızı buradan öğrenin.

Defensive Measures for Credential Protection

  • Domain Admins Restrictions: Domain Admins sadece Domain Controllers’a giriş yapacak şekilde sınırlandırılmalı; diğer hostlarda kullanılmaları engellenmelidir.
  • Service Account Privileges: Servisler DA (Domain Admin) ayrıcalıkları ile çalıştırılmamalıdır.
  • Temporal Privilege Limitation: DA ayrıcalıkları gerektiren görevler için bu süre sınırlandırılmalıdır. Bu şu şekilde yapılabilir: Add-ADGroupMember -Identity ‘Domain Admins’ -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)

Implementing Deception Techniques

  • Deception uygulamak, password’ları expire olmayan veya Trusted for Delegation olarak işaretlenmiş sahte kullanıcılar ya da bilgisayarlar gibi tuzaklar kurmayı içerir. Ayrıntılı bir yaklaşım, belirli haklara sahip kullanıcılar oluşturmayı veya bunları yüksek ayrıcalıklı gruplara eklemeyi içerir.
  • Pratik bir örnek şu araçları kullanmayı içerir: Create-DecoyUser -UserFirstName user -UserLastName manager-uncommon -Password Pass@123 | DeployUserDeception -UserFlag PasswordNeverExpires -GUID d07da11f-8a3d-42b6-b0aa-76c962be719a -Verbose
  • Deception tekniklerinin dağıtımı hakkında daha fazla bilgi için Deploy-Deception on GitHub bakılabilir.

Identifying Deception

  • For User Objects: Şüpheli göstergeler arasında olağandışı ObjectSID, nadir logon’lar, oluşturulma tarihleri ve düşük bad password sayıları bulunur.
  • General Indicators: Potansiyel decoy nesnelerin özniteliklerini gerçek nesnelerle karşılaştırmak tutarsızlıkları ortaya çıkarabilir. Bu tür deception’ları tespit etmeye yardımcı olmak için HoneypotBuster gibi araçlar kullanılabilir.

Bypassing Detection Systems

  • Microsoft ATA Detection Bypass:
  • User Enumeration: ATA tespitini önlemek için Domain Controllers üzerinde oturum (session) enumerate etmekten kaçınmak.
  • Ticket Impersonation: aes anahtarlarını kullanarak ticket oluşturmak, NTLM’e downgrade etmeyerek tespitten kaçınmaya yardımcı olur.
  • DCSync Attacks: ATA tespiti tetiklenmemesi için DCSync işlemlerinin bir Domain Controller’dan değil, başka bir makinadan yürütülmesi tavsiye edilir; çünkü doğrudan Domain Controller’dan yürütülmesi uyarılara neden olur.

References

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking'i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin