Pointer-array isolation (OOL ports kheap)¶
XNU, pointer array'lerini — özellikle out-of-line (OOL) Mach port array'lerini — kendi özel kernel heap'lerine (kheap / pointer zone'ları) ayırır; böylece bu tarihsel olarak evrensel use-after-free reallocation primitive'i artık keyfi data object'leriyle karıştırılamaz.
Mechanism¶
Sınır neden tutuyor
Birçok XNU exploit'i aynı tarifi izler: bir victim object'i free et, sonra aynı
belleği saldırgan kontrolündeki byte'larla yeniden tahsis edip sahte bir object
forge et (klasik bir use-after-free reclaim'i).
Pointer array'leri, özellikle out-of-line Mach port descriptor'ları
(ipc_kmsg OOL port'ları), ideal bir generic reclaim object'i oluşturdu: saldırgan,
kernel'in daha sonra pointer olarak dereference ettiği büyük, boyutu esnek bir 8-byte
slot array'ini kontrol eder — kontrollü pointer değerlerini bir free edilmiş slot'a
yerleştirmenin neredeyse evrensel bir yolu.
Pointer-array isolation, bu allocation'ları sıradan data buffer'larından ayrı tutulan kendi kheap'lerine / pointer zone kümelerine taşır. Zone-based sequestering yalnızca belleğin aynı zone'dan gelen allocation'larca reuse edilmesine izin verdiği için, bir data zone'undaki free edilmiş bir object artık bir OOL-ports spray'i tarafından reclaim edilemez ve tersi. Security sınırı spatial type separation'dır: belirli bir free edilmiş allocation'ı muhtemelen alias'layabilecek object kümesi dramatik biçimde küçülür; "tek spray hepsine uyar" primitive'ini kaldırır. Bu, kalloc_type type tabanlı segregation'ı ve kheap segregation'ı tamamlar; pointer array'leri özel muamele görür çünkü hepsi aynı type signature'ını paylaşır ve dolayısıyla yalnızca signature ile çeşitlendirilemez — onlara bir kheap adanarak ayrılırlar.
Walkthrough¶
Yüksek seviyeli, kavramsal (Apple'ın XNU memory-safety yazısından):
- Allocation'ları sınıflandır. Allocator, pointer-array allocation'larını (örn. OOL port array'leri) genel data'dan ayırır; onları paylaşılan data kheap'i yerine özel pointer zone'larına / bir pointer kheap'ine yönlendirir.
- Zone'u cache'le. Değişken boyutlu pointer-array allocation'ları tek bir sabit
zone'a map'lenmez, bu yüzden hızlı runtime yönlendirmesi için seçilen kheap'in
başlangıcının
ZONE_ID_*/ zone id'si cache'lenir. - Reuse'u kısıtla. Bir data zone'undaki free edilmiş slot'lar yalnızca data allocation'larına geri verilir; OOL port'ları spray eden bir saldırgan, victim data object'ine değil, pointer kheap'ine düşer.
- Vuln'a özel iş zorla. Generic spray ortadan kalkınca, bir saldırganın victim ile aynı zone'da bir reclaim object'i bulması gerekir — çok daha az aday, çoğu zaman hiç.
Yalnızca kavramsal yönlendirme
Illustrative shape only — no struct layouts, zone constants, or grooming recipes.Warning
Isolation, reuse'u küçültür ama ortadan kaldırmaz: bir saldırgan hâlâ free edilmiş bir pointer-array'i başka bir pointer-array ile reclaim etmeye çalışabilir veya zone-içi adaylara pivot edebilir. Etkinlik, doğru allocator benimsemesine ve saldırganların same-zone confusion hedefinden yoksun olmasına bağlıdır — kalloc zone grooming'e bakın.
Detection¶
- Yönetilen Apple platformlarında bu büyük ölçüde önleyici bir allocator özelliğidir; runtime strict-free / zone-mismatch kontrolleri, bir object yanlış zone'a free edildiğinde panic verir; bu da corruption veya exploitation denemelerine işaret edebilir.
- Beklenmedik zone'la ilgili kernel panic'leri ya da yoğun OOL-port / Mach-message spray desenleri, ilişkilendirmeye değer anormalliklerdir.
Mitigation¶
- XNU allocator özelliklerini konuşlandırın / güncel tutun: pointer-array isolation, kalloc_type ve kheap segregation modern iOS/macOS ile gelir — desteklenen sürümlerde kalın.
- Kernel geliştiricileri için: pointer array'lerini typed/pointer allocation API'leri
üzerinden yönlendirin ve
-Wxnu-typed-allocators'a kulak verin; böylece yeni kod generic bir data zone'una düşmek yerine isolation'ı miras alır. - Trust-sensitive kullanım öncesinde object'lerin beklenen zone'larında yaşadığını doğrulamak için zone-require ile birleştirin.
- Bilinen-bypass uyarısı: segregation maliyeti yükseltir ama bir same-zone reclaim hedefi veya isolate edilmemiş bir allocation site'ı hâlâ UAF exploitation'ı mümkün kılabilir.