Validate exception chains (SEHOP exploit-protection)¶
SEHOP'un Exploit-Protection üzerinden sunulan biçimi: exception dispatcher, integrity'sini ve terminal record'unu doğrulamak için SEH linked list'i walk eder; SEH-overwrite istismarını yener.
Mechanism¶
Invariant
Structured Exception Handling, handler chain'ini stack üzerinde singly linked list olarak saklar; her record bir handler'a ve bir sonraki record'a birer pointer tutar ve bilinen bir final handler'da biter. Bir SEH record'unu attacker-chosen koda işaret edecek şekilde overwrite eden bir stack-overflow exploit, o list'in bir veya daha fazla yapısal özelliğini bozar. SEHOP, exception dispatch anında SEH chain iyi biçimlidir ve bilinen final handler'da sonlanır invariant'ını zorlar — chain corrupt ise handler hiçbir zaman invoke edilmez.
Microsoft'un exploit-protection reference'ına göre, "Validate exception chains (SEHOP), Structured Exception Handler (SEH) overwrite istismar tekniğine karşı bir mitigation'dır." Handler list dinamik olduğu için stack üzerinde yaşar ve "bir saldırgan, exception handler'ı saldırganın seçtiği koda bir pointer ile overwrite etmek için bir stack overflow vulnerability'sini kullanabilir." Mitigation "exception dispatcher tarafından çağrılır, ki bir exception invoke edildiğinde SEH chain'i doğrular." Ayrıca altta yatan SEHOP girdisine bakın.
Walkthrough¶
Yalnızca kavramsal
Microsoft'un kamuya açık açıklamasından çıkarılan bir savunmacı modeli — bir exploit ya da bypass tarifi değil.
Exception dispatch'te, dispatcher şunları doğrular:
- Tüm exception chain record'ları stack sınırları içindedir.
- Tüm exception record'ları align edilmiştir.
- Hiçbir exception handler pointer'ı stack'e işaret etmez.
- Geriye doğru pointer yoktur (chain yalnızca ileri walk eder).
- Exception chain bilinen bir final exception handler'da biter.
"Bu doğrulamalar başarısız olursa, exception handling abort edilir ve exception handle edilmez." Bir SEH-overwrite payload'u tipik olarak bunlardan birini ihlal eder — örn. stack'e giden bir handler pointer'ı ya da artık terminal record'a ulaşmayan bir chain — ve saldırganın handler'ı çalışmadan önce reddedilir.
Temsili konfigürasyon parçası
Exploit Protection altındaki SEHOP system- ve app-level'dir ve 32-bit (x86) uygulamalar için yapılandırılabilir. PowerShell keyword'leri SEHOP ve SEHOPTelemetry'dir:
Not: "Validate exception chains (SEHOP)'un audit mode'u yoktur."
Detection¶
- Enabled olduğunu doğrula.
Get-ProcessMitigation -SystemveGet-ProcessMitigation -Name <app>.exe, SEHOP durumunu raporlar; system scope'taNOTSET, kurulum default'unun geçerli olduğu anlamına gelir. SEHOP'un hedeflenen scope/process'ler için enabled olduğunu doğrula. - Telemetry. SEHOP enforcement, exception handling'i abort eder ve tipik olarak faulting process'i terminate eder; bu, Windows Event Log Security-Mitigations kanallarında ve (Defender for Endpoint mevcut olduğunda) exploit-protection mitigation olaylarında ortaya çıkar.
SEHOPTelemetry, enforcement davranışını değiştirmeden telemetry üretmek için enable edilebilir; etkiyi ölçmek için kullanışlıdır. - Bypass girişimleri şuna benzer: untrusted input tüketen parser/host process'lerinde exception dispatch sırasında crash'ler; malformed SEH chain'lerine bağlı mitigation olayları; ya da SEH path'inden tamamen kaçınan tekniklerin kullanımı (heap/vtable corruption, non-SEH bir primitive üzerinden ROP) — SEHOP zorlandıktan sonra SEH'ten uzaklaşma kendi başına bir sinyaldir.
Mitigation¶
- Mitigation, SEHOP'un kendisidir. Onu Windows Security Exploit protection UI veya
Set-ProcessMitigationüzerinden system-wide ve/veya per-app enable et ve dışa aktarılan XML'i Group Policy/MDM üzerinden deploy et. (Windows uzun süredir client/server'da SEHOP'u default olarak enable etti; Exploit Protection yüzeyi onu assert etmene ve override etmene izin verir.) - Bilinen uyarılar / bypass yüzeyi:
- 32-bit (x86) uygulamalar için yapılandırılabilir; 64-bit binary'ler stack-walk edilen SEH pointer'ları yerine table-based unwind data (PDATA/XDATA) kullanır, dolayısıyla SEH-overwrite primitive'i yapısal olarak uygulanamaz.
- Audit mode yok — uyumluluğu dikkatli test et. "SEHOP ile uyumluluk sorunları nispeten nadirdir … Ancak bazı uygulamalar, timing'deki ince değişikliklerden etkilenir; bu da uygulamadaki gizli bir multi-threading bug'ını açığa çıkaran bir race condition olarak ortaya çıkabilir."
- SEHOP yalnızca SEH dispatch path'ini kısıtlar; exception chain'i hiç geçmeyen control-flow hijack'leri durdurmaz. Control Flow Guard, GS stack cookie ve hardware stack protection (Intel CET shadow stack / Windows hardware-enforced stack protection) ile birleştir.