Skip to content

Simulate execution (SimExec)

Hassas bir API'nin return'ünü emüle ederek onun bir ROP ret gadget'ı yerine meşru bir caller'a düştüğünü teyit eden, EMET soyundan gelen bir ROP mitigation'ı.

Mechanism

Invariant

Hassas bir API'ye yapılan meşru bir çağrı, return address'i tam o CALL'un hemen ardını gösteren gerçek bir CALL instruction'ı ile gerçekleşir. Bir return-oriented chain ise API'ye, pivot edilmiş bir stack'ten özel hazırlanmış bir adresi pop'layıp ret çalıştırarak ulaşır; yani "return site" eşleşen bir CALL'u takip eden instruction değil, keyfi bir gadget'tır. SimExec, return-site ⇒ eşleşen-CALL-tarafından-öncelenmiş invariant'ını, olası return address'ten ileri doğru emüle ederek uygular.

Microsoft'un exploit-protection referansına göre, Simulate execution (SimExec) yalnızca 32-bit uygulamalar için bir mitigation'dır. Şunu yapar: "helps validate that calls to sensitive APIs return to legitimate caller functions. It does this by intercepting calls into sensitive APIs, and then simulating the execution of those APIs by walking through the encoded assembly language instructions looking for the RET instruction, which should return to the caller. It then inspects that function and walks backwards in memory to find the preceding CALL instruction to determine whether the function and CALL instruction match, and that the RET hasn't been intercepted."

Bu, Validate API invocation (CallerCheck)'in daha ağır kardeşidir: return address'ten yalnızca geriye doğru disassemble etmek yerine, SimExec API gövdesini RET'e kadar ileri doğru emüle eder ve sonra caller'ı doğrular; bu da daha basit caller heuristic'ini yenen gadget chain'lerini yakalar.

Walkthrough

Yalnızca kavramsal

Aşağıdaki adımlar Microsoft'un herkese açık açıklamasından bir defender'ın zihinsel modelidir — bir implementasyon veya bypass tarifi değil.

Enstrümante edilmiş bir API'ye (ör. bir VirtualProtect/VirtualAlloc ailesi veya bir LoadLibrary* çağrısı) girildiğinde mantıksal akış:

  1. Mitigation, hassas API entry'sini hook'lar. Intercept edilen set, exploit'ler tarafından sık zincirlenen memory ve process/thread primitive'lerini içerir — örneğin VirtualAlloc, VirtualProtect, NtProtectVirtualMemory, LoadLibraryW, LdrLoadDll, CreateProcessW, CreateRemoteThread, WriteProcessMemory, MapViewOfFile ve WinExec.
  2. API'yi, caller'a dönen RET'i bulmak için ileri doğru simüle eder ("walks through the encoded assembly language instructions").
  3. O return target'ından memory'de geriye doğru yürüyerek önceki CALL'u bulur ve call target'ının gerçekten invoke edilen API ile eşleştiğini ve RET'in intercept/redirect edilmediğini kontrol eder.
  4. "If a ROP gadget is detected, the process is terminated."
Temsili konfigürasyon parçası

Microsoft, app başına override'ı exploit-protection XML'inde ve PowerShell üzerinden sunar. XML attribute'u OverrideEnableRopSimExec; PowerShell cmdlet anahtar kelimesi EnableRopSimExec:

Set-ProcessMitigation -Name target.exe -Enable EnableRopSimExec

SimExec yalnızca app-level'dir ve PowerShell cmdlet üzerinden audit'i yoktur (audit mode Windows Security UI'da sunulur). Arbitrary Code Guard (ACG) ile uyumsuzdur.

Detection

  • Enabled olduğunu doğrulayın. Get-ProcessMitigation -Name <app>.exe, process başına ROP mitigation durumunu raporlar; NOTSET değeri system-level/varsayılanın geçerli olduğu anlamına gelir. Hedeflenen 32-bit process'ler için EnableRopSimExec'in açık olduğunu teyit edin.
  • Block/audit telemetrisi. Exploit-protection ROP tespitleri Windows Event Log'da Security-Mitigations kanalları (Kernel-Mode ve User-Mode) altında ve Microsoft Defender for Endpoint Advanced Hunting'de ortaya çıkar. Bir SimExec sonlandırması, anormal process çıkışının takip ettiği bir exploit-protection mitigation event'i olarak görünür.
  • Bypass denemeleri şöyle görünür: bir browser/Office/PDF host process'i üzerinde tekrar eden mitigation event'leri; VirtualProtect/VirtualAlloc/LdrLoadDll'e ulaştıktan hemen sonra crash'ler; veya override attribute'ları üzerinden mitigation'ı disable etme girişimleri. SimExec yalnızca 32-bit olduğundan, exploit edilen bir workload'un 64-bit bir process'e kayması başlı başına alert etmeye değer bir evasion sinyalidir.

Mitigation

  • SimExec'in kendisi bir mitigation'dır. Sertleştirmek için, 32-bit attack-surface app'leri (eski browser'lar, Office, PDF reader'lar, plug-in host'ları) için Windows Security Exploit protection UI'ı veya Set-ProcessMitigation kullanarak enable edin ve dışa aktarılmış XML'i Group Policy/MDM üzerinden tüm filoya deploy edin.
  • Bilinen uyarılar / bypass yüzeyi:
    • Yalnızca 32-bit (x86) process'lere uygulanır; 64-bit kod bu mitigation tarafından korunmaz.
    • Sabit, listelenmiş bir API set'ini korur; enstrümante edilmiş bir API çağırmadan amacına ulaşan ROP kapsam dışıdır.
    • "Applications that perform API interception, particularly security software, can cause compatibility problems with this mitigation," yani önce audit mode ile test edin.
    • ACG ile uyumsuz — process başına hangi korumanın geçerli olacağını seçin.
  • SimExec'i, modern 64-bit kodda ROP/JOP'u daha kapsamlı ele alan hardware control-flow integrity (Intel CET shadow stack / Windows hardware-enforced stack protection) ve Control Flow Guard ile birlikte defense-in-depth olarak ele alın.

References