EDR Savunmalarını İşlevsiz Bırakmak: Direct Syscalls ve User-Land Unhooking Tekniklerinin Davranışsal Tespiti (MITRE T1562.001)
Direct Syscalls ve User-Land Unhooking Tekniklerinin Davranışsal Tespiti
EDR çözümlerinin kullanıcı katmanındaki (User-land) izleme mekanizmalarını tamamen bypass eden ve doğrudan çekirdek katmanıyla (Kernel-land) konuşan Direct Syscalls ve API Unhooking tekniklerini mercek altına alıyoruz. Bu çalışmada, bellek manipülasyonlarını ve sinsi yükleyicileri (Loaders) yakalamak adına Sysmon Event ID 10 (ProcessAccess) and ETW telemetrisi üzerinden Wazuh üzerinde yüksek doğruluklu (high-fidelity) koruyucu kurallar kurgulayacağız.
Özet
Bu çalışma, modern uç nokta koruma (EDR) çözümlerinin en büyük yapısal zafiyetlerinden biri olan kullanıcı katmanı kancalama (User-land Hooking) mekanizmasının gelişmiş tehdit aktörleri tarafından nasıl bypass edildiğini incelemektedir. Saldırganların ntdll.dll bellek alanını manipüle ederek veya sistem çağrı numaralarını (SSN) dinamik olarak yeniden inşa ederek (Hell’s Gate, Halo’s Gate vb.) EDR ajanlarını tamamen kör bırakma süreçleri analiz edilmiştir. Geleneksel API izleme yöntemlerinin bu teknikler karşısında çaresiz kalması nedeniyle, süreç içi bellek anomalilerine ve çağrı geçmişi izlerine (Call Trace) odaklanan davranışsal bir tespit stratejisi geliştirilmiştir. Çalışma kapsamında, kurumsal ortamlarda gürültü yaratmayacak ve derinlemesine bellek denetimi sağlayacak gelişmiş bir Wazuh kural mimarisi kurgulanmıştır.
Giriş: EDR Ajanları Nasıl Kör Edilir?
Sektördeki lider EDR çözümlerinin büyük bir kısmı, kullanıcı katmanında yürütülen şüpheli aktiviteleri (bellek enjeksiyonu, süreç oluşturma, hassas dosya erişimleri) izlemek için API Hooking adı verilen bir yöntem kullanır. Bir uygulama kritik bir Windows API’sini (örneğin VirtualAllocEx veya NtMapViewOfSection) çağırdığında, EDR ajanı ntdll.dll içerisindeki bu fonksiyonun başlangıcına bir yönlendirme kodu (JMP talimatı) yerleştirir. Bu sayede çağrı önce EDR’ın analiz motoruna gider, incelenir ve zararlı bir durum yoksa akışın devam etmesine izin verilir.
Ancak bu mimarinin çok ciddi bir kör noktası vardır: ntdll.dll her sürecin kendi kullanıcı katmanı bellek alanında (User-space) yaşar. Dolayısıyla, süreç üzerinde tam yetkiye sahip olan bir malware, EDR’ın kendi bellek alanına koyduğu kancaları (Hooks) manipüle edebilir veya tamamen aşabilir. Saldırganlar bu zafiyeti sömürmek için iki temel strateji geliştirmiştir:
- User-Land Unhooking: Saldırgan, diskteki temiz ve kancalanmamış
ntdll.dlldosyasını belleğe yeniden okuyarak EDR’ın yerleştirdiği JMP talimatlarının üzerine yazar ve kancaları temizler. - Direct Syscalls: Saldırgan, meşru Windows API’lerini hiç çağırmaz. Bunun yerine, çekirdek katmanına geçişi sağlayan sistem çağrı numaralarını (Syscall SSN) dinamik olarak öğrenir (Hell’s Gate, Halo’s Gate veya Tartarus’s Gate teknikleriyle) ve doğrudan kendi Assembly kod bloğu üzerinden syscall talimatını yürütür. Kanca hiç tetiklenmediği için EDR durumdan tamamen habersiz kalır.
Defansın Kör Noktası ve Telemetri Arayışı
Eğer bir saldırgan EDR kancalarını tamamen bypass ettiyse, kullanıcı katmanındaki standart API izleme loglarımız (User-land API logs) tamamen işlevsiz kalır. Bu aşamada defans ekiplerinin “saldırgan hangi fonksiyonu çağırdı” sorusundan vazgeçip, “sistem üzerinde nasıl bir anomali bıraktı” sorusuna odaklanması gerekir.
Direct Syscalls veya Unhooking operasyonları gerçekleştirilirken, saldırganlar kaçınılmaz olarak bellek alanlarında ve süreç ilişkilerinde izler bırakırlar. Bu izleri yakalamak için iki kritik telemetri kaynağı öne çıkar:
- Event Tracing for Windows (ETW / ETW-TI): Microsoft’un çekirdek katmanında çalışan Microsoft-Windows-Threat-Intelligence sağlayıcısı, saldırganlar kullanıcı katmanındaki tüm kancaları sökse bile, doğrudan kernel katmanında gerçekleşen bellek enjeksiyonlarını ve süreç manipülasyonlarını (örn.
MiReadWriteVirtualMemory) raporlayabilir. Çekirdek katmanındaki telemetri manipüle edilemez. - Sysmon Event ID 10 (ProcessAccess) ve Call Trace Analizi: Bir sürecin (örneğin zararlı bir loader) bir başka sürece (örneğin
lsass.exeveyasvchost.exe) erişim sağlarken arkasında bıraktığı çağrı geçmişi (Call Stack), en zengin tespit yüzeyidir.
# Wazuh İçin Gelişmiş Algılama Mantığı (Detection Logic)
Direct Syscalls kullanan gelişmiş araçlar (mimikatz, havok, cobalt strike yükleyicileri) hedef sürece erişirken meşru dll modüllerini kullanmadıkları için, çağrı geçmişindeki adresler Windows’un meşru ve imzalı kütüphanelerine (örn. kernelbase.dll, ntdll.dll) haritalanamaz. Çağrı geçmişinde unknown veya imzasız/diskte karşılığı olmayan bellek alanlarından (unbacked memory) gelen çağrılar listelenir.
Aşağıdaki iki aşamalı Wazuh kural mimarisi, kurumsal ortamlarda meşru süreçlerin yarattığı gürültüyü (False Positive) süzerek, doğrudan bellek enjeksiyonu ve Direct Syscall şüphelilerini hedef alır:
<group name="windows,sysmon,edr_bypass">
<!-- Kural 100600: Hassas Süreçlere Yönelik Erişim Takibi (Temel Filtre) -->
<rule id="100600" level="3">
<if_sid>61122</if_sid> <!-- Parent Kural: Sysmon Event ID 10 (ProcessAccess) -->
<field name="win.eventdata.targetImage">(?i)\\lsass\.exe|\\svchost\.exe|\\csrss\.exe</field>
<description>Windows: Process access request to sensitive system binary.</description>
</rule>
<!-- Kural 100601: Call Trace Anomalisi ile Direct Syscall ve Unhooking Tespiti -->
<rule id="100601" level="14">
<if_paragraph>100600</if_paragraph>
<!-- Bellekte diskte karşılığı olmayan (unknown) alanlardan gelen ya da
doğrudan sistem kancalarını bypass etmeye çalışan şüpheli çağrı geçmişi analizi -->
<field name="win.eventdata.callTrace">(?i)UNKNOWN|native|clr\.dll\+0x[a-f0-9]+.*UNKNOWN</field>
<description>Critical Threat - Potential EDR Bypass Detected! Direct Syscall or User-Land Unhooking anomaly inside Call Trace.</description>
<mitre>
<id>T1562.001</id>
<id>T1055</id>
</mitre>
</rule>
</group>
Analiz ve Triage Parametreleri
Bir SOC analistinin ekranına bu kural tetiklendiğinde düşen alarmın doğrulanması (Triage) için incelenmesi gereken kritik veri alanları şu şekildedir:
| Field (Log Alanı) | Analiz Yöntemi ve Tehdit Göstergesi |
|---|---|
win.eventdata.sourceImage |
Çağrıyı başlatan kaynak süreç. Meşru bir sistem süreci mi yoksa geçici dizinden çalışan imzasız bir binary mi? |
win.eventdata.grantedAccess |
İstenen erişim maskesi. Eğer 0x1F0FFF (PROCESS_ALL_ACCESS) veya 0x0010 (PROCESS_VM_READ) gibi yüksek yetkili maskeler içeriyorsa risk çok yüksektir. |
win.eventdata.callTrace |
Çağrı zinciri incelenmelidir. Normal şartlarda tüm adreslerin ntdll.dll+offset veya kernelbase.dll+offset şeklinde bitmesi gerekir. Eğer listenin sonunda veya ortasında UNKNOWN ifadesi yer alıyorsa, bu durum kodun bellekteki korumasız/kayıtsız bir alandan (Shellcode execution veya Direct Syscallstub) yürütüldüğünü kesinleştirir. |
Önemli Çıkarımlar
- Kullanıcı Katmanı Güvenilmezdir: Saldırganların kendi süreç bellekleri üzerindeki tam hakimiyeti nedeniyle, sadece User-land API izlemesine dayanan EDR kuralları gelişmiş saldırılarda tamamen etkisiz kalacaktır.
- Çağrı Geçmişi (Call Trace) En Güçlü Silahtır: Doğrudan sistem çağrıları (Direct Syscalls) kullanıcı katmanındaki fonksiyon çağrı takibini aşsa da, işletim sisteminin süreçler arası geçiş esnasında tuttuğu Call Stack yapısındaki anomalileri (
UNKNOWNmodüller) gizleyemez. - Kernel Seviyesinde Telemetriye Yatırım Yapın: SOC altyapılarında ETW-TI sağlayıcılarının aktif edilmesi ve bu logların SIEM sistemlerine beslenmesi, bypass tekniklerine karşı uzun vadeli tek kalıcı çözümdür.
Sen de yaz, arşivde yerini al
AltaySec Arşiv'e katkı ver — uzmanlığını Türkçe siber güvenlik literatürüne kat.
Yazar Ol