Kernel ROP stack pivot¶
SMEP'i bypass eden bir ROP chain'i sahnelemek için kernel stack pointer'ını attacker-controlled memory'ye yönlendir.
Mechanism¶
Kırılan invariant
SMEP (Supervisor Mode Execution Prevention, CR4'ün bit 20'siyle gate edilir) CPU
ring 0'dayken bir user-mode page'den bir instruction execute ederse fault verir. Bu,
klasik "kernel'i user-mode shellcode'uma yönelt" technique'ini kırar. ROP yalnızca var
olan kernel-mode code'u execute ederek SMEP'i atlatır — ama ROP temelde "stack üzerinde
control varsayar", çünkü her gadget ret ile biter, bu da sonraki gadget adresini RSP'den
pop'lar. Dolayısıyla exploit önce RSP'yi gadget adreslerinden oluşan attacker-controlled
bir buffer'a işaret ettirmelidir. O sınırı geçen şey stack pivot gadget'ıdır
(örn. xchg eax, esp / mov esp, <reg>).
Temsili bir chain sonra SMEP bit'i clear'lanmış bir CR4 değeri load eder (pop rcx; ret),
onu geri yazar (mov cr4, rcx; ret) ve artık izin verilen user-mode payload'a (örn. bir
token-stealing routine) return eder. Alternatif olarak chain hiç ring 0'dan çıkmadan doğrudan
kernel function'larını çağırır.
Walkthrough¶
Üst düzey, Connor McGarr'ın public "Panic! At The Kernel" write-up'ından:
- Saved bir return address / control-flow target'ı overwrite etmek için bir kernel memory-corruption primitive'i (örn. bir driver stack overflow) kullan.
- Execution'ı bir stack-pivot gadget'ına yönlendir ki RSP chain'i tutan attacker buffer'ına işaret etsin.
- Yalnızca kernel-mode gadget'lardan kurulu bir ROP chain çalıştır; ya CR4.SMEP'i kapat ya da hedefe doğru doğrudan kernel function'larını invoke et.
- Execution kısıtlamaları gevşetildiğinde privilege-escalation payload'una (örn. token theft) transfer et.
- Stack'i ve register'ları onarmak ve temiz return etmek, bir bugcheck'ten kaçınmak için bir recovery / cleanup sırası execute et.
Warning
Kavramsal olarak ifade edildi — tam gadget chain ya da offset yok. Gadget adresleri spesifik kernel/driver build'ine ve KASLR slide'ına bağlıdır.
Detection¶
- CR4'e beklenmedik write'ları gözle (hypervisor / HVCI / Hyper-V CR4 shadowing CR4 bit'lerini trap edebilir ya da pin'leyebilir).
- RSP'nin aniden legitimate kernel-stack bound'larının dışına işaret etmesinde telemetry (stack-pivot detection).
- Başarısız denemelerden gelen driver crash/bugcheck pattern'leri ve pool-corruption göstergeleri.
- Control-flow-integrity ihlalleri (CET shadow-stack uyuşmazlıkları, kCFG indirect-call failure'ları).
Mitigation¶
- Hypervisor (VBS / HVCI) üzerinden CR4.SMEP'i pin'le ki software onu clear'layamasın.
- User page'lere data access'ini bloklamak ve data-only staging'i zorlaştırmak için SMAP (CR4 bit 21).
- Return address'leri doğrulamak ve ROP'u yenmek için Kernel CET / shadow stack'ler.
- Indirect-call integrity için kCFG / Control Flow Guard; gadget adreslerini öngörülemez kılmak için KASLR.
- Driver hardening: stack cookie'leri, signing, attack-surface azaltma.