Validate heap integrity¶
Heap metadata corruption tespit edildiğinde bir process'i terminate eden, saldırganlara groom edecek stabil bir heap vermeyen bir Windows exploit-protection mitigation'ı.
Mechanism¶
Note
Windows heap manager, bookkeeping metadata'sını (block header'lar, boyutlar, free-list / lookaside link'leri, in-use flag'leri) inline ve uygulama data'sının yanında saklar. Birçok memory-corruption exploit'i o metadata'yı overwrite ederek çalışır — örneğin, komşu bir block header'ı ezen bir heap buffer overflow ya da bir free-list pointer'ını arbitrary-write primitive'ine dönüştüren manipüle edilmiş bir unlink.
"Validate heap integrity", termination-on-corruption'ı enable ederek heap'in koruma seviyesini yükseltir: tahrif edilmiş olabilecek metadata'ya güvenip onu kullanmak yerine, allocator onu allocation/free operasyonları sırasında doğrular ve bir tutarsızlık tespit ettiğinde process'i terminate ederek fail-close eder (altta yatan davranış HeapEnableTerminationOnCorruption üzerinden sunulur). Güvenlik değeri şudur: corrupt bir heap, programın aksayarak devam ettiği bir şey yerine ölümcül olarak ele alınır: saldırgan, güvenilir istismarın dayandığı öngörülebilir, tekrar tekrar manipüle edilebilir heap state'ini kaybeder. NT heap'teki safe unlinking ve header validation gibi yapısal savunmaları tamamlar (bkz. nt-heap, heap-entry-unlink, nt-heap-unlink).
Walkthrough¶
Kavramsal, Microsoft'un Exploit Protection reference'ından. Mitigation "bir heap corruption tespit edilirse uygulamanın terminate olmasına neden olarak Windows'taki heap mitigation'larının koruma seviyesini artırır." Microsoft'a göre, dâhil edilen check'ler şunlardır:
- Bir HEAP handle'ının free edilmesini engellemek.
- Heap allocation'ları için extended block header'lar üzerinde ek bir validation yapmak.
- Heap allocation'larının zaten in-use olarak flag'lenmediğini doğrulamak.
- Minimum bir boyutun üzerindeki büyük allocation'lara, heap segment'lerine ve subsegment'lere guard page eklemek.
Bir exploit'i nasıl bozduğunun mantıksal akışı:
- Bir saldırgan heap metadata'sını corrupt eder (örn. komşu bir header'a bir overflow ya da crafted bir free üzerinden).
- Etkilenen structure'lara dokunan bir sonraki allocation/free'de, heap manager'ın integrity check'leri tutarsızlığı gözlemler (bozuk header, bir handle'ın double-free'si, zaten in-use olan block, vb.).
- Attacker-influenced metadata ile devam etmek yerine process terminate edilir — potansiyel bir code-execution primitive'ini exploit'in reddine dönüştürür.
Per-process enablement ve coverage doğrulaması (config-only, weaponize değil). Aşağıdaki PowerShell, hedef <app>.exe için heap termination-on-corruption'ı (TerminateOnError) enable eder ve sonra effective policy'yi okuyarak coverage'ı confirm eder:
# Enable: heap integrity validation (TerminateOnError) for a single process image
Set-ProcessMitigation -Name <app>.exe -Enable TerminateOnError
# Audit / verify: read back the effective mitigation policy to confirm coverage
Get-ProcessMitigation -Name <app>.exe
Get-ProcessMitigation çıktısında Heap bloğundaki TerminateOnError : ON satırı, mitigation'ın o image için aktif olduğunu gösterir. Tüm sistem default'unu envanterlemek için Get-ProcessMitigation -System kullanılabilir.
Audit mode yok
Microsoft, Validate heap integrity'nin audit mode'unun olmadığını belirtir — yalnızca enforce edilebilir, sessizce gözlemlenemez. Legacy software üzerinde geniş enforcement'tan önce kısa bir uyumluluk değerlendirmesi planla.
Detection¶
- Crash/termination telemetry'si. Heap-corruption status code'larıyla terminate olan process'ler (allocator'ın fail-closed path'i) görünür sinyaldir; tek bir binary için ani bir artış genellikle aktif istismar girişimlerine ya da tetiklenen bir memory-safety bug'ına işaret eder.
- Windows Error Reporting / EDR. Bir istismar girişimini iyi huylu gizli bir bug'tan ayırmak için termination olaylarını etkilenen modül ve input ile korele et.
- Policy auditing. Hangi process'lere mitigation'ın uygulandığını (Exploit Protection /
Set-ProcessMitigationüzerinden) envanterle, çünkü coverage'ın yokluğu kendi başına bir gap'tir.
Mitigation¶
- Exploit Protection üzerinden enable et. "Validate heap integrity"yi Windows Security > App & browser control > Exploit protection üzerinden ya da PowerShell (
Set-ProcessMitigation) ile process başına uygula ve policy/Intune üzerinden ölçekte deploy et. - Default coverage. Microsoft, bu mitigation'ın 64-bit uygulamalar ve Windows Vista veya sonrasını hedefleyen 32-bit uygulamalar için zaten default olarak uygulandığını belirtir; en riskli yazılım Windows XP veya öncesinden gelen legacy uygulamalardır, gerçi uyumluluk sorunları nadirdir.
- Yapısal heap savunmalarıyla katmanla. NT-heap safe unlinking ve metadata check'lerini (
windows-heap-safe-unlinking-bypass,nt-heap,segment-heap) ve tarihsel olarak EMET döneminin mitigation'larını (emet) güçlendirir ve onlar tarafından güçlendirilir.