TitanHide Rootkit ile Anti-Debug Önlemlerini Bypass Etme

Merhabalar, blog’u açtığımda ilk olarak Linux sistemler üzerinde stack tabanlı zafiyetler konusuna giriş yapmıştık. Halihazırda onu arka planda hazırlamaya devam ederken, hem kendimi hem de blogu okuyanlarınız varsa devingen tutmak adına çerezlik diyebileceğimiz türden ara bir yazı yazmak istedim. Yazı genel olarak anti-debug önlemlerini aşmak üzere TitanHide gibi rootkitlerden nasıl yararlanabileceğimize odaklanacak.

Ana başlıklarımız:

  • Neden Rootkit Kullanıyoruz? TitanHide Nedir ve Ne İşe Yarar?
  • Doğrudan Kuruluma Geçemiyoruz, PatchGuard Nedir?
  • EFIGuard Kurulum Aşamaları ve VMware Boot Menü Ayarları
  • TitanHide Kurulum Aşamaları ve Ufak Bir Program Üstünde Test

Malumunuzdur reverse engineering ile az-çok haşir neşir olanlar bilir ki bazı programları incelemeye çalışırken; dahi programcılarımızın kendilerinin eklediği ya da kullandıkları packerlar aracılığıyla gelen çeşitli kontroller, biz “kötü niyetli reverserların” amacına ulaşmasını engeller. İşte bunların sanal makine için olanlarına anti-vm, debuggerlar için olanlarınaysa anti-debug teknikleri deniliyor. Özellikle programının beyaz şapkalı (şapka düştü kel göründü) abiler tarafından incelenmesini istemeyen çeşitli VXer veya malware yazarı arkadaşlar bu teknikleri bol bol kullanıyorlar.

Programı debugger’a attınız, F9’a basıp yürütülmesini beklediniz ve beklenmedik şekilde çat diye kapandı. Ya da şu şekilde bir ekran karşınıza çıktı (hapı yuttunuz), bilin ki bahsettiğimiz türden bir önlemle karşı karşıyasınız.

Kaynak: @Xylitol

Kafaya koyan adama aslında bu tarz anti-debugging teknikleri pek sökmez, bir yolunu bulur ve bunları geçip yapacağını yapar. Bu yazıyı okuyorsanız muhtemelen siz de bu türden birisiniz. O halde önünüzde iki yol var.

  • Kontrolün olduğu noktaları bulup, oralarda gereken patchleri yapıp programı yürütmek.
  • Daha üşengeçler için debugger’ınızı veya kullandığınız programı rootkit kullanarak kontrollerden gizlemek.

Neden Rootkit Kullanıyoruz? TitanHide Nedir ve Ne İşe Yarar?

TitanHide, tersine mühendisler için hazırlanmış bir açık kaynaklı rootkit sürücüsü diyebiliriz. Bu sürücü yardımıyla incelediğimiz programların bir debugger üzerinde çalışıp çalışmadığı bilgisini edinebileceği çeşitli NT API’larından dönen değerin farklı olmasını sağlıyoruz. TitanHide bunu SSDT adını verdiğimiz ve sistem çağrılarının bellekte hangi adreslere karşılık geldiğini gösteren bir çeşit tabloyu (bir çeşit internal dispatch table) hook ederek yapar.

Gelen syscall’ların SSDT (KiServiceTable) üzerinde nasıl karşılık geldiğini gösteren bir diyagram. – Kaynak: IRED

