BloodHound, Active Directory ortamına yönelik kırmızı takım çalışmaları için oldukça faydalı ve hem yatayda yayılma hem de yetki yükseltme için kullanılabilecek saldırını yollarını kolayca tespit edebilen bir araçtır. Fakat büyük Active Directory altyapılarda mavi takım veya sistem yöneticisi açısından bakıldığında BloodHound uygulamasını direkt olarak kullanmak zorlaşabilmektedir.

Saldırı yolları ile ilgili en önemli sorun bazen milyonlara varan saldırı yolu arasından öncelikli olarak hangisinin seçilmesi ve giderilmesi gerektiğinin tespitidir. Bazen engellediğimiz bir ilişki (Group Üyeliği, ACE, Oturum vb) binlerce saldırı yolunun Tier0 objelere erişimini engelleyebilmektedir.

Bu blog yazımızda Bloodhound ve ekibimiz tarafından geliştirilen Kangal isimli aracı kullanarak, Active Directory ortamındaki saldırı yollarını nasıl önceliklendireceğimize ve nasıl gidereceğimize dair bir analiz gerçekleştireceğiz.

Bu analizdeki işlemleri iteratif ve sistematik bir şekilde kendi ortamınızda uygulayarak süreç sonunda hem saldırı yolları hem de yetkilendirme açısından oldukça güvenli bir Active Directory ortamına sahip olabilirsiniz. Bu sayede de saldırganların özellikle Ransomware vakalarındaki manevraları olabildiğince kısıtlanacaktır.

Kangal aracını buradan indirebilirsiniz

Kangal ve Combined Attack Paths Yöntemi

Combined Attack Paths olarak adlandırdığımız yöntem aslında Active Directory ortamında Tier0 olarak sınıflandırılan objelere yönelik saldırı yollarının birleştirilerek özet ve hedef odaklı bir hale getirilmesidir. Bu sayede milyonlarca saldırı yolu arasında en riskli ve giderildiğinde en fazla etkiyi oluşturabilecek olan saldırı yollarına/ilişkilere odaklanılabilmektedir.

Kangal ismini verdiğimiz Python betiği Bloodhound ile toplanan veri üzerinde analiz yaparak Combined Attack Paths grafı oluşturmakta ve graftaki grupları skorlamaktadır. Bu skorlara göre de ilişkiler kolaylıkla önceliklendirilebilmektedir.

Sharphound ile Active Directory ortamımızdaki veriyi elde ettikten ve bu veriyi BloodHound aracılığı ile Neo4j veritabanına yükledikten sonra analizimize başlayabiliriz.

BloodHound ile Find Shortest Path to Domain Admins sorgusunu çalıştırdığımızda aşağıdaki gibi bir çıktı elde etmekteyiz. Bu çıktı kırmızı takım tarafından kullanılabilir olsa da mavi takım tarafından kullanılabilirliği oldukça zordur.

Shortest Path to Domain Admins

BloodHound Find Shortest Path to Domain Admins Sorgusu

Shortest Path to High Value Targets sorgusu da benzer bir çıktı vermektedir ve bu çıktıyı BloodHound arayüzü üzerinden incelenmesi büyük ortamlarda zor olabilmektedir.

Shortest Path to High Value Targets

BloodHound Shortest Path to High Value Targets Sorgusu

Son olarak kullandığımız test ortamına ait BloodHound tarafından üretilen istatistikler de aşağıdaki gibidir.

BloodHound Veritabanı İstatistikleri

Analiz Süreci

1. Tier0 Objelerin Belirlenmesi

Bloodhound taraması sonucunda çeşitli objeler (Domain Admins, Administrators vb) highvalue olarak işaretlenmektedir. Fakat BloodHound bu objelerin üyelerini, bu objeleri içeren OU ve etkileyen GPO’ları ayrıca çeşitli grupları yetkisiz olarak işaretlemektedir. Bu nedenle öncelikle aşağıdaki adımlar gerçekleştirilmelidir.

  1. Aşağıdaki Neo4j sorgusu ile highvalue objeler listelenmeli ve incelenmelidir. Eğer bu objeler dışında kurum özelinde önemli/yetkili farklı objeler bulunuyorsa onlar da highvalue olarak işaretlenmelidir. Bu işlem BloodHound arayüzünden veya Neo4j üzerinden gerçekleştirilebilir.
Copy to Clipboard
High Value Objects before process

BloodHound tarafından işaretlenmiş high value objelerin ve obje tiplerinin listelenmesi (9 obje)

  1. İnceleme ve işaretleme aşaması tamamlandıktan sonra aşağıdaki Neo4j sorgusu ile highvalue grupların tüm üyeleri de highvalue olarak işaretlenmelidir.
Copy to Clipboard
  1. Aşağıdaki Neo4j sorgusu ile de highvalue objeleri içerisinde barındıran Container ve OU objeleri aynı şekilde highvalue olarak işaretlenmelidir.
