Skip to content

Examining Pointer Authentication on the iPhone XS (kernel PAC bypasses / brute-force)

Brandon Azad'ın Apple A12 PAC implementasyonuna dair Project Zero analizi; arbitrary bir kernel R/W primitive'inin A-key PAC signature'larını nasıl forge edebileceğini (ve naive PAC'ın neden brute-force edilebilir olduğunu) gösterir.

Mechanism

Bug class / invariant

ARM Pointer Authentication (PAC), pointer'ları kullanılmayan high bit'lerde saklanan keyed bir MAC (PAC) ile imzalar; CPU bir pointer'ı kullanmadan önce PAC'ı doğrular, yani bozulmuş bir pointer authentication'da başarısız olur. PAC'ın garanti etmesi beklenen invariant: bir attacker, meşru şekilde elde etmediği validly-signed bir pointer üretemez. Azad'ın araştırması Apple'ın A12 hardening'ini inceledi ve attacker'ın hâlihazırda bir kernel read/write primitive'i varken bu sınırın aşılabileceğini gösterdi: CPU'nun kendi signing operasyonlarını (signing gadget'ları) yeniden kullanarak ya da signed pointer'ları okuyup/replay ederek, bir attacker JOP üzerinden kernel code çalıştırmaya yetecek kadar A-key signature'larını forge edebilir. Ayrıca PAC field'ı küçük olduğunda, başarısız bir authentication gözlemlenebilir olduğu için naive PAC brute-force edilebilir. Sonuç: PAC çıtayı yükseltir ama kernel R/W var olduğunda tam bir savunma değildir.

Walkthrough

Üst seviye, kavramsal (public Project Zero yazısından):

  1. Mevcut bir kernel read/write primitive'inden başla (ayrı bir memory-corruption bug'ından).
  2. Belirli kernel code path'lerinin A key'leriyle pointer imzaladığını gözlemle (signing gadget'ları).
  3. Attacker-seçimli bir değer için validly-signed bir pointer elde etmek üzere bu operasyonları zorla ya da yeniden kullan (key'i bilmeden PAC'ı forge ederek).
  4. Forge edilmiş, signed pointer'ları PAC check'lerini geçen bir JOP chain'i kurmak için kullan.
  5. Kernel'de arbitrary code çalıştır. (Azad bu tekniklerin çoğunlukla iOS 12.1.3'te düzeltildiğini bildirdi.) Tamamlayıcı brute-force açısı, PAC kısa olduğunda gözlemlenebilir auth-failure davranışını exploit eder.

Warning

Bu, turnkey bir exploit değil, PAC bypass sınıflarını gösteren bir araştırmadır. Önceden var olan bir kernel R/W primitive'ini varsayar ve Apple'ın sonradan hardening yaptığı, A12-dönemine özgü davranışı hedef alır.

Detection

  • Apple platformlarında savunma öncelikle preventive'dir (hardware + signed boot); host-seviyesi tespit sınırlıdır. PAC/auth failure'larına atıf yapan beklenmedik kernel panic'leri brute-force ya da forgery denemelerine işaret edebilir.
  • Cihazları güncel OS versiyonlarını raporlayacak/attest edecek durumda tut; güncel olmayan cihazlar maruziyettir.

Mitigation

  • Patch: belirli signing-gadget/forgery teknikleri iOS update'lerinde (12.1.3'ten itibaren) ele alındı; cihazları güncel tut.
  • Mimari hardening: daha büyük PAC field'ları, çeşitlendirilmiş key'ler/context'ler ve gadget azaltma; kernel R/W'nin weaponize edilmesini zorlaştırmak için CTRR ve PPL ile birlikte kullan.
  • PAC'ı tek bir bariyer değil, ARM Pointer Authentication tabanlı defense-in-depth'in bir katmanı olarak ele al.

References