Tatimi WSC tersine mühendislikle nasıl mahvettim
(blog.es3n1n.eu)- Windows Defender'ı devre dışı bırakan bir araç olan defendnot'un, Windows Security Center (WSC) hizmet API'sini doğrudan kullanarak geliştirilme sürecine dair deneyim paylaşımı
- Proje, önceki no-defender projesinin teknik sınırlamalarını ve hukuki sorunlarını aşma sürecinde başladı
- Özel ortamlar (MacBook arm64, uzaktan hata ayıklama, yüksek gecikme) gibi çeşitli engeller altında tersine mühendislik ve hata ayıklama yapıldı
- Defender kayıt atlatma ve süreç doğrulama mekanizması analiz edildi; çok sayıda başarısızlık ve denemeden sonra daha kararlı çalışacak şekilde iyileştirildi
- Son olarak otomatik çalıştırma özelliği de tamamlandı ve aynı zamanda proje sürecinde zorlayıcı olan noktalar geriye dönüp anlatıldı
Giriş
- Windows Defender'ı devre dışı bırakan defendnot aracını hayata geçirme yolculuğuna dair bir deneyim paylaşımı
- Ayrıntılı teknik detaylardan çok, gerçek ortamda yaşanan sorunlar ve debelenme deneyimleri etrafında düzenlendi
- Resmî dokümantasyon ve teknik açıklamaların daha sonra ayrıca paylaşılması planlanıyor
1 yıl öncesine dönüş
- Yaklaşık 1 yıl önce no-defender adlı bir proje yayımlandı; bu proje, Windows Defender'ın WSC API üzerinden devre dışı kalabildiği yapıyı kullanıyordu
- Bu proje, bir antivirüs sağlayıcısının üçüncü taraf koduna başvurarak sistemde başka bir antivirüs kayıtlıymış gibi davranıyordu
- Yayınlandıktan sonra büyük ilgi gördü ve yaklaşık 1.500 Star aldı; ancak ilgili antivirüs şirketinin DMCA kaldırma talebi nedeniyle kaynak kodunun silinmesine ve projenin sonlandırılmasına karar verildi
Projeyi başlatma gerekçesi
- Bu yazı yazılırken yazar şu anda Seul'de bir Airbnb'de kalıyor
- Ana geliştirme ortamı M4Pro MacBook ve gerekli x86 tersine mühendislik cihazını ayrıca yanında getirmemiş
- CTF yarışması ve seyahat programı nedeniyle x86 cihaz olmadan çalışılması gereken bir durum ortaya çıkmış
- no-defender projesinin “normal” bir uygulamasının mümkün olup olmadığı değerlendirilirken, AV'den bağımsız tek başına bir uygulama yapılıp yapılamayacağı araştırılmaya başlanmış
İlk araştırma (1. gün)
- Bir arkadaşının yardımıyla wsc binary'si temin edilerek önceki projeye benzer bir yapıyla WSC kaydının yeniden uygulanması denendi
- WSC'nin COM API'si kullanılarak uygulanmaya çalışıldı ancak Access Denied hatası alındı
- Hatanın nedeni olarak, WSC'nin API çağrısı yapan sürecin imzasını doğrulaması ve kimlik doğrulama yapması tespit edildi
- AV sürecine modül enjekte edilerek kayıt denenince AV'nin başarıyla kaydolduğu görüldü
AV binary'sini değiştirme ve ek deneyler (1. gün)
- İmzalı sistem süreçleri (
cmd.exevb.) üzerinden aracı çalıştırma denemesi yapıldı ancak PPL (Protected Process Light) doğrulamasında başarısız olundu - Daha ayrıntılı disassembly ve izleme yapılmak üzere çalışma geçici olarak durduruldu
Ortam kurulumu (2. gün)
- arm64 MacBook ortamının sınırlamaları nedeniyle x86 Windows hata ayıklaması oldukça zordu
- ABD'de yaşayan bir arkadaşın bilgisayarı uzaktan (Parasec, Anydesk vb.) kullanılarak, yüksek gecikmeli bir ortamda hata ayıklama ve deneyler yapıldı
- Kod derleme ile VM hata ayıklamanın karmaşık biçimde iç içe geçtiği süreçte yavaşlama ve kafa karışıklığı yaşandı
WSC hizmetinde hata ayıklama (2. gün)
- WSC hizmetinin, svchost tarafından çalıştırılan bir DLL yapısında olduğu doğrulandı
- PPL korumasını kaldırmak için özel bir sürücüyle bypass uygulanarak hata ayıklayıcıyla fonksiyona giriş doğrulandı
- Hizmet içinde WinDefend SID token kontrolü yapıldığı anlaşıldı
- WinDefend SID'sine sahip bir süreci taklit ederek kimlik doğrulama sürecini aşmaya yönelik bir teori kuruldu
WinDefend SID taklidi (2. gün)
- Windows token yapısı ve çalışma mantığı üzerine ek öğrenme yapıldı
- WinDefend SID taklit kodu uygulanıp çalıştırıldıktan sonra tüm COM çağrılarının SUCCESS döndürdüğü, ancak gerçekte AV kaydının yapılmadığı görüldü
Doğrulama algoritmasının yeniden kurulması (3. gün)
- SID kontrolünün AV binary'sinde gerçekten geçilip geçilmediği dikkatle yeniden analiz edildi
- SID kontrolü geçilmediğinde, hizmetin ayrıca yetki yükseltilmiş durum, binary imzası ve PE'nin DllCharacteristics bayrağı (
ForceIntegrity) gibi unsurları kontrol ettiği görüldü - Bu yapıyı uygulayan fonksiyon yeniden üretildi ve sistemdeki core binary'lere uygulanarak deneyler yapıldı
Taskmgr sürecini kullanma (3. gün)
- Hedef süreç olarak
Taskmgr.exeseçilerek yeniden denendi; ancak isim aktarma sürecindeki hata ve IPC bug'ı nedeniyle WSC isteği reddetti - Dosya yolu çıkarımı ve AV adının iletilme biçimi iyileştirildikten sonra normal çalıştığı doğrulandı
Kodu toparlama (3. gün)
- Özellikler düzenlendi ve otomatik çalıştırma (autorun) özelliğini uygulama denemesi yapıldı
- Otomatik çalıştırma yönetiminde aralıklı başarısızlıklar yaşandı; nedenini bulmak için kod ve ortam tekrar tekrar gözden geçirildi
Otomatik çalıştırmayı uygulama (4. gün)
- Görev Zamanlayıcı (Task Scheduler) seçeneklerinde, dizüstü bilgisayar AC gücüne bağlı değilken görevin çalışmamasını sağlayan onay kutusunun etkin olmasının neden olduğu doğrulandı
- Bu ayar kapatıldıktan sonra otomatik çalıştırma normal şekilde çalıştı
- Son olarak kod temizliği ve testler yapıldı
Sonuç
- Sınırlı ve rahatsız bir ortamda yapılan tersine mühendislik çalışması psikolojik ve fiziksel olarak oldukça zorlayıcı bir deneyimdi
- Daha ayrıntılı WSC uygulama dokümantasyonunun ileride ayrıca paylaşılması planlanıyor
Teşekkür
- Pindos: Geceleri bilgisayarını vererek hata ayıklamaya yardımcı olan ve odayı ısıtan arkadaş
- MrBruh: Projeyi araştırmaya başlamayı tetikleyen, fikir ve geri bildirim veren çalışma arkadaşı
- Proje süresince iletişimde kalarak destek olan tanıdıklar
- Kimchi'yi sevdiğini itiraf ediyor
- Duvarlarına graffiti bırakan sanatçıya da teşekkür ediyor
1 yorum
Hacker News görüşleri
C:\ProgramData\Microsoft\Windows Defenderklasörünün adını değiştirdikten sonra yerine boş bir dosya oluşturmaktırnetcat.exekullanmaman gerektiğini söyleyen birilerinin seni izlemesinden hoşlanmıyorum