Skip to content

Import Address Filtering (IAF)

IAF, bir process'in hassas API'lere ait Import Address Table girdilerini korur; böylece shellcode/ROP bunları IAT üzerinden güvenilir biçimde resolve edemez veya hijack edemez.

Mechanism

Security invariant

Güvenlik açısından kritik bir Windows API kümesine yapılan çağrılar, meşru ve doğrulanmış code path'lerden gelmelidir — Import Address Table (IAT) üzerinde gezinen bir shellcode'dan ya da hassas bir çağrıyı yönlendirmek için bir IAT girdisini yeniden yazan koddan değil. IAF, bu korunan API'lere ulaşıldığı anda bir kontrol uygular.

Pek çok exploitation payload'ı kendi import'larına sahip değildir; Windows API'lerini çalışma zamanında, çoğunlukla yüklü bir modülün IAT'ını parse ederek veya GetProcAddress/LdrGetProcedureAddress gibi resolution helper'larını suistimal ederek bulur. Bunun yanında, bir modülün IAT'ına yazabilen bir attacker, hassas bir çağrıyı (örneğin bir loader veya process-creation API'sine yapılan) attacker koduna yönlendirebilir. Aslen bir EMET mitigation'ı (emet.md) olan ve artık Windows Exploit Protection'ın parçası olan IAF, bu davranışların her ikisini de hedefler.

Implementation guard-page tabanlıdır: korunan API'leri barındıran memory page'leri PAGE_GUARD olarak işaretlenir. Bunlara yapılan herhangi bir erişim bir STATUS_GUARD_PAGE_VIOLATION doğurur. Mitigation'ın handler'ı fault'a yol açan instruction/context'i inceler ve eğer doğrulamayı geçmezse (örneğin erişim deseni normal bir çağrıdan çok IAT'ta gezinen shellcode'a benziyorsa) process sonlandırılır. Bu, aynı guard-page fikrini ntdll/kernel32'nin export table'larına uygulayan Export Address Filtering'in (export-address-filtering.md) yakın bir akrabasıdır.

Walkthrough

Conceptual operation

  • Exploit Protection bir process için IAF'i etkinleştirir; korunan API page'leri PAGE_GUARD alır.
  • Kod bu page'lerden birine dokunduğunda, CPU STATUS_GUARD_PAGE_VIOLATION ile fault verir.
  • IAF handler'ı çağrıyı yapan instruction/caller'ı doğrular. Meşru, derlenmiş bir çağrı geçer ve yürütme devam eder (guard yeniden kurulur); API'yi resolve etmek için IAT'ı tarayan veya dereference eden shellcode doğrulamayı geçemez.
  • Doğrulama başarısız olduğunda process sonlandırılır ve payload'a API resolution adımı reddedilmiş olur.

IAF için herkese açık belgelenen korunan API'ler arasında GetProcAddress, GetProcAddressForCaller, LoadLibraryA/W, LoadLibraryExA/W ve LdrGetProcedureAddress yer alır — tam olarak payload'ların daha fazla yetenek kazanmak için kullandığı primitive'ler.

Known bypass classes

IAF, tıpkı EAF/EAF+ gibi, yapısal bir garanti değil heuristic bir darboğazdır. Açık araştırmalar EMET döneminin filtrelerinin şu yollarla atlatılabildiğini gösterdi: API'leri korunan page'lere hiç dokunmadan resolve etmek (adresleri önceden hesaplamak, korunmayan eşdeğerleri kullanmak ya da izlenen girdilerden kaçınan hashing tabanlı aramalar), guard'ı single-step yapıp temizlemek veya validator'ın incelemediği context'lerden çalışmak. IAF, sıradan shellcode ve exploit kit'leri için çıtayı yükseltir; sofistike, IAF'in farkında olan bir attacker'a karşı birincil bir kontrol değildir.

Detection

  • IAF'in bir process'e uygulanıp uygulanmadığını doğrula: Get-ProcessMitigation -Name <app.exe> ile import-filtering ayarını incele; sistem geneli policy için Get-ProcessMitigation -System.
  • Exploit Protection'a atfedilebilen process sonlandırmaları Microsoft-Windows-Security-Mitigations operational event log'unda (ve Defender for Endpoint exploit-protection event'lerinde) görünür. Belirli bir image'ın tekrar tekrar mitigation kaynaklı sonlandırılması için alert üret.
  • EDR telemetry'si: bir memory-protection değişikliğinin hemen ardından yoğun IAT/PEB module-list gezinmesi yapan veya çok sayıda GetProcAddress/LdrGetProcedureAddress resolution'ı gerçekleştiren process'leri işaretle — IAF'in yakalamak için tasarlandığı bir desen.

Mitigation

  • IAF'i uygulama bazında etkinleştir (tüm process'ler için genel bir default olarak güvenli değildir — browser, reader ve Office gibi hedefli, daha yüksek riskli uygulamalara uygula): Windows Security > App & browser control > Exploit protection > Program settings üzerinden ya da Set-ProcessMitigation -Name <app.exe> -Enable ImportAddressFilter ile. Ayrıca Intune/Group Policy üzerinden iletilen Exploit Protection XML ile de dağıtılabilir.
  • Önce uyumluluk için test et: JIT engine'leri, instrumentation ve bazı packer'lar bu page'lere meşru biçimde dokunur ve sonlandırılabilir; kurumsal dağıtımdan önce doğrula.
  • IAF'e tek başına güvenmek yerine onu daha geniş exploit-mitigation stack'iyle katmanla: data-execution-prevention.md, control-flow-guard.md, export-address-filtering.md ve force-randomization-for-images.md (zorunlu ASLR). IAF'in değeri, bir payload'ın API-resolution adımını reddetmekte yatar ve control-flow-hijack adımını hedefleyen kontrolleri tamamlar.

References