Skip to content

Heap grooming / feng shui

Heap allocation'larını öyle düzenle ki attacker-controlled bir chunk bir victim object'in bitişiğine (ya da onunla overlap edecek şekilde) düşsün.

Mechanism

Heap feng shui (diğer adıyla heap grooming), deterministik bir heap layout'u zorlamak için "dikkatle seçilmiş boyutlarda heap allocation'ları yaparak" "exploit'lerde arbitrary code execution'ı kolaylaştırmak için kullanılan bir tekniktir". Amaç, attacker-controlled bir chunk'ı bir victim object'in hemen bitişiğine — ya da onunla overlap edecek şekilde — yerleştirmektir; böylece ayrı bir corruption primitive faydalı bir hedefe düşer.

Note

Grooming kendi başına bir bug değildir; mevcut bir heap-buffer-overflow, use-after-free ya da double-free'yi güvenilir kılan layout manipülasyonudur. Allocator bin'lerinin/size-class'larının determinizmini suistimal eder: aynı boyuttaki free'ler ve allocation'lar bin sırasını kontrol eder, böylece bir sonraki request öngörülebilir bir slot döndürür.

Walkthrough

Kanonik hamle: bir heap overflow'un tehlikesi "data'yı, en önemlisi pointer'ları overwrite etmektir", dolayısıyla saldırgan hassas code pointer'ları (bir vtable ya da function pointer) içeren bir object'i overflow edilebilir object'in hemen ardına konumlandırmak için heap'i groom eder; overflow sonra o pointer'ın içine yürür. Dokümante edilmiş feng-shui örneği "bir dangling pointer'ı … attacker-controlled bir chunk'ın bir kısmıyla" hizalar — yani seçilen bir sırada free edip yeniden allocate ederek bir UAF dangling pointer'ının kontrol edilen byte'larla overlap etmesini sağlamak.

glibc tcache/fastbin terimleriyle bu şu demektir: victim'in size class'ından çok sayıda object allocate et, bin'i şekillendirmek için onları kontrollü bir sırada free et, sonra yeniden request et ki bir sonraki malloc hedefin bitişiğindeki ya da onunla overlap eden slot'u döndürsün.

Warning

Grooming allocator'a özgüdür. tcache LIFO davranışı, fastbin sıralaması ve kernel SLUB per-CPU freelist'lerinin her biri farklı bir şekillendirme tarifi gerektirir; mass-allocation reclaim varyantı için heap-spray'e bak.

Detection

Grooming'in kendisi bir hata üretmez. Tespit edilebilir olan, mümkün kıldığı corruption'dır — ASan heap-buffer-overflow/heap-use-after-free ya da corrupted size vs. prev_size gibi glibc integrity abort'ları.

Mitigation

Allocator randomization/hardening'i (heap layout randomization, randomize edilmiş slab/bucket cache'leri), safe-unlinking ve bin integrity check'leri, ve komşuluğun daha az işe yaraması için attacker-influenced allocation'ları hassas object'lerden ayırmak.

References