App Sandboxing

Indice dei contenuti

    Il sandboxing (letteralmente «recinto di sabbia») è un meccanismo di sicurezza che esegue un’applicazione in un ambiente isolato con accesso limitato e controllato alle risorse del sistema operativo — filesystem, rete, processi, dispositivi hardware. L’obiettivo è il contenimento: se l’app è compromessa, malevola o semplicemente difettosa, il danno è circoscritto all’interno del sandbox e non si propaga al resto del sistema o alle altre applicazioni. È uno dei principi architetturali fondamentali della sicurezza dei sistemi operativi moderni, applicato sia su mobile che su desktop.

    Fondamenti tecnici

    Il sandboxing si realizza tramite meccanismi del kernel che limitano le azioni possibili di un processo:

    Namespace Linux (Android, container): isolano le risorse visibili al processo — filesystem (mount namespace), processi (PID namespace), rete (network namespace), utenti (user namespace). Un processo nel proprio namespace vede solo le risorse a lui assegnate.

    Mandatory Access Control (MAC): SELinux (Android) e MACF/Sandbox kernel extension (iOS/macOS) applicano policy che definiscono esplicitamente quali risorse ogni processo può accedere. Anche un processo che ha ottenuto root tramite exploit è limitato dalla policy MAC — non può accedere a risorse che la policy non prevede per quel processo.

    Seccomp (Linux/Android): filtro delle chiamate di sistema (syscall) permesse per un processo. Un’app Android non può eseguire syscall arbitrarie — solo quelle elencate nella whitelist. Riduce drasticamente la superficie di attacco kernel disponibile a codice malevolo in userspace.

    Capability dropping: un processo avviato con privilegi elevati li abbandona (drop) immediatamente dopo l’inizializzazione, trattenendo solo le capability strettamente necessarie. Un web server che si lega alla porta 80 (richiede CAP_NET_BIND_SERVICE) può droppare tutte le altre capability dopo il binding.

    Sandbox su iOS

    iOS ha il modello di sandboxing più restrittivo tra i sistemi operativi consumer. Ogni app è confinata nel proprio container — una directory unica sul filesystem inaccessibile alle altre app. L’app non può:

    • Leggere o scrivere file al di fuori del proprio container (salvo attraverso API esplicite come UIDocumentPickerViewController)
    • Enumerare le app installate sul dispositivo
    • Comunicare con altre app se non tramite URL scheme dichiarati o App Extensions
    • Accedere a risorse hardware (fotocamera, microfono, posizione, contatti) senza permesso esplicito dell’utente

    Il profilo di sandbox è applicato dal kernel prima che l’app esegua la prima istruzione — non c’è nessuna fase durante cui l’app ha accesso non ristretto.

    Per il modello di sandbox specifico di Android, vedi Sicurezza Android.

    Sandbox su macOS

    macOS applica l’App Sandbox alle app distribuite attraverso il Mac App Store (obbligatorio) e, sempre più, anche alle app distribuite direttamente (notarized). Il sandbox macOS è meno restrittivo di iOS per necessità di compatibilità con l’ecosistema desktop, ma limita comunque l’accesso al filesystem (solo home directory e cartelle esplicitamente concesse via Open/Save dialog), alle entitlements dichiarate e alle risorse hardware.

    Hardened Runtime (macOS): restringe ulteriormente le operazioni permesse a un processo firmato — vieta l’esecuzione di codice JIT non esplicitamente autorizzato, il caricamento di librerie non firmate, l’accesso ad aree di memoria senza permessi espliciti.

    Sandbox escape

    Un sandbox escape è lo sfruttamento di una vulnerabilità nel kernel, nel sistema di sandbox o in un servizio di sistema per uscire dall’ambiente isolato e ottenere accesso a risorse al di fuori dei confini del sandbox. È tipicamente il secondo step di un exploit chain: il primo step ottiene esecuzione di codice dentro la sandbox; il secondo evade la sandbox per ottenere privilegi a livello di sistema.

    Il valore dei sandbox escape negli exploit market riflette la difficoltà: un exploit iOS che include sia il vettore di accesso iniziale sia il sandbox escape vale ordini di grandezza più di un exploit che ferma al primo step. Pegasus, ad esempio, concatena un exploit di accesso iniziale (es. vulnerabilità WebKit o iMessage) con un sandbox escape e un privilege escalation a root.

    Sandbox in contesti non mobile

    Il concetto di sandbox si applica ampiamente al di fuori del mobile:

    • Browser: ogni tab è eseguita in un processo separato con sandbox che limita l’accesso al filesystem e alle API di sistema (Chrome site isolation, Firefox sandbox)
    • Analisi malware: ambienti sandbox come Any.run, Cuckoo, Joe Sandbox eseguono campioni sospetti in VM isolate per osservarne il comportamento senza rischi per il sistema reale
    • Container (Docker): forma di sandboxing basata su namespace Linux e seccomp — vedi container security

    Ultimo aggiornamento: