De release van de Bubblewrap-toolset voor het organiseren van geïsoleerde omgevingen 0.6 is beschikbaar. Dit wordt doorgaans gebruikt om afzonderlijke toepassingen van niet-geprivilegieerde gebruikers te beperken. In de praktijk wordt Bubblewrap door het Flatpak-project gebruikt als een laag voor de isolatie van geïnstalleerde toepassingen. De projectcode is geschreven in C en wordt verspreid onder de LGPLv2+-licentie.
Voor isolatie worden traditionele Linux-technologieën voor containervirtualisatie gebruikt, gebaseerd op cgroups, namespaces, Seccomp en SELinux. Om geprivilegieerde operaties voor het instellen van de container uit te voeren, wordt Bubblewrap met root-rechten uitgevoerd (uitvoerbare bestanden met de suid-vlag) en worden de privileges na de initialisatie van de container weer teruggezet.
Activatie in het systeem van gebruikers-id ruimte (user namespaces), waarmee in containers een eigen, afzonderlijke set id's kan worden gebruikt, is niet vereist voor het functioneren, omdat het standaard niet werkt in veel distributies (Bubblewrap wordt gepositioneerd als een beperkte suid-implementatie van een subset van de mogelijkheden van user namespaces - om alle id's van gebruikers en processen uit de omgeving, behalve de huidige, uit te sluiten, worden de modi CLONE_NEWUSER en CLONE_NEWPID gebruikt). Voor extra bescherming worden programma's die onder Bubblewrap worden uitgevoerd, gestart in de PR_SET_NO_NEW_PRIVS-modus, die het verkrijgen van nieuwe privileges verbiedt, bijvoorbeeld bij aanwezigheid van de setuid-vlag.
Isolatie op het niveau van het bestandssysteem wordt gerealiseerd door standaard het creëren van een nieuwe namespace voor mountpunten, waarin een lege root-partitie wordt aangemaakt met behulp van tmpfs. In deze partitie worden indien nodig externe bestandssysteem-partities gekoppeld in de modus 'mount --bind' (bijvoorbeeld bij uitvoering met de optie 'bwrap --ro-bind /usr /usr' wordt de partitie /usr vanuit het hoofd systeem in alleen-lezen modus doorgegeven). Netwerkfunctionaliteiten worden beperkt tot toegang tot de loopback-interface met isolatie van de netwerkstack via de vlaggen CLONE_NEWNET en CLONE_NEWUTS.
Een belangrijk verschil met een vergelijkbaar project Firejail, dat ook een op setuid gebaseerde startmodel gebruikt, is dat de laag voor het creëren van containers in Bubblewrap alleen de absoluut noodzakelijke permissies omvat, terwijl alle geavanceerde functies die nodig zijn voor het uitvoeren van grafische applicaties, interactie met de desktop en filtering van verzoeken naar Pulseaudio, naar de kant van Flatpak zijn verplaatst en pas na het intrekken van de privileges worden uitgevoerd. Firejail daarentegen combineert alle bijbehorende functies in één uitvoerbaar bestand, wat het auditproces en het handhaven van veiligheid op een goed niveau bemoeilijkt.
In de nieuwe release:
- Ondersteuning voor het Meson-buildsysteem is toegevoegd. Ondersteuning voor het bouwen met Autotools blijft voorlopig bestaan, maar zal in een van de volgende releases worden verwijderd.
- De optie ‘—add-seccomp’ is geïmplementeerd voor het toevoegen van meer dan één seccomp-programma. Er is een waarschuwing toegevoegd dat bij het herhaaldelijk opgeven van de ‘—seccomp’-optie alleen de laatste parameter zal worden toegepast.
- De master-tak in de git-repository is hernoemd naar main.
- Deelondersteuning voor de REUSE-specificatie is toegevoegd, die het proces van het vermelden van licentie- en auteursrechttinformatie uniform maakt. In veel codebestanden zijn SPDX-License-Identifier-koppen toegevoegd. Het volgen van de REUSE-richtlijnen vereenvoudigt de automatische identificatie van welke licentie van toepassing is op welke delen van de applicatiecode.
- Controle op de waarde van de argumentteller (argc) voor de commandoregel is toegevoegd en er is een nooduitgang geïmplementeerd voor het geval de teller nul is. Deze wijziging helpt om beveiligingsproblemen te blokkeren die worden veroorzaakt door een onjuiste verwerking van de doorgegeven argumenten op de commandoregel, zoals CVE-2021-4034 in Polkit.
Bron: opennet.ru
