Kernel task port (tfp0)¶
iOS/macOS kernel task port'unun kavramsal kataloğu —
kernel_task'in Mach port'una arbitrary kernel read/write veren bir send right, kanonik post-exploitation "kazanım" primitive'i.
Mechanism¶
Neden tamamen total
Her XNU task bir task port ile temsil edilir; bir task'in port'una bir send
right, sahibinin task/VM Mach API'lerini ona karşı çağırmasına izin verir.
Kernel'in kendisi de bir task'tir (kernel_task, PID 0). Dolayısıyla
kernel_task'in port'una bir send right, bir user process'inin
mach_vm_read / mach_vm_write (ve mach_vm_allocate) çağrılarını
kernel address space'ine karşı yapmasına izin verir — arbitrary kernel
memory read/write, artı code injection. task_for_pid(0) tarihsel API
path'idir, "tfp0" adı buradan gelir.
Bu, user/kernel isolation boundary'sini tamamen geçer: bir kez ele geçirildiğinde, sonraki her adım (patching, injection, persistence) sadece memory access'tir.
Walkthrough¶
Üst düzey (iPhone Wiki, Project Zero):
- İnşa et, isteme. Apple, iOS'ta gerçek
kernel_taskport'unu user space'ten esirger, dolayısıyla modern exploit'ler vm_map field'ı kernel'in map'ine işaret eden bir fake task / fake Mach port sahteler (mach-port-use-after-free'e bak). - O fake port'a bir send right ekle, attacker'ın port namespace'ine.
- Kullan.
mach_vm_read/mach_vm_writetemiz, arbitrary R/W verir; exploitation fiilen bitmiştir. - (Eski jailbreak'ler bunun yerine kernel'i
task_for_pid(0)'ı tekrar izin verecek şekilde patch'lerdi — "tfp0 patch".)
Detection¶
- Non-kernel bir process'te kullanılabilir bir
kernel_tasksend right'ı tek başına anomalidir. - Fake-port /
zone_requirevalidation'dan gelen panic'ler. - Modified kernel text ya da task structure'ları bulan integrity check'leri;
macOS'ta beklenmedik caller'lardan processor-set API'leri yoluyla
kernel_taskistekleri.
Mitigation¶
- Apple gerçek
kernel_taskport'una erişimi hardened/zeroed yaptı;zone_requireve fake-port hardening sahte task port'larını çok daha zor kılar. - PAC, kernel pointer'larını/vtable'larını imzalar ve R/W'den code execution'a pivot'u engeller.
- PPL, kernel R/W ile bile page table'ları / code-signing state'ini korur; KTRR kernel text'i donanımsal read-only yapar.
- iOS 13/14 sonrası eğilim, bir kernel bug'ından sonra tek bir global tfp0'ı açığa çıkarmama yönünde.