# Sandbox (sicurezza informatica)

Nella sicurezza informatica, una sandbox è un meccanismo per eseguire applicazioni in uno spazio limitato. Solitamente fornisce un ristretto e controllato set di risorse al programma che deve essere testato, come un'area ristretta di memoria o un insieme di chiamate di sistema limitate; di norma, l'accesso alla rete, la possibilità di ispezionare il sistema ospite o leggere dai Dispositivi di Input-Output, sono disabilitati o altamente ristretti. Data la capacità di fornire un ambiente estremamente controllato, le sandbox possono essere viste come uno esempio specifico di virtualizzazione, solitamente utilizzata per eseguire programmi non testati o non attendibili, non verificati o provenienti da terze parti non riconosciute (come utenti o siti web), senza rischiare di infettare il dispositivo dove viene eseguita l'applicazione, ad esempio effettuare test su programmi non verificati che possono contenere virus o codice maligno, senza permettere al software di infettare il dispositivo ospite.

## Implementazioni

Una sandbox è implementata eseguendo il software in un’area ristretta del sistema operativo, controllando le risorse (per esempio, file descriptors, memoria, lo spazio nel file system, ecc.) che un processo può utilizzare. Le sandbox sono diventate rapidamente un rapido ed efficace meccanismo di difesa contro le intrusioni di terzi, trovando implementazione in molte delle applicazioni comunemente usate.

### Browser

Se un attaccante è in grado di trovare un exploit nel browser in modo da poter eseguire del codice malevolo sulla macchina ospite, il meccanismo della sandbox previene possibili danni al sistema. Inoltre, tramite l’utilizzo della sandbox, si previene che l’attaccante possa leggere o scrivere qualsiasi file personale presente nel sistema. In aiuto ai produttori di browser, in HTML5 è stato aggiunto un attributo sandbox al tag iframe, che abilita una serie di restrizioni per il contenuto di esso.

#### Google Chrome

Google Chrome utilizza un’architettura a multi-processo che permette molta flessibilità in termini di sicurezza. Infatti, tutta la parte di rendering di HTML e l’esecuzione di codice Javascript è isolata in una specifica classe di processi (detti renderer): in questo modo si è riusciti a creare un ambiente isolato che permette di aprire pagine web in sicurezza.

#### Mozilla Firefox

Per risolvere i problemi di sicurezza, Firefox genera dei processi figli per delimitare le risorse a disposizione di un’applicazione web. Il modo in cui Firefox genera i processi figli e interagisce con loro è comune a tutte le piattaforme per cui il browser è disponibile, mentre l’implementazione vera e propria di una sandbox per i processi figli è specifica per ogni piattaforma poiché vengono utilizzate tecnologie proprietarie di ogni sistema operativo.

#### Internet Explorer - Microsoft Edge

Sin dalla versione 7 di Internet Explorer, viene utilizzata una modalità protetta che forzava l’esecuzione del rendering di una pagina web con privilegi inferiori rispetto a quelli dei controlli del browser o dell’utente. Dalla versione 10, si aggiunge una modalità protetta avanzata (EPM), dove venne implementata una sandbox migliore ed attivata di default la semantica deny-by-default e no-read-up. Infine, nell’ultima versione del browser di Microsoft, Edge, i contenuti di una pagina web vengono sempre eseguiti all’interno di una sandbox, impedendone la disattivazione.

### Sistemi Operativi

Nei moderni sistemi operativi e alla capillare diffusione di applicazioni che possono essere installate nei computer, si è reso necessario prevedere dei meccanismi di sandboxing. Ogni piattaforma ha un approccio diverso. In Microsoft Windows, per isolare l’ambiente di esecuzione di un’applicazione, viene utilizzata una tecnologia chiamata AppContainer. Questa permette di creare ambienti isolati con accesso al minimo set di risorse necessarie per l’applicazione, in modo che, seppur venga trovata una vulnerabilità in una determinata app, non si possa accedere a più risorse di quelle specificate da AppContainer. Ad esempio, se una applicazione desidera avere accesso ad alcune periferiche del sistema, come la fotocamera, questa funzionalità è bloccata di default, consentendone l’accesso solo se esplicitamente richiesto. Lo stesso meccanismo viene utilizzato in MacOS e iOS, dove la tecnologia utilizzata viene chiamata App Sandbox.
A partire dal kernel 2.6.2 di Linux, viene implementata una funzione denominata seccomp, con la funzione di isolare il processo dalle risorse disponibili. Per quanto riguarda Android, per garantire maggior sicurezza, pur condividendo il kernel con Linux, è stata implementata una vera e propria sandbox dove le applicazioni accedono a risorse estremamente limitate.

## Vulnerabilità

Nonostante la tecnologia sandbox sia un buon metodo per proteggere i propri dispositivi da attacchi informatici, ogni giorno in rete nascono nuove minacce: nel giugno 2016 Google ha corretto un bug presente in Chrome che eludeva il meccanismo di sandboxing. L’implementazione di una sandbox può essere divisa in tre compartimenti primari: l’interprete del linguaggio di base, le librerie standard e il codice dell’applicazione non attendibile. Solitamente, le librerie standard sono l’anello debole del meccanismo, rendendo così le sandbox vulnerabili: l’utilizzo di codice Java o C# per scrivere librerie che gestiscono funzionalità importanti (come ad esempio la comunicazione di rete e la crittografia) porta delle vulnerabilità a causa dei difetti intrinseci di questi due linguaggi.
Molti utenti o organizzazioni utilizzano macchine virtuali (VM) come una sandbox: questa può essere vista come un’ulteriore sicurezza da parte dell’utente, ma le nuove generazioni di malware e trojan create da hacker black hat riescono ad individuare se viene utilizzata una VM, oltrepassandola sfruttando le possibili vulnerabilità.

### Tecniche di evasione da una sandbox

* rootkit: collezione di software che consente l’accesso ad un computer;
* Rilevamento sandbox: il codice malevolo può contenere strumenti in grado di capire se è in esecuzione in una sandbox in modo da sfruttare le vulnerabilità del suo produttore.

## Esempi di utilizzo

* Malware Testing: le sandbox vengono utilizzate per far eseguire il codice malevolo per poi studiarne il comportamento, in modo da creare delle patch di sicurezza;
* NGFW: nei firewall di nuova generazione, le sandbox vengono utilizzate per analizzare i dati che potrebbero entrare in una rete. Ad esempio, prima di aprire un allegato sospetto in un'email, questo viene aperto prima ed analizzato in modo sicuro in una sandbox, non infettando il computer dell’utente destinatario.

## Generazioni di SandBox
### Sandbox di prima generazione

"Fortinet NSE Training Institute" definisce per la prima generazione di sandbox difficile l'aggregazione delle informazioni sulle minacce per soluzioni puntuali "Point solutions"

### Sandbox di seconda generazione

"Fortinet NSE Training Institute" definisce la seconda generazione di sandbox come un processo che prevede la condivisione tempestiva di informazioni sulle minacce, visto che la prima generazione soffriva della mancanza di integrazione con altri dispositivi di sicurezza

### Sandbox di terza generazione

"Fortinet NSE Training Institute" definisce la terza generazione di sandbox come un processo che prevede automatismi e intelligenza artificiale a causa di minacce dovute ad "AI-driven attacks" ovvero attacchi guidati da intelligenze artificiali.