Indice articolo
La sandbox nella sicurezza informatica: spieghiamo in modo semplice questo meccanismo per recintare applicazioni e limitare problemi di sicurezza al sistema e le principali modalità per implementarla in Linux. Poi come provvedere in modo pratico per i programmi che usi tutti i giorni nel tuo computer con Linux.
Sandbox e sandboxing
Sandbox, dall'inglese recinto di sabbia, indica lo spazio riservato ai bambini per giocare. Nella sicurezza informatica il sandboxing è un meccanismo per isolare applicazioni in esecuzione, solitamente allo scopo di mitigare difetti del sistema o vulnerabilità dei programmi e limitarne la diffusione.
La sandboxing consente, con differenti approcci, di eseguire programmi e applicazioni all'interno di una specie di sistema operativo virtuale, confinato. Tipicamente i programmi eseguiti in una sandbox hanno accesso limitato ai tuoi file, al sistema e alle risorse hardware e non possono eseguire modifiche permanenti.
Quindi, anche se un programma dovesse essere vulnerabile o infetto da malware, eseguirlo in una sandbox dovrebbe garantire che la minaccia non possa ripercuotersi sull'intero computer e causare danni.
In altre parole questo recinto è un ulteriore livello di sicurezza, che consente di individuare e bloccare eventuali minacce prima che queste possano diffondersi. Una strategia di sicurezza aggiuntiva che migliora la protezione complessiva.
In pratica, ciò che avviene all'interno della sandbox resta nella sandbox.
Questo meccanismo viene sfruttato anche dai programmatori nelle fasi di test di un nuovo programma. Questo viene eseguito in una sandbox per analizzarlo in modo sicuro, senza compromettere il sistema operativo. Ciò consente di valutarlo alla ricerca di potenziali vulnerabilità e per procedere alla rimozione di minacce prima che esso venga pubblicato e distribuito.
Caratteristiche e vantaggi di una sandbox
Le principali caratteristiche di una sandbox sono quindi:
- Isolamento: Il software non viene eseguito liberamente nel sistema operativo ma in un ambiente circoscritto, spesso tramite virtualizzazione dell'intero sistema operativo o tramite la c.d. containerizzazione, concetti che chiariamo più avanti;
- Limitazione di risorse: l'ambiente recintato in cui l'applicazione protetta viene eseguita, prevede limiti alle risorse cui il suo codice può accedere: limiti all'accesso a specifici file o cartelle nel sistema operativo ospite, alla comunicazione di rete o anche al numero di richieste che esso può fare al sistema operativo per avere a disposizione risorse di qualche tipo.
- Limitazione di privilegi: solitamente i programmi vengono eseguiti all'interno di sandbox con permessi amministrativi limitati, da utente standard e sono inibiti quelli di amministratore, di root, i quali soltanto permettono modifiche permanenti al sistema ospite.
- Politiche di sandboxing: tra i vantaggi dei meccanismi di sandboxing c'è la flessibilità di configurazione di differenti permessi e limiti per ciascuno dei programmi isolato;
- Analisi del comportamento: Specie in fase di test, nello sviluppo di nuovo software, il monitoraggio di un programma eseguito in una sandbox consente di verificare in modo efficiente eventuali comportamenti potenzialmente pericolosi;
- Individuazione e rimozione di minacce: la semplificazione nell'analisi di un software isolato in una sandbox permette quindi di individuare con maggiore semplicità potenziali vulnerabilità e minacce per la sicurezza ed intervenire per rimuoverle in modo mirato.
Come si implementa una sandbox
Per implementare una sandbox vi sono differenti approcci, ciascuno con i propri punti di forza a seconda dello scenario.
- Virtualizzazione: nell'articolo Installare Windows come programma di Linux ho spiegato che la virtualizzazione, in informatica, consente di creare molteplici ambienti di elaborazione, con diversi software e sistemi operativi, nel medesimo computer fisico. Uno degli usi più comuni di questa tecnologia è l’esecuzione di applicazioni destinate a differenti sistemi operativi senza doverle eseguire su un computer specifico. Ho chiarito che anche in termini di sicurezza vi sono benefici nel ricorso alla virtualizzazione. Perché in linea di principio ciò che avviene in una VM, non si ripercuote sull’intero sistema. E salvo differenti esigenze, ognuna delle VM può essere separata da tutte le altre in esecuzione in quel momento. Oppure può condividere con le altre solo una parte di servizi.
- Containerizzazione: anche di questo complicata parola ho chiarito il significato in Distribuzioni Linux immutabili, spiegando che l’installazione di programmi in un c.d. container consente di isolarla dal resto del sistema e da altre applicazioni. Ho descritto un container come una piccola scatola virtuale che include tutto ciò di cui un’applicazione necessita per funzionare.
- Browser e posta elettronica: I browser per la navigazione implementano spesso una sandbox per isolare pagine Web e plug-in dal resto del sistema operativo per limitare i rischi di sicurezza compromettere il sistema dell'utente. Anche differenti client di posta elettronica prevedono un ambiente isolato per l'apertura di allegati di alcuni tipi.
Sandboxing in Linux
In ambiente Linux sono adottate diverse strategie di sandboxing: alcune di esse sono rivolte ad aumentare la sicurezza, altre al monitoraggio allo scopo di verificare difetti e vulnerabilità. Vediamo di chiarire alcuni di questi approcci nel modo più semplice possibile e senza esagerare con i tecnicismi.
Chroot, il pioniere del sandboxing in Linux
Chroot è considerato il primo degli accorgimenti utilizzati da sistemi Unix e Linux per limitare il campo di azione di un programma. Deriva dalla contrazione delle parole change e root. È uno strumento utilizzabile da riga di comando. Serve ad illudere un programma in esecuzione e i processi software da esso avviati su quella che è la directory principale del sistema, la directory root appunto, la radice, quella che contiene tutte le altre e persino i dispositivi collegati al computer.
Normalmente, un software può accedere a tutti i dischi e le risorse del sistema operativo ma chroot permette di eseguire un programma all'interno di una sotto cartella consentendogli di accedere solo alle risorse di cui ha strettamente bisogno. Lo stratagemma impone di ricreare la struttura del sistema in una cartella apposita, nella quale vanno anche copiati tutti i file che il programma si aspetta di trovarci.
Chroot non è stato concepito per ragioni di sicurezza ma piuttosto di test e stabilità. In ogni caso, se un malintenzionato prende il controllo di un programma eseguito con chroot non potrà comunque alterare il sistema a meno di non trovare anche il modo di uscire dal perimetro stabilito.
Linux namespaces
Poi c'è lo spazio dei nomi, Linux namespaces, una caratteristica implementata nel kernel Linux che ripartisce le risorse del kernel in modo da fornire una differente visione di esso a differenti serie di processi in esecuzione. Ciascun processo viene associato ad uno specifico spazio di nomi e può vedere ed utilizzare solo le risorse ad esso associate.
C'è uno spazio di nomi legato al c.d. montaggio di dispositivi, che mostra ai processi associati una situazione dei dispositivi connessi differente da quella reale del sistema. C'è uno spazio per gli identificatori dei processi che sottrae alla vista l'elenco reale dei programmi in esecuzione nel sistema. Ce ne sono poi per mascherare l'effettivo stato dei dispositivi di rete e della connettività o l'elenco di utenti e gruppi accreditati nel sistema ed altri più complessi.
Vari tipi di container tra cui Docker usano i Linux namespaces per isolare i propri processi. Anche il browser Chrome vi ricorre per isolare i propri processi che sono a rischio di attacco dalla rete.
SELinux (Security-Enhanced linux)
Security-Enhanced Linux (SELinux) è un'architettura di sicurezza per sistemi Unix che permette agli amministratori di avere maggiore controllo su chi può accedere al sistema, introducendo un controllo obbligatorio degli accessi, mandatory access control, spesso indicato con l'acronimo MAC.
È stata originariamente sviluppata dall'Agenzia per la Sicurezza Nazionale degli Stati Uniti sfruttando alcuni moduli di sicurezza di Linux. Veniva definita come una serie di modifiche al kernel Linux e utilità per fornire un robusto e flessibile meccanismo di controllo di accesso vincolato.
La tecnologia è stata poi ceduta alla comunità open-source ed implementata nel kernel Linux a partire dal 2003. Ad oggi, soprattutto Fedora e le distribuzioni basate su Red Hat Enterprise Linux adottano il modulo SELinux per innalzare la sicurezza di permessi e liste di controllo degli accessi, isolando le applicazioni in compartimenti stagni altamente configurabili.
AppArmor
AppArmor è un modulo di sicurezza aggiuntiva per il kernel Linux e svolge compiti analoghi. È utilizzato da Debian e preinstallato anche in altre distribuzioni tra cui Ubuntu, OpenSUSE e Linux Mint. Ed è anzi un progetto attualmente mantenuto proprio da Canonical, la società di Ubuntu.
AppArmor si dichiara un sistema di sicurezza in stile MAC, il controllo obbligatorio degli accessi citato poc'anzi, per confinare singole applicazioni ad una serie di file, risorse hardware, accesso di rete tramite specifici profili. Ogni comportamento che viola regole di un profilo viene bloccato e registrato.
L'essenziale pagina web ufficiale ci spiega che AppArmor protegge proattivamente sistema operativo e applicazioni da minacce esterne ed interne, impedendo a difetti già noti o ancora ignoti delle applicazioni, di venire sfruttati da malintenzionati.
Così come fornito però AppArmor fa ben poco. Nei profili in /etc/apparmor.d
tutte le applicazioni risultano "non confinate". Un utente, dovrebbe quindi prendersi la briga di apprendere lo specifico linguaggio per personalizzarle e sfruttare convenientemente AppArmor.
Seccomp
Anche Secure Computing mode, abbreviato in seccomp è una caratteristica del kernel Linux. Sebbene non strettamente connessa al meccanismo di una sandbox, è un modo per limitare i poteri di intervento di un programma nel sistema. Essa permette di limitare le c.d. chiamate al sistema, ovvero le richieste di risorse hardware e software che un programma può effettuare. Quando il programma supera il limite stabilito viene terminato.
Può essere pericoloso consentire ad un programma di ottenere risorse illimitate dal sistema. Se un processo è compromesso, un malintenzionato, potrebbe sfruttarlo per bombardare un sistema di pretese fino a metterlo fuori uso. O per altri scopi. Seccomp è nato quindi allo scopo di ridurre la c.d. superficie di attacco di un sistema Linux, limitando le risorse a disposizione di un processo.
Una versione estesa e meno stringente di seccomp, seccomp-bpf
, che permette di stabilire varie politiche di terminazione dei processi a seconda delle richieste fatte al sistema è implementata in Android, in Firefox e nei principali meccanismi di containerizzazione disponibili in ambiente Linux.
Le principali utilità di sandboxing in Linux
Ad oggi esistono diverse utilità di contorno per l'isolamento di programmi ed il sandboxing che sono basate sulle caratteristiche di sicurezza di Linux appena esposte. Le usano i contenitori Docker, Linux Containers e Kubernetes, i programmi in formato Snap e Flatpak e tantissimi altri software e servizi.
Bubblewrap
Ad esempio c'è Bubblewrap che è stato sviluppato proprio per le applicazioni nel formato Flatpak che molte distribuzioni Linux integrano nel proprio App store o più propriamente centro software. Bubblewrap è un meccanismo minimale di sandboxing che ricorre ad un misto di spazio di nomi e seccomp per impedire ad esempio che processi avviati dal programma flatpak abbiano permessi di intervento nel sistema più estesi del programma stesso.
Bubblewrap è un meccanismo leggero ma non realizza una sandbox a tutti gli effetti secondo il Wiki di Arch Linux. Il quale opportunamente ci ricorda che Eseguire codice non verificato non è mai sicuro e che una sandbox non può cambiare lo stato delle cose.
Flatseal
Flatseal non è propriamente un utilità di sandboxing. Ma un semplice quanto utile applicativo flatpak per gestire capillarmente e in modo assai semplice i permessi delle applicazioni installate nel formato flatpak stesso. Nulla che non si possa gestire tramite le utilità flatpak da riga di comando ma con l'interfaccia grafica di Flatseal tutto diventa semplicissimo e rapido.
Con Flatseal puoi verificare le impostazioni predefinite di ciascuna di esse ed intervenire con modifiche più stringenti. Sia per la singola applicazione che globalmente, per l'intero meccanismo dei flatpak. Ovviamente potresti effettuare modifiche che impediscono al programma di funzionare correttamente se non sai cosa stai facendo. Ma con la pressione di un bottone puoi ripristinare in un istante le impostazioni predefinite
Firejail
Infine c'è Firejail che ha immediatamente catturato la mia attenzione per la sua semplicità di utilizzo anche per un utente poco esperto. Firejail è un programma che riduce il rischio di violazioni di sicurezza confinando in un ambiente limitato i programmi non verificati o considerati insicuri. Lo fa ricorrendo ai namespaces, al modulo seccomp-bpf e ad AppArmor.
La pagina web di Firejail ci dice: "Non ci sono complicati file di configurazione da modificare, connessioni da aprire e nessun processo attivo in background. Tutte le caratteristiche di sicurezza sono implementate direttamente nel kernel Linux e già disponibili in qualsiasi computer".
Ciò è possibile grazie a specifici profili che sono già configurati per tantissimi programmi tra cui browser, client torrent e altre applicazioni di rete, giochi e molte altre. Qualunque processo può venire isolato nella snella sandbox di Firejail, persino la schermata di login, applicazioni AppImage o Flatpak. L'accesso alle password, alle chiavi di cifrature e dati personali, è bloccato per impostazione predefinita per oltre 1000 applicazioni supportate per impostazione predefinita.
Firejail si usa da riga di comando, avviando il programma da confinare preceduto proprio da firejail. Scrivendo nel terminale firejail firefox
, il browser dei Mozilla viene eseguito in una sessione isolata nella sandbox di Firejail. E così qualunque altro programma installato può venire eseguito, a richiesta, nella medesima sandbox.
Confinare programmi in una sandbox con Firetools
Se vuoi fare prove di confinamento in una sandbox per i tuoi programmi di uso quotidiano ti suggerisco di installare dal tuo centro software il pacchetto firetools che include firejail, i suoi profili predefiniti ed una interfaccia grafica per modificare le impostazioni dei programmi già previsti o per creare profili personalizzati per altre applicazioni.
L'interfaccia non è certo accattivante ma appena lanci firetools, il programma mostrerà le icone di configurazione, delle statistiche e dei programmi già installati per i quali è previsto un profilo predefinito. Un doppio click sull'icona di un programma ed esso viene lanciato all'interno di firejail con il profilo predefinito.
Dalle impostazioni di configurazione puoi modificare profili incorporati o crearne di nuovi con caratteristiche interessanti che si gestiscono in modo semplice.
Puoi restringere l'accesso alla tua home, ai file temporanei o a dispositivi collegati, creando apposite differenti cartelle da usare in loro sostituzione. Puoi impedire l'accesso alla rete o limitarlo ad alcuni protocolli e anche prevedere specifici server DNS che un programma deve usare.
Nella schermata successiva puoi disattivare l'accesso a microfoni e altre periferiche audio, webcam, lettori ottici e disattivare l'accelerazione grafica oltre ad impostare i moduli kernel di sicurezza da attivare per il profilo. L'ultima schermata mostra un riepilogo del profilo che viene creato per l'applicazione su cui è possibile intervenire con opportune modifiche.
Dal momento che in presenza di certe limitazioni, questa o quella applicazione, può non funzionare correttamente, conoscere meglio firejail digitando firejail --help
nel terminale può essere di grande aiuto per risolvere eventuali problemi. Inoltre, il fatto di aver provato e recensito l'utilità non fa di me un soggetto in grado di rispondere a qualunque domanda ed è quindi assai utile postare una richiesta nel forum della tua distribuzione Linux se una ricerca web non ti fornisce risultati soddisfacenti.
Conclusioni
I criteri di sicurezza nativi di un sistema Linux sono molteplici e vengono in parte dalla enorme esperienza sul campo che il pinguino ha maturato nei server web, di posta ed altri che da sempre costituiscono la spina dorsale della grande rete internet. Quegli stessi criteri sono utilizzabili anche dal singolo utente che usa Linux nel proprio computer personale. Certamente richiedono un po' di curiosità e desiderio di approfondimento dei meccanismi sottostanti il desktop con cui interagisci quotidianamente.
Il meccanismo delle sandbox ed alcune delle utilità descritte possono limitare i rischi connessi ad applicazioni non fidate, ma eseguire tali applicazioni in una sandbox non significa essere completamente al sicuro. E anche se lasciando Windows per Linux già sei ad un buon punto per la sicurezza della tua postazione, buon senso ed esperienza sono sempre indispensabili per limitare i problemi.
Spero di esserti stato di aiuto per ulteriori approfondimenti sul tema e ti ringrazio per la lettura.