Discussion

🍏 [VIP Elite] iOS Kernel Debugging: Jailbreak Olmadan Uygulama Sandbox'ını Aşma

Started by İMRAN · 06 Jan 2026 23:41 · 7 Views · 0 Replies
Thread Starter #0
⚠️ YASAL UYARI VE SORUMLULUK REDDİ (DISCLAIMER):

Bu doküman, iOS Güvenlik Araştırmacıları ve Exploit Geliştiricileri için; Apple'ın XNU çekirdeği ve Sandbox mimarisindeki zafiyetleri analiz etmek amacıyla EĞİTİM ve ARAŞTIRMA AMAÇLI hazırlanmıştır.

Burada anlatılan tekniklerin (Kernel Read/Write, PAC Bypass) izniniz olmayan cihazlarda kullanılması suçtur. Apple Bug Bounty programı haricinde bu zafiyetlerin kötüye kullanılması yasal sorumluluk doğurur. Oluşabilecek cihaz hasarlarından (Bootloop) ve yasal süreçlerden uygulayıcı sorumludur.

1. Giriş: "Walled Garden"ın Duvarlarını Yıkmak

iOS uygulamaları, Sandbox adı verilen dijital bir hücrede yaşar. Bir uygulama, diğer uygulamanın verisine erişemez, sistem dosyalarını okuyamaz.

Geleneksel "Jailbreak", bu hücreleri tamamen yok edip sisteme kalıcı bir yama (patch) yapar. Ancak modern araştırmacılar için Jailbreak "gürültülü" ve kararsızdır.

Bizim hedefimiz:

  1. Standart bir App Store uygulaması gibi davranmak.
  2. Çekirdek (Kernel) seviyesinde bir açık bulmak.
  3. Jailbreak aracı kurmadan, sadece bellek (RAM) üzerinde kernel yetkilerine sahip olmak ve sistemi canlı izlemek (Debugging).

2. Hedef: XNU Kernel ve IOKit

iOS'un kalbinde XNU çekirdeği yatar. Ancak saldırı yüzeyinin en geniş olduğu yer, donanım sürücülerini yöneten IOKit framework'üdür. Ekran, GPU, USB sürücüleri burada çalışır.

Neden IOKit?IOKit, C++ ile yazılmıştır ve karmaşık nesne yapılarına sahiptir. C++'ın sanal fonksiyon tabloları (vtable) ve bellek yönetimi hataları, kernel'a giriş biletidir.


3. Aşama 1: Sandbox Escape (Hücreden Kaçış)

Bir uygulama kernel'a saldırmadan önce, kendi kısıtlı alanından (App Sandbox) dışarıya elini uzatabilmelidir.

Bunun için XPC (Inter-Process Communication) servisleri ve Mach Port'ları kullanılır.

Saldırı Mantığı:Uygulama, sistemdeki yetkili bir servise (örneğin com.apple.nehelper - Network Extension) bozuk bir mesaj yollar.Eğer bu servis, mesajı işlerken hata yaparsa ve çökmezse; saldırgan o servisin yetkilerini ele geçirebilir. Artık "App Sandbox"ında değil, "System Service" yetkisindeyizdir.


4. Aşama 2: Kernel Read/Write (kRW) Primitifi Elde Etme

Sandbox'tan çıktık ama hala sistemin efendisi (Kernel) değiliz. Kernel belleğini okuyup yazabilmemiz (Read/Write Primitive) gerekir.

En popüler yöntem Heap Spraying & Use-After-Free (UAF) tekniğidir:

  1. Hazırlık: Kernel belleğinde belirli boyutlarda binlerce nesne oluşturulur (Heap Feng Shui).
  2. Tetikleme: IOKit sürücüsündeki bir hata kullanılarak bir nesne serbest bırakılır (Free) ama referansı silinmez.
  3. Yerine Geçme: Serbest kalan o boşluğa, saldırgan kendi sahte verisini yazar.
  4. Kullanım: Kernel, o eski nesneyi kullanmaya çalıştığında, aslında saldırganın sahte nesnesini kullanır.
Bu sayede saldırgan, kernel'ın herhangi bir adresini okuyabilir veya değiştirebilir hale gelir.


5. Aşama 3: The Boss Fight - PAC (Pointer Authentication Codes)

iPhone XS (A12 Çip) ve sonrasında, Apple PAC korumasını getirdi.Eskiden kernel'daki bir fonksiyonun adresini değiştirip (Overwrite), "Benim kodumu çalıştır" diyebilirdik.

PAC, bellek adreslerine kriptografik bir imza ekler.

  • Adres: 0xffff...
  • İmza: 0x3a...
Eğer siz adresi değiştirirseniz ama imzayı doğru hesaplayamazsanız (ki anahtar donanıma gömülüdür), işlemci hatayı fark eder ve sistemi kilitler (Kernel Panic).

PAC Bypass / Forging:Modern exploitler, PAC'ı kırmak yerine PAC-Safe yöntemler kullanır.

  • Data-Only Attacks: Kod akışını değiştirmek yerine, sadece "Yetkili miyim?" sorusunun cevabını tutan değişkeni (örneğin proc->ucred->cr_uid) bellekte 0 (Root) olarak değiştiririz. PAC genellikle veri pointerlarını değil, kod pointerlarını korur.

6. Jailbreak Olmadan Debugging: "Kernel Introspection"

Normalde kernel debug etmek için özel bir kablo (DCSD) veya kdp protokolü gerekir. Ancak exploit elimizdeyse, kendi debugger'ımızı yazarız.

Jailbreak yapmadan, cihazdaki kernel'ı incelemek için şu adımlar izlenir:

  1. Offset Bulma: Kernel'ın bellekte nereye yüklendiğini (KASLR Slide) buluruz.
  2. Snapshot Alma: kread() (Kernel Read) fonksiyonumuzla, proc_list (işlem listesi) gezilir ve bellekteki tüm aktif işlemler, açık dosyalar ve ağ bağlantıları bir dosyaya dökülür.
  3. Canlı Yama (Live Patching): Jailbreak kurmadan, sadece o anlık ihtiyaç için; örneğin SSL Pinning yapan fonksiyonun başlangıcındaki "Check" komutunu bellekte return true ile değiştiririz.
Cihaz yeniden başladığında her şey orijinal haline döner. İz bırakmaz.


7. Pratik Örnek:

Diyelim ki bir uygulamanın ağ trafiğini izlemek istiyorsunuz ama uygulama VPN/Proxy korumalı.

  1. Kernel exploit ile belleğe eriş.
  2. Hedef uygulamanın task_struct yapısını bul.
  3. Uygulamanın file_desc (dosya tanımlayıcıları) tablosundaki socket yapısına git.
  4. Soketin yönlendirme tablosunu bellekte değiştirerek trafiği kendi IP adresine akıt.
Bu işlem, uygulamanın kendi içinde çalışan hiçbir güvenlik kontrolüne takılmaz, çünkü müdahale uygulamanın "altında", çekirdek seviyesinde yapılmıştır.


8. Sonuç: Zirvedeki Bayrak

iOS Kernel Debugging, satranç oynamak gibidir. Karşınızda dünyanın en değerli şirketinin en zeki mühendisleri var. PAC, PPL (Page Protection Layer) ve KTRR (Kernel Text Read-Only Region) gibi devasa savunma mekanizmaları var.

Ancak unutmayın: Savunma her zaman %100 başarılı olmak zorundadır, saldırganın ise sadece bir kere başarılı olması yeterlidir.

You must be logged in to reply.

0 quotes selected