Varsayılan olarak aşağıdaki önlemleri TitanHide kullanarak bypass edebilirsiniz. Daha fazlası için açık kaynak kodlu olduğundan hooks.cpp ve GUI arayüzünde gerekli değişiklikleri yapmakta tamamen özgürsünüz. GitHub sayfasında belirtilen özelliklerimiz şunlar:

  • ProcessDebugFlags (NtQueryInformationProcess)
  • ProcessDebugPort (NtQueryInformationProcess)
  • ProcessDebugObjectHandle (NtQueryInformationProcess)
  • DebugObject (NtQueryObject)
  • SystemKernelDebuggerInformation (NtQuerySystemInformation)
  • SystemDebugControl (NtSystemDebugControl)
  • NtClose (STATUS_INVALID_HANDLE/STATUS_HANDLE_NOT_CLOSABLE exceptions)
  • ThreadHideFromDebugger (NtSetInformationThread)
  • Protect DRx (HW BPs) (NtGetContextThread/NtSetContextThread)

Lafı daha fazla uzatmadan bunun nasıl kurulacağına gelelim. TitanHide gibi araçları ana makinede kullanmak oldukça risklidir, kimi durumda işletim sisteminize zarar vermeniz işten bile değildir. Bu nedenle mutlaka sanal makine kullanmanız hem güvenliğiniz hem de sisteminiz açısından oldukça önem arz eder.

Ben bütün adımları Windows 10 Pro x64 ve sanal makine istemcisi olarak VMware üzerinden anlatacağım. Siz de artık hangi işletim sistemini ve sanallaştırma çözümünü tercih ediyorsanız benzer işlemleri ona uygulayarak kurulumu yapabilirsiniz.

Her şeyden önce, sanal makinde kullandığımız sistemin güncellemelerinin de yapılmış olduğundan emin olmakta yarar var diye söylemiş olalım.

Öncelikle GitHub üzerinden TitanHide’ı ve kurulum yapabilmemiz için gereken EFIGuard adındaki bir çeşit UEFI bootkitini edinelim. Neden sürücü kurmak için bir UEFI bootkiti kurmamız gerekiyor (bu nasıl yazı, rootkitler bootkitler havada uçuşuyor) ona da yazı içerisinde değineceğim. Her ikisi de açık kaynaklı olarak geliştirilmiş uygulamalar. Hazır releaselere güvenmezseniz kendiniz talimatlara uygun olarak derleyip kullanmakta özgürsünüz. Ben şu anlık derlemeyle falan uğraşmayacağım, doğrudan kuruluma geçeceğim.

Aşağıdaki GitHub reposuna gidiyoruz ve hazır derlenmiş olarak buradan TitanHide’ı indiriyoruz ve arşivden çıkarıyoruz.

https://github.com/mrexodia/TitanHide

Aynı şekilde EFIGuard’ı da GitHub reposundan indirip arşivden çıkarıyoruz.

https://github.com/Mattiwatti/EfiGuard/

Bu adımlardan sonra hemen kuruluma geçiyy…

Geçemiyoruz. Peki neden?

Doğrudan Kuruluma Geçemiyoruz, PatchGuard Nedir?

Microsoft amca Windows Server 2003 ve Vista ile beraber x64 sistemler için PatchGuard veya “Kernel Patch Protection” adıyla bilinen bir çeşit kernel koruması getirdi. Vista’dan bu yana günden güne daha da geliştirilmeye devam edilen PatchGuard’ın ana amacı, Windows kullanıcılarını yazılımlar tarafından çekirdeğe uygulanabilecek değişikliklerden korumaktı denilebilir. Kernel bildiğiniz gibi bir işletim sistemindeki en önemli bileşen olduğundan, burada yapılacak herhangi bir değişiklik sistemin stabilitesini hem de güvenilirliğini oldukça etkileyebilir. PatchGuard eğer kernel veya kernel bileşeninde modifikasyona uğratılmış herhangi bir nokta tespit ederse bunu BSoD (mavi ekran hatası) vererek engeller ve değişikliğe izin vermez.

