KASLR / Kernel Heap ASLR¶
Kernel image base'ini (yani "kernel slide"ı) ve kernel heap layout'unu randomize ederek bir saldırganın kernel control flow'unu yönlendirmek ya da kernel data'sını corrupt etmek için ihtiyaç duyduğu mutlak adresleri tahmin edememesini sağlar.
Mechanism¶
Güvenlik invariant'ı
KASLR, mutlak kernel virtual address'lerinin a priori bilinemez olmasını zorunlu kılar. Boot'ta kernel, tüm kernel image'ını (ve kernel-heap ASLR ile kernel allocator'larının base/layout'unu) tahmin edilemez bir miktarda kaydıran rastgele bir slide seçer. Bir indirect call'u, return address'i ya da corrupt edilmiş bir pointer'ı belirli bir kernel fonksiyonuna ya da object'ine yönlendirmesi gereken bir exploit, artık hedefi hardcode edemez. Bu, çıtayı yükseltir çünkü saldırganı önce bir kernel adresini açığa çıkaran bir information leak (ya da bir side-channel oracle) elde etmeye zorlar; slide — ve dolayısıyla geri kalan her şey — bundan türetilebilir.
KASLR probabilistik bir defense-in-depth'tir: gücü, slide'ın entropy'sinde ve bir adresi sızdırmanın zorluğunda yatar. Kendi başına memory corruption'ı engellemez; saldırgandan onu güvenilir biçimde silah haline getirmek için gereken adres bilgisini esirger.
Walkthrough¶
Kavramsal olarak, XNU/iOS, Linux ve Windows genelinde:
- Boot'ta slide seçimi. Loader/erken kernel rastgele bir değer çeker ve kernel image base'ini o slide kadar kaydırır. iOS'ta kernel slide iyi belgelenmiş bir kavramdır; Linux'ta eşdeğeri decompress edilmiş kernel'in fiziksel/virtual base'ini randomize eder; Windows kernel ve driver yükleme adreslerini randomize eder.
- Heap/allocator randomization. Kernel allocator'ları zone/slab'lerin nereye
yerleştirildiğine ve hardened allocator'larda freelist sırasına randomization
ekler (bkz.
slab-freelist-randomization.md), böylece heap object adresleri de tahmin edilemez olur. - Entropy bütçesi. Slide'daki rastgele bit sayısı brute-force direncini sınırlar; çok az bit, entropy'yi azaltmak için tahmin ya da spray'i davet eder.
Public olarak belgelenmiş bypass sınıfları
KASLR rutin olarak yenilir; rastgeleliği kırarak değil, onu sızdırarak:
- Pointer/info leak'leri. Tek bir sızdırılmış kernel pointer'ı slide'ı açığa
çıkarır; bu baskın tekniktir (bkz.
info-leak-pointer-leak-aslr-bypass.md). - Timing / micro-architectural oracle'lar. prefetch side channel'ı ve double page fault / TLB-timing saldırıları, map'lenmiş ve map'lenmemiş kernel page'lerini ayırt eder; DrK, kernel layout'unu geri kazanmak için Intel TSX abort timing'i kullanır; BTB collision'ları ("jump over ASLR") kod adreslerini sızdırır.
- Düşük entropy'de brute force. Slide'ın az biti olduğu yerde, tekrarlı tahmin
ya da heap/stack spraying (bkz.
aslr-brute-force.md) başarılı olabilir.
KASLR'nin tek başına güvenilmek yerine KPTI, kptr_restrict ve daha güçlü primitive'lerle eşleştirilmesinin nedeni budur.
Detection¶
- Linux:
nokaslriçincat /proc/cmdline;/sysve boot log'ları KASLR durumunu gösterir;kptr_restrictvedmesg_restrictleak yüzeyini azaltır. - Windows: KASLR aktifken kernel/driver base adresleri reboot'lar arasında farklılaşır; VBS/HVCI çevredeki posture'ı güçlendirir.
- iOS/XNU: kernel slide her boot'ta farklıdır; araştırma araçları onu yalnızca geliştirme cihazlarında privileged interface'ler üzerinden okur.
- Anomaliler: tekrarlı, hızlı kernel-adresi probing'i, page-fault timing loop'ları ya da TSX-abort timing loop'ları, aktif bir KASLR-derandomization girişiminin sinyalidir.
Mitigation¶
- Slide entropy'sini maksimize et ve kernel-heap randomization'ı etkinleştir; kolaylık olsun diye KASLR'yi devre dışı bırakma.
- Adres leak'lerini bastır:
kallsyms/kptr_restrict'i kısıtla, log'lardaki ve userspace'e giden kernel pointer'larını sanitize et ve pointer hashing uygula. - KASLR'yi KPTI/KVA shadow (Meltdown sınıfı leak'leri köreltmek için),
control-flow integrity (
kernel-control-flow-guard.md,kernel-control-flow-integrity.md) ve hardened allocator'larla (slab-freelist-randomization.md,kalloc-type.md) eşleştir. - Mümkün olan yerde timing oracle'larını (prefetch, TSX, TLB) kapatan micro-architectural mitigation'ları uygula.