Skip to content

PaX UDEREF

User/kernel address-space ayrımını software'de uygulayan PaX/grsecurity mekanizması: kernel, userland pointer'larını doğrudan dereference edemez; SMAP'sız CPU'larda bile ret2usr/ret2dir'i yener.

Mechanism

Note

UDEREF, açık, kontrollü bir erişim yolu olmadan "the kernel cannot directly dereference userland pointers" invariant'ını uygular. Çoğu kernel exploit'i bir noktada supervisor-mode kodu saldırgan kontrolündeki user belleğinden okumaya veya ona atlamaya kandırır (ret2usr ailesi). UDEREF bu yeteneği yapısal olarak kaldırır: kernel'de çalışırken userland erişilemez kılınır, böylece bir user adresini hedefleyen bozulmuş bir kernel pointer'ı, saldırgan verisine düşmek yerine fault verir. Hardware SMAP'in (ve ARM PAN'in) software öncülüdür.

Walkthrough

Implementasyon mimariye göre değişir (PaX kod analizine göre):

  • i386: segmentation kullanır — kernel ve user space için ayrı segment descriptor'ları, "prevent cross-boundary memory access." yapan segment-register kısıtlamalarıyla. Tam address-space isolation'ı için KERNEXEC ile birlikte konuşlandırılır.
  • amd64: segment limit'leri artık korumaz, bu yüzden UDEREF CPU başına ayrı page directory'leri tutar — cpu_pgd[NR_CPUS][2][PTRS_PER_PGD] olarak belgelenir — biri kernel context'i biri user context'i için, böylece iki mapping birbiriyle "completely separated, unable to cross-reference" olur. Sandy Bridge ve sonrasında, full TLB flush'ı olmadan context değiştirmek için PCID tagging'i (PCID_KERNEL=0, PCID_USER=1) kullanır. İki güç seviyesi belgelenir:
  • WEAKUDEREF: kernel pgd'sinde bir userland shadow'u tutar ama onu _PAGE_NX (non-executable) işaretler.
  • STRONGUDEREF: tamamen ayrı pgd'ler; user mapping'leri kernel context'inde basitçe yoktur.
# conceptual outcome UDEREF guarantees, in kernel context
user address range  ->  not present (STRONG) or NX-only (WEAK)
=> kernel deref/exec of a user pointer faults instead of using attacker data

Upstream KPTI ile yapısal benzerliğe dikkat edin: ikisi de user vs. kernel context için ayrı page table'lara dayanır, ancak birincil amaçları (self-protection vs. Meltdown mitigation) farklıdır.

Mitigation

UDEREF "defeats ret2usr/ret2dir by preventing kernel code from executing or accessing userland instructions/data." Upstream'e göre SMAP'e ve ARM PAN'e (data tarafı) karşılık gelir, ama hardware özelliğinin olmadığı yerde garantiyi software'de sağlar; 2017 UDEREF revizyonu (grsecurity 4.12, Eylül 2017) ek olarak, mümkün olduğunda upstream SMAP'i UDEREF'in güvenlik temeli olarak kullanacak şekilde geçiş yaparak "leverages SMAP for performance." PaX KERNEXEC (execution tarafı) ile doğal olarak eşleşir. UDEREF, ret2usr savunmaları arasında — SMEP/SMAP/PXN/KERNEXEC/kGuard ile birlikte — ret2dir çalışmasının (Kemerlis et al., USENIX Security 2014) physmap-synonym tekniğiyle bypass edilebildiğini özellikle gösterdiği yayınlanmış savunmalardan biridir; bu da tamamlayıcı bir düzeltme olarak eXclusive Page Frame Ownership'i motive eder.

References