Microsoft, bu sayede zaten sıcak bakmadığı kernel patch olayına böylece son verirken aynı zamanda rootkitlerin tabiri caizse elini kolunu kesmiş oldu. Fakat antivirüs programı (aslında bunlar da birer rootkittir) geliştiricileri “kernel patching” yöntemleri kullanarak işletim sisteminin çekirdeğini yamalıyor, bu şekilde antivirüslerin sistemi kontrol edebilmesini sağlıyorlardı. PatchGuard bunu engellediğinden birçok antivirüs geliştiricisi çekirdek yamalama tekniklerinden yararlanmadan koruma sağlayacak şekilde güvenlik yazılımlarını geliştirmek zorunda kaldı.

2005 yılında bir güvenlik araştırmacısı nihayet “Bypassing PatchGuard on Windows x64” adında bir makale yayınlayarak PatchGuard’ı bypass etmenin bir yolunu buldu.

Günümüzdeyse sürekli güncellenen PatchGuard’ı geçebilmek için çok daha güzel ve kalıcı denilebilecek bir yöntem kullanıyoruz. Normal şartlarda PatchGuard ancak sisteme açılışta herhangi bir kernel debugger attach edildiğinde aradan çekilir. EFIGuard tam olarak aynı olmasa da benzer şekilde kernel’a herhangi bir debugger bağlamaya gerek kalmadan sistemin boot aşamasında PatchGuard’ın devreye girmesini engeller. Bu sayede bu beladan kurtulup sürücülerimizle istediğimizi yapabilir hale geliriz.

TitanHide yazının başlarında anlattığımız gibi SSDT gibi değişiklik yapılması engellenen tablolarda çeşitli modifikasyonlar yaparak hedef process’imizin tespit edilmesini engelleyen bir rootkit. Haliyle PatchGuard ve DSE (Driver Signature Enforcement) bypass etmeden kullanmamız durumunda mavi ekranlarla karşılaşmamız oldukça muhtemel.

O halde ilk olarak EFIGuard’ı nasıl kurabileceğinizi anlatmaya başlayalım.

EFIGuard Kurulum Aşamaları ve VMware Boot Menü Ayarları

İndirdiğimiz arşivden ilgili dosyaları çıkartıyoruz. Şu şekilde bir dosya içeriği ile karşılaşmamız gerekiyor. EFIGuard’ı kontrol edebileceğimiz bir EXE ve sistemimize korumaları atlatmak için yerleştirmemiz gereken EFI dosyaları.

Dosyaları sistemimizin EFI bölümüne yerleştirebilmemiz için öncelikle nerede olduğunu bilmemiz ve oraya erişebilmemiz gerekiyor. Komut istemini yönetici olarak çalıştırıp diskpart komutunu kullanıyoruz. Hemen sonrasında list disk ile sistemde yer alan diskleri listeliyoruz. Sanal makinede olduğum için 0 numara üzerinde 1 adet disk gözüküyor. select disk 0 girip seçiyorum ve list partition diyerek sistemde yer alan bölümleri görüntülüyorum.

Sistemi boot edebilmek için gereken EFI dosyaları genellikle (hatta her zaman) System yazan partition üzerinde bulunur. Demek ki bu bölümü seçip erişmemiz gerekiyor. select partition 1 diyerek devam ediyoruz ve assign letter X komutuyla X harifini atayarak geçici süreliğine partition’ı erişilebilir hale getiriyoruz.

X: yazıp enterladığımızda X: içerisine düşüyoruz. dir komutuyla var olan dosyaları listelediğinizde EFI klasörünü görebilirsiniz. Daha sonra yapmamız gereken tek şey, EFIGuard’ın indirdiğimiz ilgili EFI dosyalarını buraya kopyalamak.

xcopy /E /I <EFIGuard-Dosya-Lokasyonunuz>\EFI X:\EFI

X:\EFI\Boot yoluna gidip kontrol ettiğinizde aşağıdaki gibi görüyorsanız doğru şekilde kopyalamışsınız diyebiliriz. Daha sonrasında EfiDSEFix.exe‘yi ise C:’ye kopyalıyoruz.

En sonunda aşağıdaki komutu da bilgisayarı sınama modunda başlatmak için giriyoruz.

