Skip to content

eXclusive Page Frame Ownership

Her physical page frame'ini exclusive olarak kernel ya da user'a ait yap, user page'lerini kernel direct map'inden unmap et ki kernel attacker data'sına onun üzerinden ulaşamasın — böylece ret2dir'i etkisizleştir.

Mechanism

Note

Kernel, kernel-accessible olan tüm physical bellek'in lineer bir "direct map"ini (physmap) tutar. ret2dir bunu suistimal eder: bir payload'ı bir userspace page'ine yerleştir, physical adresini resolve et (örn. /proc/<pid>/pagemap üzerinden) ve kernel execution/erişimini o page'e direct-map alias'ı üzerinden yönlendir — yalnızca userspace virtual mapping'ini denetleyen SMEP/SMAP/PXN'i atlatarak. XPFO exclusive ownership enforce eder: bir page userspace için allocate edildiğinde, direct-map entry'si kaldırılır, böylece kernel'in jump edeceği ya da okuyacağı bir alias'ı kalmaz. Kernel page'e meşru şekilde ihtiyaç duyduğunda (copy_to_user/copy_from_user), mapping geçici olarak geri getirilir ve sonra tekrar tear down edilir.

Bu, ret2dir alias'ını tamamen kapatır. Maliyeti TLB pressure ve map/unmap churn'üdür; XPFO hiçbir zaman mainline'a merge edilmedi.

Walkthrough

XPFO'nun öldürdüğü ret2dir primitive'i:

1. spray a userspace page with payload
2. read its PFN from /proc/self/pagemap
3. kva = page_offset_base + (pfn << PAGE_SHIFT)   ; direct-map alias
4. hijack control flow / corrupt a pointer to kva

XPFO açıkken, kva user-owned page'ler için unmapped'tir, böylece kernel dereference/execution attacker data'sına çarpmak yerine fault üretir.

Performans karakteristiği (LWN)

En kötü durumda ~%3'e kadar; kernel-build yavaşlaması ~%2.5. Overhead, tekrarlayan map/unmap'ten, free edilen user page'lerini sıfırlamaktan ve direct map'ten huge-page mapping'lerini elimine etmekten (4K page'lere bölünür) gelir, ki bu TLB pressure'ı artırır.

Mitigation

XPFO özel olarak ret2dir'i etkisizleştirir; ret2usr'yi (SMEP/SMAP tarafından ele alınır) ya da saf in-kernel ROP'u durdurmaz. TLB/huge-page maliyeti yüzünden patch'ler mainline'a girmeden birçok RFC revizyonundan geçti, bu yüzden production kernel'ler bunun yerine SMAP + KPTI + randomization'a güvenir. Unmapping'in eksik olduğu yerlerde (copy_to_user sırasında transient remap'ler, TLB-flush elision), review'da race-window ya da stale-TLB bypass'ları gündeme getirildi. XPFO'yu, savunduğu saldırı olan physmap spraying (ret2dir'in arkasındaki teknik) ile karşılaştır.

References