Windows Kernel Exploitation 2 – HEVD Kurulumu

Herkese selamlar,

Windows Kernel Exploitation ile ilgili ilk yazımı uzun bir zaman önce kaleme almıştım. Açıkcası öğrenmeye başladığım zamanlarda hiç vakit kaybetmeden yazıya dökmüştüm. Aradan biraz fazla zaman geçti fakat son haftalar bu konularla ilgiliyim. Bu yazımda sürücü istismarından bir önceki adımı elimden geldiğince basit bir şekilde anlatmaya çalışacağım diyebilirim.

Not olarak şunu belirtmek isterim; ilk yazımdaki test ortamımla ilgili olarak bazı değişmeler meydana geldi. Şuan için main host olarak Mac OS ve Virtualbox üzerinde iki farklı VM kullanıyorum.

Ortam Gereksinimleri – Debugger VM

  • Visual Studio – (2012 versiyonunu kurdum)
  • Windows10SDK (Windbg) – (İlk yazımda mevcut)

Ortam Gereksinimleri – Target (Debugee) VM

İkinci aşamaya başlamadan önce yukarıda yer alan gerekli paketleri her iki makinemize kuruyoruz.

HEVD Kurulumu ve Deneme

Öncelikli olarak bu Ashfaq Ansari adlı bir güvenlik araştırmacısı tarafından oluşturulmuştur. Özellikle Kernel seviyesinde çalışacak araştırmacıların öğrenmelerini ve kendilerini geliştirmeleri amaçlanmış. Kaynak kodlara göz gezdirdiğinizde Buffer Overflow’dan Use After Free gibi daha complex açığı bulunan sürücülerin mevcut olduğunu göreceksinizdir.

Bu kısımda HEVD’i yüklerken Debugger VM ve Target (Debugee) VM’de ayarlamaları nasıl yapılacağına değineceğiz. İlk olarak Debug Strings’i aktif etme daha sonrasında HEVD’s symbols’lerin yüklenmesi olacak

Debug Strings’lerin Aktif Edilmesi

Debugger VM: İlk olarak Windbg’yi çalıştırıp, Debugee VM ile aradaki bağlantıyı kuruyoruz. Daha sonrasında KD komutunu alabilmek için Debugee’yi durdurup, DebugStrings’i aşağıdaki komut ile aktif hale getiriyoruz :

ed nt!Kd_Default_Mask 8

Sonrasında aşağıdaki komut ile Debugee’nin daha fazla çalışmasına izin verebiliriz :

g

HEVD Sürücüleri Ayarlama – Debugee VM

Bu kısımdan sonra HEVD sürücüleri yükleme kısmına gelmiş bulunmaktayız. İlgili paketleri github sayfasından indirebiliriz. Bu kısımda ilgilendiğiniz mimari yapısıyla ilgili olan kısmı (x864 veya x86) seçebilirsiniz. Bunun yanında dosyaları indirdiğinizde secure-vulnerable adlı iki farklı klasör göreceksiniz. Burada vulnerable adlı kısmı kullanacağız.

Bu sürücüleri yüklemek için aşağıda ekran görüntüsü yer alan OSRLoader adlı bir uygulamadan yararlanacağız. Bu uygulama ile sürücüleri sisteme yükleme işlemini sağlamış olacağız. Yukarıdaki işlemlerin tamamını Debugee (Target) VM üzerinde yapıyoruz.

OSRLoader

DriverPath kısmından istismar edilebilecek HEVD.sys adlı dosyamızın path yolunu belirtiyoruz. Service Start kısmınıda Automatic olarak ayarlıyoruz. Son olarak Register Service ve sonrasında da Start Service butonlarını tıklayıp başlatmış oluyoruz.

Yazının başında belirttiğim DebugView adlı bir uygulama daha belirtmiştim. Uygulamayı Administrator haklarıyla birlikte açtıktan sonra, Capture kısmında Capture Kernel kısmını seçmeniz gerekiyor. Tüm ayarlamaları yaptıktan sonra yukarıdaki görüntüyü almanız gerekiyor.

HEVD Sürücüleri Ayarlama – Debugger VM

Debugee ile olan işimiz bitmiştir. Bu kısımda ise Debugger VM’de HEVD paketleriyle birlikte gelen symbol dosyasını burada ayarlamamız gerekiyor. Bu yüzden Break işlemini yapıp, buradaki işlemlerimize devam edebiliriz.

Github’dan indirdiğimiz proje dosyasındaki vulnerable klasöründe HEVD adında bir dosya mevcut. Öncelikle bu dosyayı daha önce Windbg için yüklemiş olduğumuz Symbol dosyamızın içerisine kopyalıyoruz.

Daha sonrasında Windbg komut satırından hangi modüllerin yüklendiğine bakmak için

kd>lm

Fakat bu kısımda arama işlemimizi daha az indirgemek adında filtreler kullanabiliriz.

kd>lm m H*

Buradan sonra çıktılarda HEVD adında bir dosya göreceksiniz. Tıkladıktan sonra ise yukarıdaki çıktıyı göreceksiniz. Browse all global symbols‘a tıkladıktan sonra yüksek bir ihtimal bir hata alacaksınız.

Yukarıdaki resimde gördüğünüz klasör ve path yolunun olmadığı hatada belirtilecek. Bu yüzden yukarıdaki gibi bir klasör yapılanması oluşturup, daha önce symbols klasörüne kopyaladığımız dosyayı buraya da kopyalıyoruz.

Bu işlemi tamamladıktan sonra kd>lm m H* aynı komut ile HEVD sürücüsünü tekrardan yüklemeyi deniyoruz. Tüm herşey doğru yapıldıktan sonra yukarıdaki gibi benzeri bir çıktı ile karşılaşmış olmamız gerekiyor.

Sürücü istismarlarına giriş bir sonraki yazıda olacaktır.