Export Address Filtering (EAF)¶
EAF (ve EAF+), key modüllerin (kernel32, ntdll) export table'larına yapılan read'leri korur; böylece API adreslerini resolve etmek için export'ları walk eden shellcode tespit edilir ve engellenir.
Mechanism¶
Bug class / invariant
Position-independent shellcode'un genellikle import table'ı yoktur; yüklü modüllerin
export table'larını parse ederek API adreslerini runtime'da resolve eder (kernel32.dll/ntdll.dll
bulmak için PEB'i walk eder, ardından onların Export Address Table'ını okur). EAF, bu export
table'larını yalnızca meşru code'un okuyabileceği invariant'ını kurar. EAF-monitored export
directory'lerine hardware debug-register/guard-page tarzı korumalar set eder; code onları
okuduğunda bir filter, okuyan instruction'ın meşru bir modüle ait olup olmadığını kontrol eder.
EAT'i okuyan, bir data buffer'dan çalışan shellcode caller check'inde başarısız olur ve process
sonlandırılır. EAF+ bunu, daha sofistike resolver'ları yakalamak için ek korumalı table'lar,
import-address check'leri ve stack-integrity validation'larıyla genişletir.
Walkthrough¶
Üst seviye, kavramsal (Microsoft'un public belgelerinden):
- Bir process için EAF/EAF+ etkinleştirilir (orijinalde EMET üzerinden, şimdi Exploit Protection üzerinden).
- Monitored export table'ları korunur, böylece read'ler intercept edilir/filtrelenir.
- Bir exploit, PEB'i walk eden ve örn.
LoadLibrary/GetProcAddressbulmak için kernel32/ntdll EAT'ini okuyan shellcode çalıştırır. - EAT read intercept edilir; filter erişimin non-image (shellcode) bellek'ten geldiğini görür ve check'te başarısız olur.
- Process, shellcode resolve edip API çağırmadan önce sonlandırılır.
Warning
EAF bir heuristic'tir; araştırmacılar bypass'lar gösterdi (korunan table'ları okumadan ya da module-backed bir context'ten API resolve etme). Bir garanti değil, defense-in-depth'tir ve en çok DEP/ASLR/CFG ile birlikte faydalıdır.
Detection¶
- EMET/Exploit Protection log'larındaki EAF/EAF+ trigger event'leri shellcode tarzı export walking'e işaret eder — güçlü bir exploitation sinyali.
- EDR: non-image bellek bölgelerinden
ntdll/kernel32export directory'lerine yapılan read'ler.
Mitigation¶
- Yüksek riskli uygulamalar için EAF/EAF+'ı Windows Exploit Protection üzerinden etkinleştir.
- DEP, ASLR, Control Flow Guard ve Arbitrary Code Guard ile katmanla ki shellcode çalışamasın ya da API resolve edemesin.
- Meşru dinamik resolver'ları bozmamak için audit mode'da validate et.