Che cosa è iOS App Sandboxing?

iOS app sandboxing è un'architettura di sicurezza fondamentale che limita ogni applicazione al proprio contenitore dedicato, impedendogli di accedere ai file di sistema, ad altri dati delle app o risorse hardware senza il consenso esplicito dell'utente.Quando un'applicazione è installata, il sistema operativo crea una directory sandbox unica per quell'app, e tutto il suo codice, dati, preferenze e cache vivono all'interno di quella directory.

Il modello sandbox viene applicato a livello del kernel, il che significa che si applica a tutte le applicazioni, inclusi quelle distribuite attraverso l'App Store, le implementazioni aziendali e anche le applicazioni di sistema in larga misura. Il sistema operativo media ogni operazione di file system, connessione di rete e chiamata hardware, permettendo solo quelle azioni che rientrano nel diritto di crittografia dell'app.

L'architettura tecnica dietro Sandboxing

Seatbelt definisce un insieme di regole per ogni processo di app, specificando quali file, directory, endpoint di rete e servizi di sistema possono accedere al processo. Queste regole sono compilate in un profilo sandbox che viene caricato quando l'applicazione lancia. Il profilo è unico per ogni applicazione e non può essere sovrascritto dall'app stessa.

Ogni applicazione ottiene la propria directory contenitore, tipicamente situata a . All'interno di questo contenitore, il sistema divide ulteriormente lo storage in sottodirectory come , , e . L'applicazione può leggere e scrivere liberamente all'interno del proprio contenitore, ma qualsiasi tentativo di accedere a percorsi al di fuori di questo contenitore innesca una negazione dal kernel.

I profili Sandbox limitano anche la comunicazione inter-process (IPC). Le applicazioni non possono chiamare servizi di sistema arbitrario o avviare processi di sfondo senza diritti specifici. Ciò significa che anche se un'applicazione riesce a eseguire codice arbitrario, non può, ad esempio, avviare un demone che corre persistentemente in background o inviare messaggi al processo di un'altra applicazione. La combinazione di isolamento file system e restrizioni IPC forma la spina dorsale della sicurezza iOS.

Misure di sicurezza core in iOS

Sandboxing non funziona in isolamento, fa parte di un modello di sicurezza a strati che include diverse misure complementari volte a proteggere i dati degli utenti e l'integrità del sistema ad ogni livello.

Permessi di App e Controllo dell'Utente

iOS richiede app per richiedere il permesso prima di accedere a dati sensibili o hardware. Inclusi la fotocamera, il microfono, i servizi di localizzazione, la libreria di foto, i contatti, il calendario, il Bluetooth e i sensori di movimento. Le autorizzazioni sono concesse tramite un prompt runtime che appare la prima volta che l'applicazione tenta di accedere alla risorsa.

Apple ha costantemente ottimizzato i controlli delle autorizzazioni con ogni rilascio iOS. Ad esempio, iOS 14 ha aggiunto la condivisione approssimativa della posizione e la capacità di concedere l'accesso foto su una base per immagine. iOS 15 ha introdotto App Privacy Report, che registra quali risorse ha accesso ogni app. iOS 16 e 17 ulteriori notifiche di accesso a appunti, istruzioni per l'accesso al pannello di incolla e modalità di blocco per utenti ad alto rischio.

Codice di firma e convalida dell'app

Ogni applicazione che viene eseguita su iOS deve essere firmata digitalmente da Apple utilizzando un certificato rilasciato allo sviluppatore. Questo processo, noto come firma del codice, garantisce che il codice non è stato manomesso da quando è stato firmato. Quando il sistema carica un'app, verifica la firma contro l'infrastruttura chiave pubblica di Apple. Se la firma è invalida, mancante o scaduta, l'applicazione non verrà lanciata.

Il sistema verifica anche le firme di codice a runtime per librerie e framework caricati dinamicamente. Questo impedisce ad un'applicazione di caricare il codice non firmato dopo il lancio, che è una tecnica comune utilizzata dal malware per bypassare i controlli iniziali. Il servizio di notarizzazione di Apple per macOS serve uno scopo simile, ma su iOS l'applicazione è obbligatoria per tutte le applicazioni, non solo quelle distribuite attraverso l'App Store.

Crittografia dei dati a riposo e in Transit