bcdedit /set testsigning on

Yukarıdaki işlemleri yaptıktan sonra sanal makinenizi kapatın ve dosyalarının bulunduğu dizine giderek <Sanal-Makinenizin-Adı>.vmx isimli dosyayı herhangi bir metin düzenleyici ile açarak şu dizeleri ekleyin.

İlk parametre sanal makinenizin boot edilmesini 3 saniye geciktirirken, ikincisi bir defaya mahsus olarak sanal makinenizin boot menüden başlamasını sağlar. Bunu yapmamızın nedeni EFIGuard’ın EFI’lerini boot menüye eklemek ve “Windows Boot Manager”dan daha önce başlayacak şekilde birinci sıraya ayarlamak. Aksi halde EFI dosyalarını yukarıda anlattığımız gibi ilgili lokasyonlara kopyalamamızın hiçbir önemi yok, Windows yine normal başlar ve amacımıza ulaşamayız.

bios.bootDelay = ”3000”
bios.forceSetupOnce = ”TRUE”

Kaydettikten sonra sanal makineyi tekrardan başlatalım. Karşımıza aşağıdaki gibi bir “Boot Manager” menüsü gelecek. “Enter Setup” diyerek devam edelim.

Burada “Configure boot options” ile enterlayalım. Zira herhangi bir disk yönetmeyeceğiz veya geçici süreliğine bir dosyadan boot etmeyeceğiz. Amacımız EFIGuard’ı tanıtıp ilk sıraya almak.

“Add boot options” diyoruz.

Karşımıza bir dosya gezgini çıktı. Burada en üstteki NO VOLUME LABEL yazan yeri seçip Enter ile ilerliyoruz. Zaten varsayılan olarak bu şekilde karşınıza gelmeli.

Dosya gezgininde EFI dizini altındaki Boot dizinine geliyoruz ve Loader.efi yazanı seçip enterlıyoruz.

Bizden bu EFI’yi tanımlayacak bir isim girmemizi istiyor. Ben “EFIGuard Loader” yazdım, siz istediğiniz herhangi bir şey yazmakta özgürsünüz. Enter diyip commitleyerek yaptıklarımızı kaydediyoruz.

Bizi tekrardan “Boot Maintenance Manager” ekranına atacak. Ekran görüntüsü kalabalığı olmasın diye aynı şeyleri koymak istemiyorum. Buradan “Change boot order” diyerek ilerlediğinizde karşınıza çıkan ekranda “Enter” dediğinizde şöyle olmalı. Burada + ve – tuşları ile herhangi bir bootloader’ı alta veya üste taşıyabiliyorsunuz.

EFIGuard’ı en üste taşıyalım ve aynı şekilde tekrardan Enter ile çıkalım. Değişikliklerin kaybolmaması için commitlemeyi unutmuyoruz.

Son durumda ekranınız bu şekilde gözüküyor olmalı. Shutdown diyerek sanal makineyi kapatalım ve tekrardan açalım. EFIGuard’ın bootloader’ı başarıyla çalışmalı.

Sanal makineyi çalıştırdığınızda böyle bir ekran görüyorsanız, adımları başarıyla uygulamışsınız demektir. EFIGuard’ın loader’ı şu anda boot ediliyor ve PatchGuard’ı devre dışı bırakmaya çalışıyor.

EFIGuard eğer başarılı olursa “Successfully disabled PatchGuard” yazısını görmeniz ve Windows’un açılmasını beklemeniz gerekiyor.

Eğer işlem başarısız olursa muhtemelen şu şekilde bir hata alacaksınız. Bu durumda bütün adımları doğru şekilde uyguladığınızdan emin olmalısınız. Eğer her şeyi adım adım uygulamanıza rağmen halen aynı hatayı alıyorsanız nispeten daha eski Windows 10 sürümleriyle aynı işlemi deneyin. Yine de anlatımda halihazırda en güncel Windows’u kullandığımı ve herhangi bir hata almadan başarıyla sistemin açıldığını da belirtmiş olayım.

