È disponibile il rilascio degli strumenti per l'organizzazione del lavoro in ambienti isolati Bubblewrap 0.5.0, generalmente utilizzato per limitare applicazioni di utenti non privilegiati. Nella pratica, Bubblewrap viene utilizzato dal progetto Flatpak come strato per l'isolamento delle applicazioni eseguite da pacchetti. Il codice del progetto è scritto in C ed è distribuito sotto la licenza LGPLv2+.
Per l'isolamento vengono utilizzate tecnologie di virtualizzazione dei contenitori tradizionali di Linux, basate sull'uso di cgroups, spazi dei nomi, Seccomp e SELinux. Per eseguire operazioni privilegiate di configurazione del contenitore, Bubblewrap viene avviato con i diritti di root (file eseguibile con flag suid) e successivamente i privilegi vengono revocati al termine dell'inizializzazione del contenitore.
L'attivazione nel sistema degli spazi dei nomi degli identificatori utente, che consentono di utilizzare set di identificatori separati nei contenitori, non è necessaria per il funzionamento, poiché per impostazione predefinita non funziona in molte distribuzioni (Bubblewrap è posizionato come un'implementazione suid limitata di un sottoinsieme delle funzionalità degli spazi dei nomi utente — per escludere tutti gli identificatori di utenti e processi dall'ambiente, ad eccezione di quello corrente, vengono utilizzati i modi CLONE_NEWUSER e CLONE_NEWPID). Per una protezione aggiuntiva, i programmi eseguiti da Bubblewrap vengono avviati in modalità PR_SET_NO_NEW_PRIVS, che vieta l'acquisizione di nuovi privilegi, ad esempio in presenza di un flag setuid.
L'isolamento a livello di filesystem avviene creando, per impostazione predefinita, un nuovo spazio dei nomi per i punti di montaggio (mount namespace), nel quale, tramite tmpfs, viene creatta una partizione radice vuota. In questa partizione, se necessario, vengono montate le partizioni del file system esterno in modalità "mount —bind" (ad esempio, avviando con l'opzione "bwrap —ro-bind /usr /usr", la partizione /usr viene trasmessa dal sistema principale in modalità di sola lettura). Le capacità di rete vengono limitate all'accesso all'interfaccia loopback con isolamento dello stack di rete tramite i flag CLONE_NEWNET e CLONE_NEWUTS.
La principale differenza rispetto al progetto simile Firejail, che utilizza anche un modello di avvio con setuid, è che in Bubblewrap lo strato per la creazione dei contenitori include solo il minimo necessario di funzionalità, mentre tutte le funzioni avanzate, necessarie per l'avvio delle applicazioni grafiche, l'interazione con il desktop e il filtraggio delle chiamate a Pulseaudio, sono spostate su Flatpak e vengono eseguite già dopo il ripristino dei privilegi. Firejail, invece, unisce in un unico file eseguibile tutte le funzioni ausiliarie, rendendo più difficile il suo audit e mantenimento della sicurezza a un livello adeguato.
Nel nuovo rilascio sono state introdotte opzioni: "--chmod" per modificare i diritti di accesso, "--clearenv" per pulire le variabili d'ambiente (eccetto PWD) e "--perms" per definire i diritti di accesso applicati durante le operazioni "--bind-data", "--dir", "--file", "--ro-bind-data" e "--tmpfs". È migliorata la diagnosi dei problemi che si verificano in caso di errore durante il montaggio in modalità bind. Per zsh è stata aggiunta la supporto per il completamento automatico dei comandi premendo tabulazione.
Fonte: opennet.ru