Copy to Clipboard
  1. Aşağıdaki Neo4j sorgusu ile highvalue domain veya OU objelerine linklenmiş Group Policy Objeleri de highvalue olarak işaretlenmelidir.
Copy to Clipboard
  1. Son olarak aşağıdaki Neo4j sorgusu ile highvalue (yani Tier0) olarak işaretlenmiş objeler tekrar listelenmeli ve tekrar gözden geçirilmelidir. Eğer highvalue olarak işaretlenmemesi gereken objeler tespit edilirse, Active Directory ortamından bu objenin yetkileri devre dışı bırakılmalı ve SharpHound taraması tekrarlanmalıdır. Tarama sonucunda da birinci adımdan itibaren tüm adımlar tekrarlanmalıdır.
Copy to Clipboard

Komutlar çalıştırıldıktan sonra high value objelerin ve obje türlerinin listelenmesi (33 obje)

2. Combined Attack Path Ağacının Oluşturulması

Tier0 objeleri belirlendikten sonra Kangal aracı çalıştırılarak Neo4j üzerinde Combined Attack Path yapısı oluşturulabilmektedir. Kangal aracı gerekli paketler yüklendikten sonra aşağıdaki komutla Neo4j kullanıcı adı ve parola bilgileri ile çalıştırılmalıdır.

Copy to Clipboard

Kangal aracının komut satırı üzerinden çalıştırılması

Aracın çalışması tamamlandığında BloodHound arayüzüne aşağıdaki Neo4j sorgusu girilerek oluşan saldırı yolları görülebilmektedir.

Copy to Clipboard

BloodHound arayüzü ile Combined Attack Path ağacının görüntülenmesi

Oluşan ağaç sayesinde ilk başta incelenmesi zor olan veri gruplanarak daha özet bir hale getirilmiş oldu. Bu ağaçtaki saldırı yolları incelendiğinde Tier0’a gelen yolların bazı gruplar altında toplandıkları da kolayca görülebilmekte. Bu ağaç yapısında örnek olarak Tier0 ile Group8 arasındaki bağlantıyı kestiğimizde Group8 altındaki tüm grupların da Tier0’ya ulaşmasını engelleyeceğiz. Bu sayede birkaç işlemle aslında çok büyük bir riski ortadan kaldırmış olacağız.

Saldırı yollarını gidermeye başlamadan önce aşağıdaki sorgu ile Neo4j üzerinde Tier objelerinin risk skorları tespit edilebilmektedir.

Copy to Clipboard

Bu sorgu sonucunda Neo4j veritabanındaki Table sekmesinde aşağıdaki değerler görülecektir.

Değer Açıklama
level Tier objesinin Tier0 objesine olan uzaklığını yani seviyesini göstermektedir.
sum_child_count Tier objesine bağlı toplam kaç adet Tier objesi olduğunu göstermektedir.
members Tier objesinin üyelerine ait objectid değerlerini barındırmaktadır.
name Tier objesinin ismini göstermektedir.
index Tier objesinin bulunduğu seviyede kaçıncı indexte olduğu göstermektedir.
sum_member_count Tier objesinin ve bağlı diğer Tier objelerinin toplam kaç üyesi olduğunu göstermektedir.

Bu değerler içerisinde sum_member_count bizim için oldukça önemlidir. Bu değer, ilgili Tier’ın barındırdığı objelerin Active Directory ortamındaki kaç obje tarafından ele geçirilebileceğini göstermektedir. Örneğin Tier0 için bu değer 2583’tür. Bu da 2583 yetkisiz Active Directory objesinin Tier0 objelerini ele geçirebileceğini göstermektedir. Bu değer de aşağıdaki sorgu ile elde edilebilmektedir.

Copy to Clipboard

Tier0 objesi için sum_member_count değerinin görüntülenmesi

3. Saldırı Yollarının Giderilmesi

Tier0 objeleri üzerindeki risk değerini de tespit ettikten sonra önceliklendirme yaparak saldırı yollarının giderilmesi işlemine başlanmalıdır. Burada önceliklendirme işlemi yine sum_member_count değeri ile gerçekleştirilebilmektedir. Aşağıdaki Neo4j sorgusu ile Tier0 üzerinde yetkisi olan en riskli (en fazla üyeye sahip olan) 5 grup listelenebilmektedir.

Copy to Clipboard

Tier0 üzerindeki en riskli 5 grubun tespit edilmesi

Bu çıktıyı yorumlamak gerekirse; Group8 ile Tier0 arasındaki ilişki bir şekilde kesildiğinde Tier0 üzerindeki 1072 adet saldırı yolu giderilmiş olacaktır.

Bu grupların üyelerini ve bu üyelerin Tier0 üzerinde hangi yetkilere sahip olduğunu tespit etmek için de aşağıdaki Neo4j sorgusu kullanılabilmektedir.

Copy to Clipboard

Tier0 üzerindeki en riskli objeleri ve bu objelerin yetkilerinin tespit edilmesi

Bu çıktıda da görüldüğü gibi SOLOMON_GOFF isimli kullanıcı DC üzerinde ExecuteDCOM yetkisine sahiptir. Bu yetki sayesinde bu obje DC üzerinde komut çalıştırarak admin yetkilerini ele geçirebilmektedir.

Çıktıda ayrıca Enterprise Read-Only Domain Controller grubunun domain objesi üzerinde GetChanges yetkisine sahip olduğu görülmektedir. Bu yetki normal ve varsayılan bir yetkidir. Bu nedenle Enterprise Read-Only Domain Controller grubunun da highvalue olarak işaretlenmesi gerekmektedir. Analiz süreci boyunca bu şekilde yetkili olarak tespit edilen objeler not edilmeli ve bir sonraki iterasyonda highvalue olarak işaretlenmelidir.

Bu listeyi daha kolay analiz edebilmek adına aşağıdaki komutla etkilenen yetkili objelerin listesi elde edilebilmektedir.

Copy to Clipboard

Tier0 üyesi etkilenen objelerin listelenmesi

Yetkili objeler elde edildikten sonra bu objeler üzerindeki yetkiler incelenerek adım adım giderilmelidir.

Örnek olarak fslab.local domain objesinin Security sekmesine gidildiğinde bu obje üzerindeki ACL değerleri görülebilmektedir. Bu değerlerden gereksiz, geniş veya şüpheli olanlar kaldırılmalı veya kısıtlanmalıdır. Bu arayüzde örnek olarak CO-blackgirl-admingroup grubunun domain ve domain altındaki tüm objeler için FullControl(GenericAll) yetkisine sahip olduğu görülmektedir. Bu yetki sadece belirli admin objelerinde bulunması gereken çok geniş bir yetkidir. Bu nedenle bu ve benzer yetkiler kaldırılmalı ve kısıtlanmalıdır.

fslab.local domain objesi üzerindeki tehlikeli Access Control Entry değerlerinin görüntülenmesi

Bir diğer örnekte de DC üzerinde ExecuteDCOM yetkisi olan üç kullanıcı tespit edilmiştir. Bu yetki Distributed COM Users grubu ile aktarılmaktadır. Bu nedenle bu yetkiye ihtiyacı olmayan kullanıcılar bu gruptan çıkarılarak bu yetkilerin de önüne geçilmelidir.

Distributed COM Users grubu üyelerinin görüntülenmesi

Son örneğimizde de BARBARA_CLINE objesi üzerindeki ACL bilgileri görüntülenmektedir. Buradaki önemli nokta ise JO-teamojavi-admingroup grubunun BARBARA_CLINE objesi üzerinde kalıtımsal olarak FullControl(GenericAll) yetkisine sahip olmasıdır. Bu yetki aslında BARBARA_CLINE objesinin üyesi olduğu FSR isimli OU’ya uygulanmış fakat kalıtımsal olarak BARBARA kullanıcısını da etkilemiştir.

Bu nedenle bu ACE değeri BARBARA_CLINE objesinden değil de FSR isimli OU üzerinden kaldırılmalıdır.

Kalıtımsal olarak aktarılan Access Control Entry değerlerinin görüntülenmesi

Sonuç

Bu işlemler tamamlandıktan ve zararlı/tehlikeli ilişkiler temizlendikten sonra ilk aşamadan itibaren analiz süreci tekrarlanmalıdır. İşlemler tamamlandıktan sonra tekrar SharpHound taraması gerçekleştirildiğinde aşağıdaki veritabanı istatistikleri elde edilmiştir.

Analiz sonrası veritabanı istatistiklerin görüntülenmesi

İstatistikler incelendiğinde ilk taramada 82554 olan ilişki sayısı 58198’e, ilk taramada 63710 olan ACL sayısı da 39364’e düşmüştür. Bu istatistiklerden de anlaşılacağı üzere sadece birkaç değişiklikle saldırı yolu sayısı %40 oranında azaltılmıştır. Bu süreç tekrar edildiğinde bu oran daha da yükselecektir.

Ayrıca işlemler gerçekleştirilip tekrar Combined Attack Path ağacı oluşturulduğunda aşağıdaki gibi bir görsel elde edilmektedir. Yine ilk ağaçla karşılaştırıldığında saldırı yollarının azaldığı görülebilmektedir.

Analiz sonrası saldırı yollarının tekrar incelenmesi

Son olarak Tier0 objesi üzerindeki sum_member_count değeri incelendiğinde bu değerin de yarı yarıya düştüğü görülebilmektedir.

Analiz sonrası Tier0 grubuna ait sum_member_count değerinin görüntülenmesi

Analiz sonrası en riskli grupların listelenmesi

Share This Article, Secure Your Friends!