Skip to content

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ışı:

  1. Bir saldırgan heap metadata'sını corrupt eder (örn. komşu bir header'a bir overflow ya da crafted bir free üzerinden).
  2. 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.).
  3. 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.

References