1 puan yazan GN⁺ 2025-05-13 | 1 yorum | WhatsApp'ta paylaş
  • 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.exe vb.) ü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.exe seç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

 
GN⁺ 2025-05-13
Hacker News görüşleri
  • Defender'ı devre dışı bırakmanın en güçlü ama en müdahaleci yollarından biri, canlı bir Linux USB ile açıp C:\ProgramData\Microsoft\Windows Defender klasörünün adını değiştirdikten sonra yerine boş bir dosya oluşturmaktır
    • Grup ilkesi o kadar iyi çalışıyor ki, homelab'da bir denetleyici tutup tüm kullanıcılar için Defender ilkelerini otomatik değiştiren yerel bir alan ortamı kurdum
    • Windows'un böyle bir kurcalamayı tespit eden imzalı manifestlere sahip olmaması tuhaf
    • Popüler bir ürün de fiilen bunu yapıyor ve bir keresinde tüm internetin yaklaşık %25'ini çökertmişti
  • Proje epey gündem oldu ve yaklaşık 1.5k yıldız aldı, ardından kullandığım antivirüsün geliştiricisi bana bir DMCA talebi gönderdi. "Kullandığım antivirüsün" ne olduğunu ve bu kişinin neden DMCA gönderdiğini anlamadım. Muhtemelen yazar başka bir antivirüsü tersine mühendislikle analiz edip bunu açık kaynağa koydu ya da en azından WinDefend'i taklit etmesiyle ilgili bir durum var. Galiba telif hakkı sorunu vardı
    • Benim anladığım kadarıyla, imza gereksinimlerini aşmak için başka bir antivirüs aracının kabuğu kullanılmış. Dönüştürücü olduğu için makul sayılabilir ama (hukuk uzmanı değilim) gri bir alan
    • Evet, mevcut bir antivirüs programının bir kısmını kopyalayarak telif hakkı yasasını ihlal etmiş. Alıntıladığın paragrafın hemen üstünde de, projenin AV'yi WSC'ye kaydettirmek için mevcut antivirüsün üçüncü taraf kodunu kullandığı açıklanıyor
  • Bilgi olsun diye, WSC, Windows Security Center'ın kısaltmasıdır
    • Yardım için teşekkürler. Bir kısaltma ilk geçtiğinde açıklanmaması gerçekten sinir bozucu
  • Bu gerçekten tuhaf: https://github.com/es3n1n/defendnot/… Merak edenler için, gerçekte ne olduğuna burada bakabilirsiniz: https://github.com/es3n1n/defendnot/…
    • CPP büyüsünü iyi açıklayabilen biri, bunun neden tuhaf olduğunu da açıklayabilir mi merak ediyorum
    • Bunun nesi garip, anlamadım. Bu deseni kodda birçok yerde rahatça kullanıyorum. Çağrı tarafında imza biraz farklı gerçi (kişisel tercih). Bu arada D dilinde scope bitince tetiklenen yerleşik sözdizimi var
    • Zaman azlığından tüm COM bileşenleri için RAII desenini tek tek yazmaya üşendim. Bir sonraki güncellemede değiştireceğim
    • "Kod, iş arkadaşlarına nasıl davrandığındır" - Michael Feather Özetle, bu yapay zeka değil Kod, bir nesnenin kapsamı sona erdiğinde bir fonksiyon çağrısını ertelemeye yarıyor. Karmaşık C lambda/anonim fonksiyon tanımı ile benzersiz değişken adı üretimini basitleştirmek için C makroları kullanıyor. Ancak makrolar büyük harfle yazılmadığı ve fonksiyon çağrısı gibi göründüğü için buna alışık olmayanları şaşırtabiliyor. Bazı insanlar için bu desen yeterince faydalı olduğundan deyimsel kabul ediliyor. Teknik açıklamayı diğer yorum bağlantısında bulabilirsiniz
  • Geçen yıl Windows'un sanal masaüstlerini tersine mühendislikle analiz ederek tatilimi harika geçirdim; çok güzel bir anı oldu. Tersine mühendislik gerçekten çok eğlenceli. Mesela Windows RPC içinde belgelenmemiş bir mesajlaşma yöntemi olduğunu öğrendim: https://csandker.io/2022/05/24/Offensive-Windows-IPC-3-ALPC.html
  • Kısa süre önce https://nostarch.com/windows-security-internals kitabını okudum; bu da yazıyı bana daha da yakın hissettirdi. Windows'ta arka planda işlerin nasıl yürüdüğüne dair bir fikrim vardı ama kitabın son bölümü, token'lar ve SID'ler hakkında yazarın anlattığı kadar ayrıntılı bir açıklama sunuyordu
  • İnsanlar neden WSC'yi devre dışı bırakmak istiyor, merak ediyorum
    • Performans, kötü amaçlı yazılım geliştirme ya da hackleme gibi nedenler olabilir
    • Eğer tehdit aktörüyseniz ve başka bir EDR (endpoint detection and response) ürünü kurulu değilse şanslı olabilirsiniz. Ama varsa neredeyse kesin engellenirsiniz. Eğer EDR üreticisiyseniz bu, Windows güvenlik duvarını devre dışı bırakmak için karartılmış bir API çağrısı olarak kullanılabilir. CrowdStrike gibi ürünler de kendi güvenlik duvarını kullanabiliyor veya Windows güvenlik duvarının yerini alabiliyor
    • Tüm antivirüs yazılımları en azından birer powervirus. netcat.exe kullanmaman gerektiğini söyleyen birilerinin seni izlemesinden hoşlanmıyorum
    • Donanım benim, nasıl istersem öyle kullanırım. Sebep bu kadar basit
    • İnsanların neden kendi sistemlerine isteyerek rootkit kurmak istediğini merak ediyorum
  • Bana göre daha da kötü olan, Check Point Harmony'nin Defender için yapılmış arayüzü hiç kullanmaması ve kullanıcılarına bilgi bankası makalesiyle Defender'ı doğrudan devre dışı bırakmalarını söylemesi
  • Merak edenler için: WSC, Windows Security Center'ın kısaltması. Ben de aratmak zorunda kaldım
    • Yazıda "Bütün bunları yöneten şey Windows Security Center-WSC'dir" ifadesi geçiyor
  • "arm64 macbook üzerinde çalıştığım için şu anda arm macbook'ta x86 Windows'u emüle etmenin düzgün bir yolu yok" diyen yazı hakkında, biri UTM'i soruyor ve Parallels'in yakın zamanda Intel VM desteği başlattığını belirtiyor
    • UTM'i denedim ama x86 Windows için kullanılamayacak kadar kötüydü. Komut satırı Linux kabul edilebilir derecede yavaş olabilir ama GUI ortamında kullanılamaz. arm64 Windows gayet iyi çalışıyor ama bu x86 Windows değil, dolayısıyla x86 sistem bileşenlerini tersine mühendislikle incelemek için işe yaramıyor
    • QEMU'nun dynamic recompilation sistemi, Windows'taki ya da macOS'taki (Rosetta 2) yerel sistemler kadar verimli değil. UTM'de x86 Windows çalışıyor ama performansı gerçekten çok kötü. Pratikte, ARM Windows VM içinde Windows'un dinamik yeniden derleyicisiyle x86 uygulamaları çalıştırmak ya da yerel kod tabanlı alt sistemler kullanan WINE daha iyi geliyor. Hızlıca bir şeye bakmak için idare eder olabilir. OP'nin "düzgün" derken performansı da kastettiğini varsayarsak, ne demek istediğini anlıyorum
    • Yanlış biliyorsam düzeltin ama MMU'lu bir CPU'yu emüle etmek temelde yavaş olmak zorunda ve optimize etmesi zor diye biliyorum. Apple'ın Rosetta'sı ve Microsoft'un benzer teknolojileri hızlı çünkü yalnızca kullanıcı alanı kodunu çalıştırıyorlar. Tüm sistemin MMU emülasyonundan kaçınıyorlar