Rilascio di Bubblewrap 0.6, un livello per creare ambienti isolati

È disponibile il rilascio di strumenti per l'organizzazione del lavoro in ambienti isolati Bubblewrap 0.6, solitamente utilizzato per limitare le singole applicazioni di utenti non privilegiati. In pratica Bubblewrap viene utilizzato dal progetto Flatpak come livello per isolare le applicazioni lanciate dai pacchetti. Il codice del progetto è scritto in C ed è distribuito sotto la licenza LGPLv2+.

Per l'isolamento vengono utilizzate le tradizionali tecnologie di virtualizzazione dei container Linux, basate sull'utilizzo di cgroup, namespace, Seccomp e SELinux. Per eseguire operazioni privilegiate per configurare un contenitore, Bubblewrap viene avviato con i diritti di root (un file eseguibile con un flag suid) e quindi reimposta i privilegi dopo l'inizializzazione del contenitore.

L'attivazione degli spazi dei nomi utente nel sistema degli spazi dei nomi, che consente di utilizzare il proprio set separato di identificatori nei contenitori, non è richiesta per il funzionamento, poiché non funziona per impostazione predefinita in molte distribuzioni (Bubblewrap è posizionato come un'implementazione suid limitata di un sottoinsieme di funzionalità degli spazi dei nomi utente: per escludere tutti gli identificatori di utenti e processi dall'ambiente, eccetto quello corrente, vengono utilizzate le modalità CLONE_NEWUSER e CLONE_NEWPID). Per ulteriore protezione, i programmi eseguiti sotto Bubblewrap vengono avviati nella modalità PR_SET_NO_NEW_PRIVS, che impedisce l'acquisizione di nuovi privilegi, ad esempio, se è presente il flag setuid.

L'isolamento a livello di file system viene ottenuto creando per impostazione predefinita un nuovo spazio dei nomi di montaggio, in cui viene creata una partizione root vuota utilizzando tmpfs. Se necessario, le partizioni FS esterne vengono collegate a questa partizione nella modalità “mount —bind” (ad esempio, quando avviata con l'opzione “bwrap —ro-bind /usr /usr”, la partizione /usr viene inoltrata dal sistema principale in modalità di sola lettura). Le funzionalità di rete sono limitate all'accesso all'interfaccia di loopback con isolamento dello stack di rete tramite i flag CLONE_NEWNET e CLONE_NEWUTS.

La differenza fondamentale rispetto al progetto simile Firejail, che utilizza anch'esso il modello di lancio setuid, è che in Bubblewrap il livello di creazione del contenitore include solo le capacità minime necessarie e tutte le funzioni avanzate necessarie per eseguire applicazioni grafiche, interagire con il desktop e filtrare le richieste a Pulseaudio, trasferito sul lato Flatpak ed eseguito dopo che i privilegi sono stati ripristinati. Firejail, d'altro canto, combina tutte le funzioni correlate in un unico file eseguibile, il che rende difficile il controllo e il mantenimento della sicurezza al livello adeguato.

Nella nuova versione:

  • Aggiunto supporto per il sistema di assemblaggio Meson. Per ora è stato mantenuto il supporto per la creazione con Autotools, ma verrà rimosso in una versione futura.
  • Implementata l'opzione "--add-seccomp" per aggiungere più di un programma seccomp. Aggiunto un avviso che se si specifica nuovamente l'opzione "--seccomp", verrà applicato solo l'ultimo parametro.
  • Il ramo master nel repository git è stato rinominato main.
  • Aggiunto supporto parziale per la specifica REUSE, che unifica il processo di specifica delle informazioni su licenza e copyright. A molti file di codice sono state aggiunte intestazioni SPDX-License-Identifier. Seguendo le linee guida REUSE è più semplice determinare automaticamente quale licenza si applica a quali parti del codice dell'applicazione.
  • Aggiunto controllo del valore del contatore degli argomenti della riga di comando (argc) e implementata un'uscita di emergenza se il contatore è zero. La modifica aiuta a bloccare i problemi di sicurezza causati dalla gestione errata degli argomenti della riga di comando passati, come CVE-2021-4034 in Polkit.

Fonte: opennet.ru

Aggiungi un commento