Sistem açıldıktan sonra komut istemini yönetici olarak çalıştırıp C: altındaki EfiDSEFix.exe’yi çalıştırıyoruz. Herhangi bir argüman vermeden çalıştırırsanız nasıl kullanacağınıza dair birtakım bilgiler sunuyor. -h parametresini verdiğimizde DSE’nin başarıyla kapatıldığını söylüyor. -c ile kontrol ettiğimizde arka kapının başarıyla çalıştığını görüyoruz.

TitanHide Kurulum Aşamaları ve Ufak Bir Program Üstünde Test

Artık TitanHide’ı kurup kullanmaya başlayabiliriz. Tek yapmamız gereken arşivden çıkardığımız dosyalara gidip GitHub sayfasında anlatılan adımları uygulamak.

TitanHide.sys sürücüsünü System32 altında yer alan drivers dizinine xcopy ile kopyaladıktan sonra sürücüyü servis olarak kaydedip çalıştırmak için şunları girmemiz yeterli.

sc create TitanHide binPath= %systemroot%\system32\drivers\TitanHide.sys type= kernel
sc start TitanHide

En son kontrol amacıyla sc query TitanHide dediğimizde çalıştığını görüyoruz.

TitanHide doğru bir şekilde kurulduğunda C:\TitanHide.log şeklinde bir dosya oluşturur. Açıp kontrol ettiğimizde rootkitin sistemde aktif olduğunu görebiliriz. Artık tek yapmamız gereken TitanHide GUI aracılığıyla hangi PID’ye sahip processlerin anti-debug önlemlerini bypass edeceğimizi yönetmek.

İsterseniz bunu hemen bir program üzerine uygulamalı şekilde anlatalım.

TitanHide’ın geliştiricisi “mrexodia” tarafından hazırlanan bu ufak “main64” isimli test dosyası (linke tıklayıp ilgili posttan yer aldığı arşivi edinebilirsiniz) herhangi bir debugger altında çalışmadığında ilgili API’ları kontrol ederek 0 değerini dönüyor. Debugger’a atıp baktığımızda ise bazı değerlerin 1 olduğunu ve yürütmenin sekteye uğradığını görüyoruz.

TitanHide GUI üzerinden ilgili PID numarası olan 4904’ü verip tüm tikleri seçerek Hide dediğimde ve debugger üzerinden yürütmeyi devam ettirdiğimde programın sorunsuzca çalıştığını, aynı zamanda yaptığı kontrollerden 0 değerini döndüğünü görebiliriz.

Unhide dediğimizde ise her şey tekrardan eskisine dönüyor ve program debugger’ımızı tespit edebiliyor.

TitanHide anti-debug amacıyla kullanılan her API için bypass imkanı sunmasa da, en çok kontrol edilenlerden bazıları için yerleşik destekle geliyor. Bu noktaları debugger üzerinden tek tek tespit edip, programın anlamasını engellemek için koşullarla boğuşmaktansa böylesi daha kolay.

Yazı yeterince uzun olduğu için değinmesem de, TitanHide’ı kurduktan sonra daha da kolaylık olması bakımından x64dbg ile kullanabileceğiniz pluginleri de mevcut. Zaten TitanHide’ın programcısı aynı zamanda x64dbg gibi bir şaheserin de geliştiricilerinden. Daha fazla kontrolü bypasslamak istiyorsanız yazının başlarında da dediğim gibi rootkit açık kaynaklı, uygun değişiklikleri yapmakta özgürsünüz.

Umarım faydalı olmuştur, sürç-ü lisan ettiysem affola. Merak ettiğiniz bir husus olursa veya hatalı gördüğünüz bir kısım varsa çekinmeden yorumlarda belirtirseniz çok mutlu olurum.

Saygılarımla. – M. Akil Gündoğan (0xr3act0r)

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir