Siber Güvenlik

Domain Admin’e Giden Yol: Sertifika Servisleri Part 2 (ESC4)

Bu yazıma daha önceden başlamış olduğum bir seri olan ve yerel ağ sızma testlerinde sıkça kullandığım bir saldırı senaryosu (ESC4) ile devam edeceğim.

Berkay Vural |

21.12.2023

Sertifika servisleri ile ilgili daha önce yazmış olduğum Domain Admin’e Giden Yol: Sertifika Servisleri Part 1 yazımı inceleyebilir veya Active Directory ile ilgili detaylı bilgi için Certified Pre-Owned yazısına göz atabilirsiniz.

 

Saldırı Senaryosu

 

  1. Etki alanı içerisinde bir kullanıcı hesabı ele geçirilir veya etki alanına bir makine hesabı eklenir.
  2. Ele geçirilen kullanıcı hesabının sertifika şablonu üzerinde yazma yetkisi bulunur.
  3. Yetkinin bulunduğu sertifika şablonunun özellikleri değiştirilir.
  4. Etki alanı yetkili hesaplar adına sertifika isteği yapılıp elde edilen sertifika ile Domain Controller makinesine erişim sağlanır.

 

Sertifika Şablonlarının Tespiti ve Sömürülmesi

 

İlk adım olarak farklı saldırı senaryoları ile ele geçirilen ve özel bir yetkisi bulunmayan yalnızca “Domain Users” grubunda bulunan kullanıcı ile sertifika şablonları hakkında bilgi toplama işlemi gerçekleştirilir.

 

domain kontrol

 

Ele Geçirilen Kullanıcının Ait Olduğu Grupların Kontrol Edilmesi

 

Kullanıcının ele geçirilememesi durumunda mitm6 saldırısı denenerek etki alanı içerisine makine hesabı eklenmeye çalışılabilir. Eklenecek olan makine hesabı ile de aynı saldırı gerçekleştirilebilir. Mitm6 saldırısı için bağlantıya tıklayarak yazıyı inceleyebilirsiniz.

 

sunucu şablonları

 

Sertifika Sunucusunda Bulunan Şablonların Elde Edilmesi

 

Çıkan sonuç incelendiğinde 1 adet Sertifika Yetkilisi bulunurken 12 adet sertifika şablonu olduğu gözlemlenmiştir. Certipy[1] çıktısı içerisinde bulunan ilgili sertifika şablon bilgileri incelendiğinde şablonlardan bir tanesinde “Authenticated Users” grubunun “Write Dacl”, “Write Property” ve “Write Owner” yetkilerinin olduğu gözlemlenmektedir. Kullanıcıların sahip olduğu bu yetkilerin yanı sıra, zafiyetli şablonun aktif (Enabled) olması, herhangi bir yönetici iznine ihtiyaç duymaması (Manager Approval) ve Private Key Flag olarak herhangi bir özel değer belirlenmemesi ise saldırgan açısında ilgili şablonu hedef haline getirmektedir.

 

Private Key Flag değerinin özel tanımlanmış olması durumunda şablona ait kriptografik değerlerin bozulmaması ve şablonun geçerli olabilmesi adına certipy script’inde bulunan certipy/lib/commands/template.py içerisinde ilgili kısımlar değiştirilmelidir.

 

Python Scripti

 

“certipy/lib/commands/template.py” Python Script’i

 

güvenlik açığı tespiti

 

Zafiyetli Şablonun Tespit Edilmesi

 

Sertifika sunucusu içerisinde görsel olarak görmek adına şablon güvenlik yetkileri kontrol edildiğinde;

 

şablonda yetki değiştirme

 

Ele geçirilmiş olan kullanıcının zafiyetli şablon üzerinde bulunan yetkileri kullanılarak sertifika şablonunda değişiklik yapılıp istenilen ihtiyaca uygun hale getirilebilir. Bu durumda “Authenticated Users” grubuna “enrollment” ve “EnrolleeSuppliesSubject” özelliği verilirse zafiyetli şablon üzerinden herhangi bir kullanıcı adına (tercihen domain admin) sertifika isteği yapılabilecektir.

 

domain admin sertifika isteği

 

Sertifika Şablonunun Özelliklerinin Değiştirilmesi

 

Sertifika şablon yetkileri değiştirilirken dikkat edilmesi gereken bir konu “-save-old” komutudur. Bu komut ile ilgili şablonun orijinal hali json dosyası olarak saldırı makinesinde saklanacaktır. Etki alanı yönetici hesabı ele geçirildikten sonra şablonun eski haline getirilmesi için bu adım büyük öneme sahiptir.

 

Yapılan değişiklikler sonrası şablonlar sertifika sunucusundan tekrar istenilip kontrol edildiğinde zafiyetli şablon (Kch1-ESC4) üzerinde bulunan yetkilerin değiştiği gözlemlenmektedir.

 

sertifika şablonu yetki değişimi

 

Yapılan değişiklik sonrası sertifika sunucusu içerisinden görsel olarak görmek adına şablon güvenlik yetkileri kontrol edildiğinde;

 

şablon güvenlik yetkileri

 

Yetkileri değiştirilmiş sertifika şablonu ile Authenticated Users yani domain içerisinde bulunan herhangi bir kullanıcı veya makine hesabının Full Control ve Enroll yetkisi olduğu görülmektedir. Bu yetkiler ve EnrolleSuppliesSubject özelliğinin birleşmesi ile etki alanı içerisinde bulunan herhangi bir hesap domain admin hesapları “alternatif adı” ile sertifika sunucusundan yetkili kullanıcılar adına sertifika isteyebilecektir.

 

EnrolleSuppliesSubject özelliği herhangi bir sertifika üzerinde bir kullanıcının alternatif isim tanımlamasını sağlar. Bu sayede kullanıcı kendi adına elde etmiş olduğu bir sertifikaya vereceği alternatif domain admin hesabı ile DC üzerinde yetkilendirme yapmaya çalıştığında, sertifikaya sahip kullanıcı adı yerine içerisinde bulunan alternatif isim kullanıcı olarak kabul edilir.

 

alternatif domain admin hesabı

 

Administrator Hesabının Parola Hash Bilgisinin Elde Edilmesi

 

Domain admin hesabına ait sertifika istenip yetkilendirme sağlandığında hesaba ait parola hashi elde edilebilmektedir. Bu aşamadan sonra “krbtgt” hesabına ait parola hashi ele geçirilip süreklilik açısından “golden ticket” saldırısı yapılabilir veya saldırgan kendi domain/enterprise/schema admin hesabını etki alanı içerisine ekleyebilir.

 

administrator parola bilgisi

 

Sertifika Şablonunun Orijinal Haline Döndürülmesi

 

Daha öncesinde bahsedildiği üzere sertifika şablonunu en son hali ile bırakmak sistemi olduğundan daha savunmasız durumda bırakacağı için yapılan bütün değişiklikler geri alınmalıdır. Bu aşamada ise certipy script’i tekrar kullanılabilir.

 

Referanslar 

 

[ 1 ] Certipy — https://github.com/ly4k/Certipy

[ 2 ] SpecterOps — https://posts.specterops.io/certified-pre-owned-d95910965cd2

[ 3 ] Cyberdocs Mitm6 — https://cyberdocs.gitbook.io/cyberdocs/ag- guvenligi/icindekiler/mitm6
 

Berkay Vural |

21.12.2023

Yorumlar