Fake Mach port / fakeport¶
Bir XNU exploitation primitive'i: kernel'a attacker-controlled memory'yi bir ipc_port gibi muamele ettir, fake bir task port forge et ve onu tam kernel read/write için kernel task port'a (tfp0) bootstrap et.
Mechanism¶
Fake bir port neden bu kadar güçlü
XNU kernel'ı struct ipc_port object'lerine güvenir. Bir attacker kernel'a
attacker-controlled memory'yi bir port gibi muamele ettirebilirse, o port fake bir task
port'a, sonra kernel task port'una (tfp0 / kernel task port)
dönüştürülebilir ve kernel read/write verir. Buna tipik olarak bir dangling-port /
use-after-free ya da freed slot'u bilinen bir adreste
attacker-spray'lenmiş veriyle (out-of-line port'lar, OSData/IOSurface property'leri, pipe
buffer'ları) reallocate edilen bir reference-counting bug'ı aracılığıyla ulaşılır.
Walkthrough¶
Kamuya açık Project Zero survey'lerinden alınmış kavramsal tekrar; bu jenerik bir tekniktir, tek bir CVE değil.
- Freed kernel memory'sine işaret eden dangling bir Mach port elde etmek için bir bug (UAF
ya da MIG /
ipc_voucherreference-count hatası) kullan. - O memory'yi kontrollü içerikle (örn. pipe buffer'ları ya da out-of-line descriptor'lar)
reallocate et, böylece attacker fake
ipc_portiçeriğini read/write edebilsin — bazen örtüşen pipe file descriptor'ları aracılığıyla. - Fake
ipc_port'u (type, reference'lar,kobjectpointer'ı) öyle şekillendir ki yine attacker kontrolündeki fake birtaskstruct'a işaret etsin. - Fake port'u bir task port'a çevir ve kernel memory'sini küçük parçalar halinde okumak için
zararsız bir accessor (örn. fake task'ın
bsd_info'sunu okuyanpid_for_task) kullan — bir arbitrary read'i bootstrap ederek. - Read primitive'i ile gerçek kernel task'ını / kernel
vm_map'ini ve kernel base'ini bul. - Düzgün bir fake kernel task kur ve onu process'in
ipc_entrytablosuna ekleyerek meşru-görünümlü bir kernel task port'u (tfp0) elde et; bu tam kernel read/write verir. Bu pattern'i kullanan exploit'ler arasında mach_portal, async_wake ve voucher_swap bulunur.
Detection¶
- Kavramsal / tarihsel bir iOS tekniği. Non-Apple process'ler tarafından task-for-pid-0 / kernel task port'unun anormal edinimi.
- Zone-spray / GC göstergeleri: tek bir uygulamadan büyük port allocation patlamaları, OOL-port mesajları, IOSurface property spray'leme ya da pipe-buffer grooming.
ipc_port'a, zone corruption'a ya da dangling-port free'lerine referans veren crash log'ları / panic'ler.- Jailbreak / post-exploit artefaktları: imzasız kod yürütme, sandbox escape, persistence, tahrif edilmiş/EOL cihazların MDM tespiti.
- Güvenilmeyen uygulamalardan yoğun mach-voucher / port-right manipülasyonu.
Mitigation¶
- Güncel iOS/macOS güncellemelerini uygula; bir dangling port'u mümkün kılan her belirli bug Apple tarafından yamalandı — cihazları tamamen güncel tut ve EOL OS'u emekliye ayır.
- Fake-port kurulumunu bozan donanım/OS mitigation'ları: ipc/object pointer'larında PAC,
port'lar kontrol edilebilir veriyle örtüşemesin diye
zone_require/ kalloc zone segregation'ı ve per-zone GC hardening'i. - task-port/kernel-base tahrifatına direnmek için KTRR / AMCC, KPP / KPF ve read-only kernel mapping'leri.
- App vetting ve sandboxing'i zorla; güvenilmeyen uygulama kurulumunu MDM ile kısıtla.
- dangling-port ve fake-task pattern'lerini kapatan daha yeni XNU mitigation'ları (örn.
ipc_kobjectintegrity'si, daha güvenli MIG refcounting'i).