Nakon godine razvoja objavljena je nova verzija alata za organizaciju rada izoliranih okruženja Bubblewrap 0.9, koji se koristi za ograničavanje pojedinačnih aplikacija neprivilegiranih korisnika. U praksi, Bubblewrap se koristi od strane projekta Flatpak kao sloj za izolaciju aplikacija pokretanih iz paketa. Kod projekta napisan je u jeziku C i distribuira se pod LGPLv2+ licencom.
Za izolaciju se koriste tradicionalne Linux tehnologije kontejnerske virtualizacije, temeljeći se na korištenju cgroups, prostora imena (namespaces), Seccomp i SELinux. Za izvršavanje privilegiranih operacija pri postavljanju kontejnera, Bubblewrap se pokreće s pravima root (izvršna datoteka s suid-flagom) nakon čega se privilegije poništavaju nakon završetka inicijalizacije kontejnera.
Aktivacija u sustavu prostora imena идентификаторов korisnika (user namespaces), koja omogućuje korištenje vlastitog zasebnog skupa идентификаторов u kontejnerima, nije potrebna za rad jer prema zadanim postavkama ne funkcionira u mnogim distribucijama (Bubblewrap se pozicionira kao ograničena suid-implementacija podskupa mogućnosti user namespaces — za isključenje svih идентификаторов korisnika i procesa iz okruženja, osim trenutnog, koriste se načini CLONE_NEWUSER i CLONE_NEWPID). Za dodatnu zaštitu programi pokrenuti pod upravljanjem Bubblewrap pokreću se u načinu PR_SET_NO_NEW_PRIVS, koji zabranjuje stjecanje novih privilegija, na primjer, kada postoji setuid zastavica.
Izolacija na razini datotečnog sustava provodi se stvaranjem novog prostora imena točki montiranja (mount namespace) po defaultu, u kojem se pomoću tmpfs stvara prazna korijenska particija. Ova particija se po potrebi povezuje s particijama vanjskih FS-a u načinu „mount —bind“ (na primjer, pokretanjem s opcijom „bwrap —ro-bind /usr /usr“, particija /usr se prosljeđuje iz osnovnog sustava u načinu samo za čitanje). Mrežne mogućnosti su ograničene na pristup loopback sučelju uz izolaciju mrežnog staka putem flagova CLONE_NEWNET i CLONE_NEWUTS.
Ključna razlika od sličnog projekta Firejail, koji također koristi model pokretanja s primjenom setuid, je ta što Bubblewrap sloj za stvaranje kontejnera uključuje samo nužni minimum mogućnosti, dok su sve proširene funkcije potrebne za pokretanje grafičkih aplikacija, interakciju s radnom površinom i filtriranje upita na Pulseaudio, prenesene na stranu Flatpak i izvršavaju se nakon ukidanja privilegija. Firejail, s druge strane, u jednom izvršnom datoteci kombinira sve prateće funkcije, što otežava njegovu reviziju i održavanje sigurnosti na odgovarajućoj razini.
U novom izdanju:
- Iz paketa sa izvornim tekstovima uklonjeni su datoteke generirane u Autotools. Za izgradnju se sada preporučuje korištenje sustava za izgradnju Meson. Opcionalna podrška za Autotools za sada je sačuvana, ali se planira uklanjanje u budućim izdanjima.
- Dodana je opcija "—argv0" za postavljanje vrijednosti nultog argumenta komandne linije (argv[0] — ime izvršne datoteke, na primjer "—argv0 /usr/bin/test").
- Opcija "—symlink" sada djeluje samo kada simbolička veza već postoji i upućuje na željenu ciljnu datoteku.
- Dokumentirana je opcija „—cap-add“, korištena za postavljanje capability-flaga, kao što je „CAP_DAC_READ_SEARCH.“
- Povećana je informativnost grešaka prikazanih prilikom neuspjeha montaže.
- Pojednostavljen je proces izrade unit testova.
- U primjerima upotrebe obustavljena je podrška za starije verzije Pythona.
- Poboljšane su operacije alociranja memorije.
Izvor: opennet.ru
