Active Directory
→Active Directory Nedir?
Active Directory, Microsoft tarafından geliştirilmiştir. Özellikle Windows server ve client bilgisayar sistemleri için tasarlanmış olup içerisinde sunucu, client bilgisayar, kullanıcı ve yazıcı gibi bilgileri tutan bir dizin servisidir. Database gibi düşünülebilir. Group Policy’ler ile merkezi bir şekilde yönetimi sağlanır. Windows Server 2000 ile hayatımıza girmiştir. AD servisi, Doman Controller olarak adlandırılan sunucu veya sunucular üzerinde tutulur. Varsayılan konumu “%systemroot%NTDS”’dir. Veritabanı dosya ismi ntds.dit’tir. LDAP, keberos ile AD’ye giriş yapmaya izin veren yöntemleri vardır. SAM dosyası “%systemroot%\system32\config\SAM” dosya yolunda bulunur. Windows işletim sistemlerinde local kullanıcıların LM ve NTLM parola karmalarını bu SAM dosyasında tutmaktadır.
AD’de yetkili üç grup vardır. Bunlar; administartors, enterprise admins, domain admins. Enterprise admins ve domain admins grupları administratora üyedir ve yetkileri bu gruptan alır. Enterprise admins bir AD grubunda farklı domainleri yönetebilen bir gruptur. Domain admins ise sadece bulunduğu domaini yönetebilen oradaki tüm objeleri değiştirebilen bir gruptur. Aynı zamanda bunlar kendi üyelerine bu yetkileri aktarabilir.
→Active Directory Mantıksal Yapısı Nedir?
- Domain: AD’nin en temel bileşenidir. Sistem yöneticisi tarafından benzersiz bir isim seçilerek oluşturulmalıdır. Eğer sistem yöneticisi ayrıca bir izin belirlememişse, bir kullanıcının hakkı sadece o domain içerisinde geçerli olacaktır. Her bir domainin kendi güvenlik yapısı vardır. Bir domain içerisinde, Active Directory veritabanı kopyalarını bulunduran Domain Controllerlar vardır.
- Organizational Unit: Bir domain içerisindeki kullanıcıları, grupları veya bilgisayarları organize etmek için oluşturulmuş objelere denir. Organizasyonun ihtiyacını karşılamak ve yönetimini kolaylaştırma noktasında objeleri gruplamak için kullanılabilir. “OU=muhasebe” gibi.
- Tree
- Forest
AD ilk sunucuya kurulduktan sonra oluşan yapıya forest denir. Forest birden fazla domain treenin oluşturduğu yapıya denir. Bu forest içindeki kurulan ilk AD domainine de forest root domain adı verilmektedir. Bu çok fazla lokasyonu olan şirketlerde genelde görülür.
→Active Directory Yapısı:
- Domain Component (DC): Firmanın DNS isminin noktalar hariç ayrılmış hali olarak düşünülebilir. Örneğin DNS ismi: sirketadi.local ise dc; dc = havelsan, dc=local
- Organization Unit (OU): Kullanıcının ait olduğu grup. Örneğin ben personel ve pentest grubuna aitsem ou: ou=personel, ou=pentest
- Common Name (CN): Kullanıcı adı soyadı. Bir nesneye verilen isim olarak düşünülebilir. Örneğin bir kullanıcı nesnesi: cn=Sinem Sahin: cn genelde ad soyad içerir.
→Enumeration ve Post Exploitation: Bilgi Toplamak İçin Bakılabilecekler:
Yerel ağda aşağıdaki bilgileri toplamak ileriki safhalar için kolaylık sağlar:
- DNS(Alan Adı)
- NetBIOS Çağrı Adı
- Sunucu ve istemcilerin SMB versiyonları
- Kimlik denetimi olmadan erişilebilen dosya paylaşımları
→NetBIOS Nedir?
Network basic input/output. Yerel ağ üzerindeki farklı bilgisayarların birbirleriyle iletiişim kurmasını sağlayan bir sistemdir. Windows’ta bilgisayarlarımıza verdiğimiz isim NetBIOS ismidir. Aynı ağ üzerindeki bilgisayarların iletişimi NetBIOS isminin “NetBIOS Name Server” üzerinde isim sorgulaması yapılıp hangi IP’ye ait olduğunu öğrenerek ve ağ paylaşımı yapan ilgili bilgisayara yönlendirilerek yapılır.
Nbstat -> Hedef bilgisayarların NetBIOS adlarını tespit eden bir nmap betiğidir.
- sudo nmap -sU — script nbstat.nse -p137 hedefağ/25 gibi makinelerin adlarını görürsün.
CrackMapExec -> Active Directory sızma testlerinin isviçre çakısı olarak nitelendirilen CrackMapExec, bilgi toplama aşamasında hedef bilgisayarların işletim sistemi versiyonu, alan adı ve hostname gibi bilgileri tespit edebilir.
→SMB Nedir?
Ağ iletişim protokolü olan SMB local ağ üzerinde dosya ve yazıcı paylaşımı için geliştirilmiş bir servistir. SMB 139 ve 445 portlarını kullanır. Parolasız paylaşım olarak kullanıldığında ağdaki herkes buna ulaşabilir.
- smbmap -H hedefip -u admin gibi komut ile ilgili paylaşılan dizinlerine bakılabilir.
- crackmapexec smb hedefipbloğu/24 gibi hedef ağı tarar.
- smbclient -U deneme.local/admin -L //hedefip ile de dizin listelenir.
- Metasploit smb_scanner -> metasploitin içinde bulunan auxiliary/scanner/smb/smb_version hedef bilgisayarların desteklediği SMB versiyonlarını, yetkili domainleri tespit eden bir modüldür.
- NMAP port & vuln scan: nmap -sS -sV -p445 — script=”smb-enum*,smb-vuln*” -nR hedefağ/24
DNS yapılandırması olmayan bir ortamda SMB’nin IP çözümlemesi için NETBIOS ya da LLMNR kullanılır.
SMB’nın açıklıklarından ms17–010(EternalBlue) SMBv1 sürümüne ait zafiyettir. Bunun açıklamasını geçtim. Diğer açıklıkları inceleyelim.
→SMBGHOST(CVE-2020–0796) & SMBleed(CVE-2020–1206):
SMB’nin 3.1.1 sürümünde, LZNT1 sıkıştırma algoritmasında bulunan integer overflow ile uzaktan kod yürütmeye olanak sağlayan SMBGHOST zafiyeti sistemin memory alanını bozarak mavi ekran vermesine sebep olmaktadır.
SMBleed zafiyeti ise SMB aracılığıyla memoryden veri okunmasına olanak tanıyan bir zafiyet ve bu ikili birleştiğinde o kadar uyumlu RCE’ye sebep olmaktadır. Çünkü SMBGHOST’un düzgün şekilde exploit edilmesi için memory’de bazı ofset değerlerinin hesaplanması gerekmektedir. SMBGHOST zafiyet var ama SMBleeding zafiyeti yoksa ise privesc için kullanılabilmektedir. Local Admin hesabıyla uzaktan shell aldığınızda içeride “NT Authority / System” olabilmek için ilgili ofset değerlerini hesaplayıp exploitin kaynak kodunda ofset değerleri değiştirilerek yetki yükseltme yapılabilir. Zafiyetin tespiti için ZecOps’un scanner’ini indirip testini yapabilirsiniz.
- https://github.com/ZecOps/SMBGhost-SMBleed-scanner #Mavi Ekran Garantili
- https://github.com/ollypwn/SMBGhost #Sadece SMBGhost zafiyetinin tespiti için Nmap scriptlerine eklediğimizle aynı işi yapıyor
→ZeroLogon(CVE-2020–1472):
AES-CFB8 şifreleme algoritmasında kullanılan insecure yapıdan kaynaklanmaktadır. Domain controller makine parolasını sıfırlayarak DcSync atağına sebep olmaktadır.
- https://github.com/SecuraBV/CVE-2020-1472 #ZeroLogon Scanner tespit etmek için
- ağdaki domain controlleri bulmak için : cme smb hedağ/24 -M get_netdomaincontroller
→LLMNR/NTM-NS POISONING & NTLM\SMB-RELAY Atak:
*LLMNR Poisoning:
Link Local Multicast Name Resolution(LLMNR), DNS alternatifi olarak yerel ağda isim çözümlemesi ve bilgisayar tanımlama amacıyla kullanılan bir protokoldür. LLMNR UDP 5355 ve UDP 137 protları ile gerçekleşir.
Bir bilgisayar bilmediği bir kaynağa erişmek istediği zaman LLMNR protokolü ile yerel ağda yayın (broadcast) yaparak kaynağın kim olduğunu sorar ve ilk cevap veren kaynak ile iletişimini sürdürür.
Saldırganda bu çalışma mantığından yararlanarak yanıltıcı cevap verip istemci bilgisayardan kimlik doğrulama amacıyla NetNTMLv2 hashini talep edebilir. Saldırgan bu hashi brute force ve dictionary attack gibi yöntemlerle parolayı ele geçirebilir.
Saldırıyı gerçekleştirmek için, responder(responder -i eth0) ile LLMNR çağrılarına yanıt verip istemci bilgisayarı yanıltıp kendi bilgisayarımıza NetNTLMv2 hashlerini göndermelerini sağlayıp bu hashleri hashcat(sudo hashcat -m 5600 hash.txt wordlist.txt) aracı ile kırıp parolalar ele geçirilebilir.
→NetNTLMv1/v2 Relay:
Yerel ağda yakalanan NetNTLMv1/v2 hashlerini çözmeye gerek kalmadan Mitm saldırısı gerçekleştirerek ikinci makineye yönlendirebiliriz ve oturum elde ederek komut çalıştırılabilir, SAM veritabanını elde edebilir ve post-exploitation işlemleri gerçekleştirebiliriz. Bu işlemin olması için SMB Signing özelliğinin Off(Kapalı) olması gerekiyor. Bu özelliği kapalı olan makinleri bulmak için:
- CrackMapExec ile cme smb hedefağ/24 — gen-relay-list deneme.txt
- responderın smb ve http sunucularının kapalı olması gerekir.
- sudo ntlmrelayx.py -tf ipdosyası.txt -smb2support -c ipconfig
AD’de kullanılan kimlik doğrulama protokollerinden bazıları: LM, NTLM&NTLMv2. LM: lan manager ilk bu protokol kullanılmış sonra güvensiz olunca yenisi olan ntlm new technology lan manager gelmiş. Bunun da v1 ve 2 si vardır.
Kerberos TCP/IP yi güvenli bulmayınca geliştirilen bir ağ kimlik denetleme protokolüdür. 88/TCP portunda çalışır. KDC(Key Distribution Center) yani anahtar dağıtım merkezidir. Kullanıcıdan alınan kimlik bilgilerini AS(Authentication Service) ile doğrular. TGT(Ticket Granting Ticket) adı verilen bir bilet gönderir. TGT gönderilmeden önce zaman damgası vurulur ve kullanıcının parolası encrypt edilir daha sonra yollanır. Kullanıcı daha sonra bir kaynağa ulaşmak istediğinde aldığı bu bilgiyi KDC’nin içinde bulunan TGS(Ticket Granting Service)’e yollar ve zaman damgasının kontrolü yapılır. Geçerlilik süresi bitmemiş ise TGS kullanıcıya servise ulaşması için bilet yollar.
→AS-REP Roasting:
Kerberos preauth gerektirmeyen kullanıcıları etkileyen bir saldırıdır. Yerel ağa erişimi olan herkes o kullanıcı için AS_REQ gönderebilir ve AS_REP cevabını alabilir. AS_REP cevabının içeriğinde kullanıcının parolası ile oluşturulan anahtar ile şifrelenmiş bir mesaj bulunur. Bu mesajı ele geçiren saldırgan kullanıcı şifresini çevrimdışı olarak kırabilir ve parolayı elde edebilir.
- GetNPUsersçpy -dc-ip hedefip deneme.local/bilgi -format hashcat -outputfile hash
- hacshcat -m 18200 hash rockyou.txt
→Kerberoasting:
AD’de çalışan servisler için TGS biletlerini ele geçirmeyi sağlayan saldırıdır. TGS biletlerinin bir kısmı kullanıcı parolalarından üretilen anahtarla şifrelenir. Bir saldırgan, TGS biletlerini hash formatında ele geçirip bruteforce ve dictionary atack gibi yöntemlerle hashleri kırarak kullanıcı parolalarını elde edebilir. Bu saldırıdan etkilenen kullanıcı bulmak için impacket araçlarından biri olan GetUserSPNs aracı kullanılır:
- GetUserSPNs.py -request -dc-ip hedefip ‘deneme.local/bilgi’ -outputfile kerbhash
- hashcat -m 13100 kerbhash rockyou.txt
→Kerberos BruteForce ile Ağdan Bilgi Toplama:
kerbrute ile ağdan isimler için bruteforce ile bilgi toplanabilir.
- python3 kerbrute.py userenum — dc hedefip -d deneme.local userlist.txt -t 100
→WSUS Saldırıları:
WSUS tüm AD ortamında update işlemlerini merkezi olarak gerçekleştirmeyi sağlar. 2 tane zafiyet var. WSUSPect ve WSUSPendu. WSUSPect için : Buradaki iletişim varsayılan olarak şifresiz olarak gerçekleştirilir. ARP poisoning ile sunucu arasına girip clienta sahte update paketleri gönderebiliyor. Bu sayede saldırgan tüm makinelerde komut çalıştırabilir hale gelebilir. Bunu önlemek için WSUS sunucusunun SSL/TLSini açmak gerekir.
WSUSPendu için: Saldırgan bir şekilde WSUS sunucusuna eriştikten sonra oradaki DB’ye kendi sahte updatelerini yükleyip tüm bilgisayarlara bu updateleri yaymasına denir.
→ACL Exploitation:
Dosya sistemi izinlerine benzer şekilde Active Directory nesnelerinin de izinleri vardır. Bu izinlere Erişim Kontrol Listeleri (ACL)’ler denir. Nesneler üzerinde ayarlanan izinler SDL kullanır. ACL’ler kullanılarak bir backdor oluşturma işlemi gerçekleştirilebilir.
→DCSync:
Normalde var olan bir domain controller ortamına yeni bir domain eklediğimizde replicate işlemi gerçekleşir. Replicate işleminde yeni eklenen domaine var olan domainden kullanıcı bilgileri, DNS kayıtları gibi bilgiler kopyalanır. Saldırgan domain controlleri taklit ederek replicate isteğinde bulunduğunda herhangi bir komut çalıştırmadan bu bilgileri elde etmiş olur. Kısaca ntds.dit dosyasının dumpını almak gibi düşünülebilir. Saldırgan “krbtgt” kerberos hesabının kimlik bilgilerini kullanarak golden ticket alabilir ve sistemde kalıcı hale gelebilir.
- python secretsdump.py domain.com/User:PAss@IP
Domain Admin hesabıyla yapıldığında SAM ve NTDS.dit gelir. Replicating izinleri olan kullanıcı ile yapıldığında NTDS.dit gelir.
→DCShadow:
Bu saldırı ile saldırgan veritabanına kendisi veri ekleyebilir veya değiştirebilir.
→Mimikatz ile lsass.DMP üzerinden Parola ve Hash elde etme:
Sistemde kullanıcı adı ve parolayı girdiğimizde doğrulama işlemi için Windows üzerinde varolan lsass.exe uygulaması devreye girer. LSASS(Local security authority subsystem service) güvenlik politikasını uygulamaktan sorumludur. Girilen verileri SAM ve LDAP dosyasındaki veriler ile karşılaştırır. Karşılaştırma sonucunda doğru ise kullanıcıyı sisteme dahil ederken aynı anda kullanıcıya ait parola bilgisini(NTLM hash ve şifrelenmiş parola) memoryde saklanır. Windows task managerdan lsass.exe sistem hakları ile bu dump file elde edilebilir.
- procdump.exe -ma lsass.exe lsass.dmp
- mimikatz
→Pass the Hash:
Alınan hash değerlerini belirli range ayarlarında ip aralığında koşuşturup bu sistemlerin hangilerine de giriş yapabiliyoruz diye test etmeye denir.
- carckmapexec smb hedefağ/24 -u Administrator -H hashdeğeri — local-auth
→Password Spraying:
Yaygın olarak kullanılan birkaç parolayla çok sayıda hesaba erişmeye çalışan bir saldırı türüdür.
→Sharphound & Bloodhound:
Tarama yapıp blood ile görselleştirip AD hakkında sana bilgi verir. Sızma testi esnasında, Active Directory ortamında güven ilişkileri, ACL, potansiyel saldırı yolları gibi bilgileri kolayca belirlemek için BloodHound’u kullanabiliriz.
→PsExec:
Sistem yöneticileri tarafından uzaktan bağlanıp komut çalıştırmak için kullanılıyordu. Sızma testti esnasında bir siteme sızıp oturum almak içinde kullanılabilir.
- psexec.py DOMAIN/Administrator@ip
→SMBExec:
PsExec’den farklı olarak SMB protokolü üzerinden bağlanıp DCE/RPC aracılığıyla belirtilen cmd.exe komutunu çalıştırıp komutun çıktısını çalıştığı yerel bilgisayarda bir SMB sunucusu açarak iletişim kurma prensibine dayanan bir araçtır.
- smbexec.py DOMAIN/Administrator@hedefip
→Metasploit:
Metasploit içerisinde bulunan exploit/windows/smb/psexec modülü ile yukarıda PsExec modülü gibi oturum alabiliriz. Payloadlarımızı generic/custom olarak belirtip kendi hazırlamış olduğumuz ve AV’ler tarafından tespit edilemeyen bir zararlı yazılım vererek saldırı yapabiliriz.
→rpcclient:
Linux üzerinden Windows sistemlerle etkileşim kurabilmek için kullanılan araçtır.
- rpcclient -U sinem.sahin hedefip
→enum4linux:
Windows ve Samba sistemler hakkında bilgi tespiti için kullanılan araçtır. Bu araç rpcclient, net, nmblookup ve smbclient araçlarının verdiği bilgileri tek bir çatı altında toplar.
- sudo enum4linux -u sinem.sahin -p parolası -a ipadresi
→Golden Ticket:
Mimikatz ile elde edilen Windows parola ve hash değerleri ile sisteme backdoor oluşturmak için kullanılır. Golden Ticket üretmek için:
- Domain Name
- Domain-SID
- KRBTGT Account Hash
Domain SID’i elde etmek için impacket ‘lookupsid.py’ kullanılabilir.
- python lookupsid.py User:Pass@Domain
KRBTGT Account Hash için;
- cme smb ip -u administrator -p password -m mimikatz -o COMMNAD=’privilege::debug”lsadump::lsa/inject/name:krbtht”’
Tüm bilgiler elde edilince:
- python ticketer.py -nthash <krbtgthash> -domain-sid <sid-id> -domain <domain><username>
Kullanılabilecek Cheat Sheet:
Kaynaklar:
- https://adsecurity.org/?page_id=4031
- https://www.youtube.com/watch?v=-xPmbIHbdJQ
- Kurumsal Ağlarda Active Directory Güvenliği ve Testleri: Windows Active Directory Güvenliği: Tobb-etü:
- https://bendivar.medium.com/active-directory-nedirc806fb61f0be
- https://medium.com/@mhmt.0flaz/active-directory-ortamlar%C4%B1nda-kullan%C4%B1lanprotokoller-neler-b0ef2a07b3a2
- https://medium.com/@mhmt.0flaz/active-directory-sald%C4%B1r%C4%B1-y%C3%BCzeyi-veg%C3%BCvenli%C4%9Fi-part-2-4b97a7795933
Lab Önerileri:
Teşekkürler :)