Le componenti di un jailbreak: tutto ciò che serve sapere!

Dopo aver parlato delle estensioni kernel, passiamo ad un argomento in tendenza negli ultimi mesi: il jailbreak! Tornato alla riscossa nella scena dopo mesi, più forte che mai. Ma quali sono le componenti che costituiscono un jailbreak?


Introduzione

Ormai lo sapranno tutti, ma è meglio ripetere i concetti per chi si avvicina a questo mondo per la prima volta; cos’è un jailbreak?

E’ semplicemente un insieme di vulnerabilità messe “insieme” per superare i meccanismi di sicurezza di Apple e per “liberare” un dispositivo con iOS dalle restrizione imposte da Apple. iOS è davvero un sistema operativo simile a macOS o Linux, ottimizzato, però, solo per un numero di dispositivi limitato. In breve, un jailbreak concede il completo accesso root al dispositivo. Significa avere il controllo completo!

La maggior parte dei jailbreak installa Cydia di default, un’app creata da Saurik che sostanzialmente è un’interfaccia per APT, un gestore di pacchetti che permette l’installazione di software da repository (sorgenti) solitamente sicure. Cydia rende l’installazione dei pacchetti userfriendly e fornisce un modo sicuro per gli sviluppatori di accettare pagamenti per tweak o temi.

Termini di uso comune

Se bazzicate in siti internet come Reddit (grazie all’utente benjibos per la guida!) avrete sicuramente letto uno (o più) dei termini riportati di seguito. Lo scopo di questo articolo non è quello di spiegare come arrivare a realizzare un jailbreak, sarebbe troppo complesso e difficilmente realizzabile attraverso degli articoli. L’obiettivo è fornire una conoscenza di base dei termini più usati nello slang del panorama del jailbreak.

  • KPP: controlla l’integrità del kernel ad intervalli casuali e crea un kernel panic se sospetta che il kernel sia stato compromesso in qualche modo; letteralmente sta per Kernel Patch Protection.
  • KTRR/AMCC: è la versione “hardware” di KPP, presente solo su processori A10 e successivi.
  • AMFI: è un estensione del kernel (ricordate il penultimo articolo?) che applica il codesign, tra l’altro è una delle dipendenze della Sandbox (com.apple.security.sandbox). Quello che fa è applicare le autorizzazioni e la firma del codice.
  • Sandbox: abbiamo dedicato un intero articolo sulla sandbox!
  • tfp0: è una mach trap (simile ad una syscall) che recupera la porta per l’attività di un particolare processo BSD, identificato da un ID, nel nostro caso l’ID 0. Il task con pid=0 è anche noto come kernel_task e contiene tutte le porte utilizzate dal kernel; consente, in parole povere, di leggere e scrivere direttamente nella memoria del kernel usando le funzioni vm_read() e vm_write().

Gli exploit necessari

È necessario concatenare più vulnerabilità per ottenere un jailbreak completo. L’ordine dei seguenti exploit può variare a seconda del jailbreak, devono però essere tutti presenti.

  • Kernel r/w: l’accesso in lettura/scrittura al kernel è fondamentale per “correggere” le protezioni successive. Con un accesso r/w, possiamo modificare i valori di memoria del kernel (come Cheat Engine su Windows!). Si ottiene il kernel r/w trovando prima di tutto il tfp0.
  • Root/setuid(0): l’accesso root è uno dei concetti chiave. Prima di tutto, setuid(0) deve essere accessibile da altre applicazioni, altrimenti app come Cydia non funzionano. Il modo più comune per diventare root nel jailbreak moderno è quello di sostituire le credenziali di un processo con quelle del kernel, sempre stando attenti al KPP. Un esempio di come funziona setuid(0) lo si può analizzare nel fork di async_wake. Le recenti modifiche di async_wake da parte di Ian Beer ad esempio, utilizzano un demone (jailbreakd) per iniettare credenziali del kernel in “processi selezionati” per abilitare la funzionalità setuid(0).
  • KPPBypass/KPPless: per patchare AMFI senza generare un kernel panic, bisogna prima bypassare KPP. Qwertyoruiopz (hacker italiano) ha trovato un modo per farlo, implementato nel suo jailbreak, yalu102 (utilizzato successivamente anche nel jailbreak di iOS 10.3.x, g0blin). Questa tecnica attacca “direttamente KPP” e non cerca di eludere KTRR/AMCC. Tuttavia, esiste un altro modo per aggirare KPP e stiamo parlando del  KPPless. E’ un concetto abbastanza complesso, che funziona in questo modo: KPPLess decomprime il kernel prima che KPP possa “intercettarlo” e non è necessario alcun attacco diretto su KPP, perchè intercettandolo si andranno a modificare anche le aree non coperte da KPP/KTRR.
  • Patch AMFI: AMFI deve essere aggiornato per consentire l’esecuzione di file binari non firmati da Apple, altrimenti app come Cydia non vengono nemmeno avviate. Esistono varie patch AMFI: con iOS 11, la soluzione più diffusa consiste nell’iniettare l’hash del file binario che si desidera avviare nella catena di trust AMFI in modo che quando il processo viene avviato AMFI, quest’ultimo “crede” che sia valido. Questa catena di controlli può essere modificata solo attraverso il Kernel r/w.
  • Sandbox Escape: questa è una parte importante in un jailbreak: senza il sandbox escape, pur possendendo un jailbreak, non sarà possibile iniettare il payload (Cydia) o accedere ai file “al di fuori” di un’app. Anche questo può essere ottenuto iniettando le credenziali del kernel nel processo che si desidera.
  • Remount del filesystem: di default, “/” è montato in sola lettura e questo è il motivo per il quale non è possibile scrivere su “/” anche con accesso root. Per aggirare questo problema, è necessario rimontare il filesystem in lettura/scrittura. Normalmente questo passaggio viene eseguito attraverso una combinazione di patch del kernel e funzioni di sistema standard, come potete vedere qui.
  • Abilitare il tfp0: una patch tfp0 è utile per abilitare le applicazioni in esecuzione come root a leggere e scrivere sul kernel e, come abbiamo visto per il Kernel r/w. Rende inoltre il downgrade possibile, andando ad abilitare ad esempio il nonce generator in NVRAM, soluzione con la quale futurerestore (popolare tool per il downgrade) funziona.

Anche per questo articolo è tutto. Per eventuali domande, curiosità o feedback potete lasciare un commento qui in basso, a presto!

NovitàAcquista il nuovo iPhone 16 su Amazon
Approfondimenti