Skip to content

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.

  1. Freed kernel memory'sine işaret eden dangling bir Mach port elde etmek için bir bug (UAF ya da MIG / ipc_voucher reference-count hatası) kullan.
  2. O memory'yi kontrollü içerikle (örn. pipe buffer'ları ya da out-of-line descriptor'lar) reallocate et, böylece attacker fake ipc_port içeriğini read/write edebilsin — bazen örtüşen pipe file descriptor'ları aracılığıyla.
  3. Fake ipc_port'u (type, reference'lar, kobject pointer'ı) öyle şekillendir ki yine attacker kontrolündeki fake bir task struct'a işaret etsin.
  4. 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 okuyan pid_for_task) kullan — bir arbitrary read'i bootstrap ederek.
  5. Read primitive'i ile gerçek kernel task'ını / kernel vm_map'ini ve kernel base'ini bul.
  6. Düzgün bir fake kernel task kur ve onu process'in ipc_entry tablosuna 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_kobject integrity'si, daha güvenli MIG refcounting'i).

References