Windows Kernel Exploitation – Lab ortamını kurma ve ilk erişim

Genel Bakış

Bir yandan malware analizleriyle uğraşırken, bu aralar ayrıca Windows Kernel Exploitation konularına yoğunlaşmış –daha doğrusu başlamış- durumundayım. Haliyle böyle olunca başlangıçtaki çıkan problemlerle uğraşmak biraz zaman alıyor. Yazı içerisinde edindiğim deneyimler yer alacak desem yeridir.

İlk deneme Vmware Fusion’da

Malware analizleri için genellikle tercih ettiğim yazılım Vmware Fusion oluyordu ki bu lab içinde bunu kullandım. Açıkcası gerekli ISO dosyalarını kurmak pek zahmetli değildi. Gerekli sanal sürücüleri kurduktan sonra Serial Ports ayarlarını yapmaya gelmişti. Açıkcası benim takıldığım nokta da buydu. Takip ettiğim kaynakta Mac Osx içerisinde yer alan /private/tmp/ yolunu sanal sürücüler üzerinde göstermek zorundaydım. Fakat bu dosyayı Vmware üzerinden ne yaptıysam gösteremedim ki takip ettiğim kaynakta bunu nasıl yaptığını belirtmiyordu.

İkinci Deneme VirtualBox

İkinci deneyimim VirtualBox’ta oldu. İlkinde olduğu gibi iki farklı Windows kurdum ve sıra geldi Serial Ports kısmına. Vmware’e göre Virtualbox’ta Serial Ports kısmını ayarlamak daha kolaydı ki öylede oldu. Debbugger olarak kullandığım Windows10Prox64 sanal sürücümde yüklü olan Windbg’yi açtığımda ummadık bir hata aldım. Çok fazla araştırmama rağmen Windbg’ye çözüm bulamadım ve sanal sürücümü silip tekrardan yüklemek zorunda kaldım.

Daha sonra ise iki sanal makineminde Windows7Prox86 olmasında karar kıldım. Gerekli yüklemeleri yapıp Serial Ports kısmını ayarlamaya geldim. Burada Debugger’daki path yolunu /tmp/pipe olarak belirttikten sonra aynı şeyi hedef makine içinde ayarladım. Hedef makinedeki tek farklı şey ise Connect to existing pipe/Socket seçeneğinin işaretli olmuş olmasıydı. Debugger olarak seçtiğim sanal sürücüm sıkıntısız olarak başlıyordu. Hedef olarak kullandığım diğer sanal sürücüyü başlatmayı denediğimde ise NS_ERROR_FAILURE hatasını aldım. Her nekadar Stackoverflow ve VirtualBox’da konu açıp çözüm bulmaya çalışsam da çabalarım sonuçsuz kaldı.

Üçüncü deneme VirtualBox’ta tek bir fark ile

Soruma cevap beklerken bu süre zarfında farklı iki şey denedim. Birincisi ana host olarak Ubuntu yüklü bir makine oluşturup içerisine VirtualBox kurdum. İki farklı makine oluşturdum fakat sanal sürücüleri başlattığım zaman VT-x hardware acceleration hatası aldım. Bunun için araştırmalar yapmama rağmen sonuç çıkmadı.

İkinci olarak denemem Kali Linux’ta oldu. İlk olarak elimde hazır bulunan ISO dosyasını kullandım ki keşke kullanmasaydım. Güncellemeleri yüklemek hem uzundu hemde yüklerken hatalar aldım. Sonra ISO dosyasının yeni versiyonunu indirip kurdum VB’yi kurmaya çalıştım ama bir türlü olmadı. Yine hüsran yine hüsran!!

Son deneme Vmware Fusion’da

Artık sıkılmıştım gerçekten ki bu sefer çalıştı. Fakat biraz dolaylı bir yoldan oldu. Şimdi nasıl oluşturduğum kısmına geçebiliriz. Bu kısımda:

  • Ana host olarak Mac Osx üzerinde yüklü olarak bulunan Vmware Fuson içerisinde Windows7Prox86 sanal makinesi oluşturdum.
  • Oluşturduğum sanal makineye Virtualbox kurup buradada Windows7Prox86 yüklü iki sanal makine oluşturdum.
  • Debugger sanal sürücüsüne Windows 10 SDK yi yükledim.

Debugger’ı hazır hale getirmek

Debugger olarak belirlediğimiz makineye içerisinde Windbg’ninde yer aldığı Windows 10 SDK’yi yüklüyoruz. Kurulum esnasında kullandığınız makineye göre bazı ek güncelleştirme yada yazılımlar yükleyebiliyorsunuz.

Windbg’yi yükledikten sonra ek olarak Symbols’ı path olarak eklememiz gerekecektir. Normalde aşağıdaki videoda yer aldığı şekilde yaptığımızda Windbg otomatik olarak algılayacaktır.

Variable Name: _NT_SYMBOL_PATH
Variable Value: SRV*C:\Symbols*https://msdl.microsoft.com/download/symbols

Debugee’ı hazır hale getirmek

Debugge’I olarak kullanacağımız sanal makineyi dışarıdan kontrol edebilmek için etkinleştirmemiz gerekiyor. Bunu yaptığımızda makine boot edilirken karşımıza Debugger Enabled seçeneğinide beraberinde gelecek. Bunu yaparken ise bcdedit aracını kullanacağız. İlgili detaylar video da yer almaktadır. Kullandığım komutlar sırasıyla aşağıdadır.

Bcdedit
bcdedit /copy {current} /d “Debug”
bcdedit /debug {MY_GUID} on
bcdedit /dbgsettings

Debugger ve Debuggee arasında bağlantı kurma

Gerekli ayarlamaları yaptıktan sonra iki taraf arasında bağlantı kurmamız gerekiyor. Bu yüzden Virtualbox’a gidip sanal makinelerimizde Serial Ports ayarlarını yapıyoruz. Gerekli ayarları yapıp çalıştırdıktan sonra Debugger pipe oluşturuyor ve debugee’de var olana bağlanıyor. Videoda kullandığım komut aşağıdadır.

\\.\pipe\bu kısma herhangi bir isim yazabilirsiniz
Linux host kullananlar ise aşağıdaki komutu kullanmalıdır:
/tmp/bu kısma herhangi bir isim

Test etme ve Çalıştırma

Tüm ayarları başarıyla gerçekleştirdik ve son olarak çalışıp-çalışmadığını kontrol etmemiz gerekiyor. Debugger makinemizi çalıştırıp, Windbg uygulamasını açıyoruz. Sonraki adımda: File > Kernel Debug Karşımıza gelen sekmeden COM kısmını açıyoruz. Daha sonra tüm ayarların düzgün olduğunu gördükten sonra Ok basıp, çalıştırıyoruz. Pipe bağlantısını görene kadar bekliyoruz, gördükten sonra ise Break işlemini yapacağız.

Gerekli bağlantının olduğunu gördükten sonra şimdi Break işlemini yapabiliriz.

Bu işlemin tamamlanması iki-üç dakika arasında değişebilir. KD komut istemini gördüğümüz zaman, debugee kontrol edebiliyoruz.

Şimdilik bu kadar.