Skip to content

Validate API invocation (CallerCheck)

Hassas bir API'ye bir gadget üzerinden ret ile değil, geçerli bir caller'dan gelen gerçek bir CALL ile ulaşıldığını doğrulayan EMET soyundan bir ROP mitigation'ı.

Mechanism

Invariant

Meşru bir invocation'da, stack üzerindeki return address, hedefi girilen API olan bir CALL'un hemen ardından gelen instruction'a işaret eder. Bir return-oriented chain, API'ye controlled bir stack değerine karşı ret çalıştırarak ulaşır, dolayısıyla sözde caller bölgesinin önünde eşleşen bir CALL yoktur. CallerCheck API-entry ⇒ return-address'in-önünde-bu-API'ye-bir-CALL-vardır kuralını zorlar; ret üzerinden API'ye "atlayan" gadget'ları yener.

Microsoft'un exploit-protection reference'ına göre, "Validate API invocation (CallerCheck), hassas API'lerin geçerli bir caller'dan çağrıldığını doğrulayan, return-oriented programming (ROP) tekniklerine karşı bir mitigation'dır. Bu mitigation, geçirilen return address'i inceler, ardından call target'ın fonksiyona geçirilen parametreyle eşleşip eşleşmediğini belirlemek için return address'in üzerinde bir call bulmak üzere heuristik olarak geriye doğru disassemble eder." SimExec gibi, yalnızca 32-bit (x86) uygulamalar için yapılandırılabilir.

CallerCheck daha hafif caller validation'dır; Simulate execution (SimExec) caller'ı doğrulamadan önce API gövdesini RET'e kadar ileri emülasyon ederek aynı fikri genişletir.

Walkthrough

Yalnızca kavramsal

Microsoft'un kamuya açık açıklamasından bir savunmacı modeli — bir implementation ya da bypass tarifi değil.

  1. Mitigation, hassas bir API'ye girişi intercept eder. Instrumented küme her zamanki exploit primitive'lerini kapsar — örn. VirtualAlloc, VirtualProtect, NtProtectVirtualMemory, LoadLibraryW, LdrLoadDll, CreateProcessW, CreateRemoteThread, WriteProcessMemory, MapViewOfFile, WinExec ve LdrGetProcedureAddressForCaller.
  2. Stack üzerinde geçirilen return address'i okur.
  3. Onun önünde gelmesi gereken CALL'u bulmak için o return address'ten geriye doğru heuristik olarak disassemble eder.
  4. Bulunan CALL target'ının fiilen girilen API'nin entry point'i ile eşleştiğini kontrol eder.
  5. "Bir ROP gadget tespit edilirse, process terminate edilir."
Temsili konfigürasyon parçası

Exploit-protection XML override attribute'ı OverrideEnableRopCallerCheck; PowerShell keyword'ü EnableRopCallerCheck:

Set-ProcessMitigation -Name target.exe -Enable EnableRopCallerCheck

CallerCheck yalnızca app-level'dir, Arbitrary Code Guard (ACG) ile uyumsuzdur ve audit, PowerShell cmdlet'i üzerinden mevcut değildir (yalnızca Windows Security UI'de).

Detection

  • Enabled olduğunu doğrula. Get-ProcessMitigation -Name <app>.exe, process başına ROP mitigation durumunu gösterir; NOTSET system/default'a düşer. Hedeflenen 32-bit host'larda EnableRopCallerCheck'in set olduğunu doğrula.
  • Block/audit telemetry'si. Tespitler, Windows Event Log Security-Mitigations (User-Mode / Kernel-Mode) kanallarında ve Microsoft Defender for Endpoint Advanced Hunting'de exploit-protection mitigation olayları olarak görünür; bir block, olay artı process termination olarak ortaya çıkar.
  • Bypass girişimleri şuna benzer: internete dönük parser'larda (browser/Office/PDF/plug-in host'ları) tam VirtualProtect/LdrLoadDll'e ulaştıkları anda mitigation olay kümeleri; check'i disable etmek için override attribute'larını tahrif etmek; ya da exploit edilmiş bir workload'un 64-bit bir process'e migrate olması (CallerCheck yalnızca 32-bit'tir), ki bu onu tamamen atlatır.

Mitigation

  • 32-bit attack-surface uygulamaları için CallerCheck'i Windows Security Exploit protection UI veya Set-ProcessMitigation üzerinden enable et ve dışa aktarılan XML'i Group Policy/MDM üzerinden dağıt.
  • Bilinen uyarılar / bypass yüzeyi:
    • Yalnızca 32-bit (x86) process'ler.
    • Heuristiktir ("heuristik olarak geriye doğru disassemble eder"); sabit, enumerate edilmiş bir API kümesini doğrular, dolayısıyla o API'lerden kaçınan ROP yakalanmaz ve heuristik caller validation'ı hedef alan caller-spoofing teknikleri EMET döneminin ROP check'lerinin belgelenmiş bir kısıtıdır.
    • "API interception yapan uygulamalar, özellikle security software, uyumluluk sorunlarına neden olabilir" — filoya yaymadan önce audit mode ile doğrula.
    • ACG ile uyumsuz.
  • 64-bit kodda kapsamlı ROP/JOP coverage'ı için modern, hardware-destekli control-flow integrity'yi tercih et: Intel CET shadow stack, Windows hardware-enforced stack protection ve Control Flow Guard. CallerCheck'i legacy 32-bit yüzey için defense-in-depth olarak ele al.

References