Summaries

University notes in Markdown format from Obsidian.

Il sandboxing è un meccanismo di isolamento progettato per eseguire applicazioni (potenzialmente non affidabili) in un ambiente protetto, garantendo che eventuali errori o comportamenti malevoli non danneggino il resto del sistema.

1. Ambiti di applicazione

È fondamentale per:

  • Programmi arbitrari scaricati da Internet.
  • Codice che manipola dati complessi provenienti dalla rete.
  • Applicazioni che devono essere isolate per prevenire l'escalation dei privilegi.

2. Tecniche di Isolamento

Isolamento del Sistema Operativo

Utilizza le primitive del kernel (UID/GID in UNIX) per isolare i processi. Tuttavia, questo isolamento lavora a grana grossa.

Virtual Machine (VM)

Rappresentano l'isolamento più stringente. Ogni VM ha un proprio Sistema Operativo e risorse virtualizzate.

  • Pro: Se una VM è infetta, il malware è confinato. Il codice non deve essere modificato per essere "sandboxato".
  • Contro: Overhead di CPU/memoria. I driver dell'host possono essere un punto di vulnerabilità (vulnerabilità del monitor virtuale).

Isolamento a livello di linguaggio e binario

Offre una grana più fine:

  • JavaScript: Isolamento logico all'interno del browser.
  • Strumentazione Binaria (NativeClient): Modifica o verifica il codice eseguibile per garantirne la sicurezza.

3. Sandboxing x86 nei Browser

L'obiettivo è eseguire codice nativo (C/C++) nel browser per ottenere alte prestazioni (giochi, editing video) o supportare app legacy, senza compromettere la sicurezza dell'host.

Approcci storici e moderni:

  1. Fiducia nello sviluppatore: Chiedere all'utente di autorizzare codice firmato. Limite: L'utente spesso non è consapevole dei rischi.
  2. Protezione Hardware: Eseguire il codice in uno spazio utente sicuro. Limite: Richiede supporto specifico del kernel e dell'hardware, spesso affetti da vulnerabilità proprie.
  3. Software Fault Isolation (SFI): Verificare ogni istruzione del binario x86 prima dell'esecuzione. Questa è la tecnica usata in Native Client (NaCl) di Google.

4. Native Client (NaCl)

Garantisce che un modulo non esegua codice non autorizzato e non acceda a memoria fuori dai limiti.

  • Verifica: Il codice deve seguire regole rigide (es. nessuna istruzione privilegiata, allineamento delle istruzioni).
  • Interfaccia: Il codice sandboxato comunica con l'esterno solo tramite interfacce controllate (PPAPI), prevenendo chiamate di sistema dirette al kernel dell'host.