Skip to content

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):

  1. Bir process için EAF/EAF+ etkinleştirilir (orijinalde EMET üzerinden, şimdi Exploit Protection üzerinden).
  2. Monitored export table'ları korunur, böylece read'ler intercept edilir/filtrelenir.
  3. Bir exploit, PEB'i walk eden ve örn. LoadLibrary/GetProcAddress bulmak için kernel32/ntdll EAT'ini okuyan shellcode çalıştırır.
  4. 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.
  5. 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/kernel32 export 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.

References