Kernel Low Fragmentation Heap (kLFH) exploitation¶
Modern Windows pool internals'ının (Windows 10 19H1+ / Windows 11) sub-0x200 pool overflow'ları ve UAF'lerinin groom edilip exploit edildiği kavramsal kataloğu.
Mechanism¶
Bağlam, bir bug değil
19H1 ile user-mode segment heap tasarımı kernel'e taşındı:
her pool bir _SEGMENT_HEAP tarafından yönetilir ve küçük allocation'lar (genellikle
sub-0x200) kernel Low Fragmentation Heap (kLFH) tarafından servis edilir;
bu da allocation'ları sabit size-class bucket'larına sıralar. kLFH komşu free
chunk'ları coalesce etmez, bu da same-bucket adjacency'yi öğrenilebilir kılar.
Pratik bir ayrıntı: bir kLFH bucket'ı genellikle o boyutun 17. aktif allocation'ı
civarında "activate" edilir; activation'dan önce allocation'lar bir
variable-size (VS) subsegment'ten gelir.
Exploitation açısından önemi şu: bucket randomisation'ı yenmek deterministic grooming ile başarılır — same-size-class allocation'ları sistematik biçimde doldurup serbest bırakarak layout'u düzleştir, böylece adjacency güvenilir hale gelir.
Walkthrough¶
Üst düzey (r0keb, Connor McGarr, insideyourkernel):
- Vulnerable allocation'ın tam size class'ını paylaşan, user mode'dan allocate edilebilen, aynı pool type'ında (örn. NonPagedPoolNx) ve kullanışlı bir member'a (size field ya da pointer) sahip bir manipulation object seç.
- Fragmentation boşluklarını doldurmak ve bucket'ı activate etmek için bu tür nesnelerden çok sayıda spray'le; tahmin edilebilir delikler açmak için alternating bir pattern ile free et.
- Overflow/UAF seçilen bir komşuya düşecek şekilde vulnerable allocation'ı yerleştir.
- Arbitrary read/write inşa etmek, kernel base'i leak etmek ve sonunda bir token
çalmak için komşunun metadata'sını (örn. bir
_POOL_HEADERya da birNP_DATA_QUEUE_ENTRYlength/Flink) corrupt et.
Detection¶
- Hemen ardından seçici free'ler gelen, aynı boyutlu kernel nesnelerinin (Events, named pipe'lar) büyük spray'leri.
- Special Pool altında pool-corruption bugcheck'leri.
- Low-integrity bir process'ten gelen same-size-class allocation churn'ü.
- Free sırasında tespit edilen corrupt
_POOL_HEADER/ object length field'ları.
Mitigation¶
- Segment-heap / kLFH integrity check'leri ve pool-header cookie'leri.
- NonPagedPoolNx (non-executable pool); randomize edilmiş LFH bucket placement'ı.
- Sprayable nesneleri kısıtlayan low-integrity / AppContainer kısıtlamaları.
- Post-corruption execution adımını engellemek için SMEP / HVCI / kCET.
- Geliştirme sırasında overflow'ları yakalamak için Driver Verifier Special Pool.