I dispositivi iOS utilizzano la crittografia hardware-backed per proteggere i dati memorizzati sullo storage flash. Ogni dispositivo ha un motore AES dedicato integrato nel sistema-on-chip, che crittografa e decifra i dati utilizzando una chiave specifica per il dispositivo. Il sistema applica diverse classi di crittografia a diversi tipi di dati:

  • Classe A (Protezione Completa): I dati sono crittografati con una chiave derivata dal codice di accesso dell'utente ed è accessibile solo quando il dispositivo è sbloccato.
  • Classe B (Protetto fino al primo sbloccaggio): I dati diventano accessibili dopo il primo sbloccaggio e rimangono accessibili fino al riavvio del dispositivo.
  • Class C (Protetto a meno che non si apra):[ I dati sono accessibili fintanto che il file è aperto, anche se il dispositivo è bloccato.
  • Class D (Nessuna protezione): I dati sono crittografati ma la chiave è sempre disponibile dopo lo boot.

Oltre alla crittografia a riposo, iOS applica Transport Layer Security (TLS) per tutte le connessioni di rete effettuate dai servizi di sistema e da molte applicazioni. Apple richiede applicazioni per l'utilizzo di HTTPS per impostazione predefinita e ha deprecato le eccezioni di sicurezza dei trasporti (ATS) nel tempo.

Catena di avvio sicura e radici hardware di fiducia

Quando un dispositivo iOS si attiva, esegue il codice da una Boot ROM di sola lettura che viene bruciato nel chip durante la produzione. Questo Boot ROM è immutabile ed è la radice hardware della fiducia. Verifica la firma del boot loader di fase successiva (iBoot) utilizzando la chiave pubblica di Apple. iBoot quindi verifica il kernel, e il kernel verifica il sistema operativo e tutte le estensioni di sistema.

Se un componente non riesce a verificare la firma, il processo di avvio si ferma e il dispositivo entra in modalità di recupero. Questa catena di fiducia assicura che solo il software autorizzato Apple può essere eseguito sul dispositivo, fin dalla prima istruzione.

Come la sandboxing previene i vettori comuni di attacco

Comprendere l'impatto pratico della sandboxing aiuta a chiarire perché iOS è considerato una piattaforma sicura.

  • Esfiltrazione dei dati tra le app: Senza sandboxing, un'app compromessa potrebbe leggere i file di ogni altra applicazione sul dispositivo. Sandboxing impedisce questo assicurando che ogni applicazione ha il proprio file system isolato.
  • Modifica del file di sistema:[ Il codice malizioso non può sovrascrivere binari di sistema, librerie o file di configurazione perché quei file risiedono al di fuori del contenitore dell'app.
  • Accesso al taichino:[] iOS fornisce una chiave sicura per la memorizzazione di token e password sensibili. Ogni applicazione può accedere solo ai propri elementi Keychain, e il sistema lo applica a livello del kernel.
  • Abuso di processo di Background:[] Le app non possono deporre demone o agenti di sfondo senza diritti espliciti, che raramente sono concessi.
  • Hardware dirottamento delle risorse:[ Anche se un'applicazione ottiene l'accesso alla fotocamera o al microfono attraverso i prompt dei permessi, sandboxing impedisce che l'accesso ad altri hardware come il controller NFC o il Secure Enclave senza diritti separati.

Queste protezioni significano che anche gli exploit zero-click — che non richiedono alcuna interazione dell'utente — sono gravemente limitati in ciò che possono raggiungere. Un attaccante che sfrutta con successo una vulnerabilità in un'app sandboxed deve ancora affrontare la sfida di sfuggire alla sandbox per raggiungere una persistenza significativa o l'accesso dei dati.

Implicazioni per sviluppatori

Per gli sviluppatori iOS, sandboxing impone vincoli che modellano come le applicazioni sono progettate e testate. Ogni applicazione deve dichiarare i diritti e le capacità di cui ha bisogno, e Apple esamina queste dichiarazioni durante il processo di approvazione App Store.

Le implicazioni chiave dello sviluppo includono:

  • ]File system access:[[]] Gli sviluppatori non possono presumere di poter scrivere a directory arbitrarie. Tutti i contenuti generati dall'utente devono essere memorizzati nella directory dell'app e i file temporanei dovrebbero entrare .
  • Comunicazione Inter-app:[[]] La condivisione dei dati tra le app richiede meccanismi espliciti come UIActivityViewController, UIPasteboard, o gruppi di accesso condivisi Keychain, tutti che richiedono la configurazione e l'interazione degli utenti.
  • Esecuzione di base:[] Le app possono funzionare solo in background per casi di uso specifico, come la riproduzione audio, gli aggiornamenti di posizione o il fetch di sfondo.
  • Gestione delle modifiche:[[] Le capacità come le notifiche push, Apple Pay e iCloud richiedono il conferimento dei diritti del profilo.
  • Considerazioni di test:[] Gli sviluppatori devono testare le loro applicazioni su dispositivi fisici per verificare la conformità alla sandbox, in quanto il simulatore ha regole di sandbox rilassate che non riflettono il comportamento reale del dispositivo.

Xcode include caratteristiche di debug sandbox che violano l'accesso ai registri e la guida App Sandbox[]] delinea le migliori pratiche per la progettazione di app sicure e conformi alla sandbox.

Implicazioni per gli utenti

Per gli utenti di tutti i giorni, sandboxing funziona silenziosamente in background, ma la comprensione può aiutare a prendere decisioni informate circa le autorizzazioni di app e il comportamento del dispositivo. Quando un'applicazione richiede l'accesso alla fotocamera, microfono o posizione, gli utenti dovrebbero considerare se la richiesta ha senso per la funzionalità dell'app.

Gli utenti dovrebbero anche essere consapevoli che il jailbreaking rimuove le protezioni sandbox disabilitando le forze di livello del kernel. Un dispositivo jailbroken non isola più le app l'uno dall'altro o dal sistema, rendendolo vulnerabile ai malware che potrebbero rubare i dati, installare spyware o causare instabilità del sistema persistente.

Le migliori pratiche per gli utenti includono:

  • Verificare le autorizzazioni dell'app regolarmente in Impostazioni > Privacy & Sicurezza.
  • Solo concedere autorizzazioni necessarie per la funzione primaria dell'app.
  • Tenere iOS aggiornato per ricevere le ultime patch di sicurezza e miglioramenti sandbox.
  • Evitare applicazioni sideloading da fonti non attendibili, in quanto questi possono bypassare la firma del codice di Apple e la revisione di sicurezza.
  • Abilita Face ID o Touch ID per proteggere le chiavi di crittografia che salvaguardano i dati sandbox.

L'evoluzione della sicurezza iOS

Apple ha continuamente rafforzato le misure di sandboxing e sicurezza da quando iOS ha introdotto il modello con iPhone OS 2.0. I primi profili sandbox erano relativamente semplici e hanno permesso una maggiore flessibilità, ma come iOS maturato, i profili sono diventati più restrittivi e granulari. L'introduzione del sistema Entitlements]] ha dato agli sviluppatori un modo per richiedere specifiche funzionalità mantenendo il più stretto possibile la sandbox predefinita.

Tra le pietre miliari significative figurano:

  • iOS 6:[]] Introdotto per-app VPN e migliorato le classi di protezione dei dati.
  • iOS 9:[] Abilitato la sicurezza di trasporto dell'app per impostazione predefinita, costringendo le applicazioni a utilizzare HTTPS.
  • iOS 12:[]] Aggiunta una più rigorosa sandboxing per i contenuti web di Safari e la modalità di restrizione USB introdotta.
  • iOS 14:[]] Richiesto tutte le app per richiedere il permesso di tracciare gli utenti attraverso app e siti web (App Tracking Transparency).
  • iOS 16:[]] Introdotto modalità di blocco per gli utenti che affrontano minacce sofisticate, limitando gravemente la superficie di attacco.
  • iOS 17:[] Expanded Lockdown Mode e aggiunto migliorato Link Tracking Protection and Communication safety features.

Ogni iterazione chiude vettori di attacco scoperti da ricercatori di sicurezza o sfruttati in natura. Apple mantiene anche un programma di bounty bug che premia i ricercatori per trovare vulnerabilità, tra cui le fughe sandbox. Questo loop di feedback aiuta Apple a identificare le debolezze e patch prima che possano essere ampiamente sfruttate.

Conclusioni

iOS app sandboxing è un meccanismo di sicurezza fondamentale che isola ogni applicazione nel proprio contenitore, impedendo l'accesso non autorizzato alle risorse di sistema e altri dati app. Quando combinato con la firma del codice, la crittografia dei dati, la catena di avvio sicura, e le autorizzazioni granulari dell'utente, crea una difesa stratizzata che rende disponibile iOS una delle piattaforme mobili più sicure.

Per saperne di più sull'architettura di sicurezza iOS, fare riferimento alla Guida di sicurezza iOS[] e alla Guida di codifica [...].