Versiunea instrumentului pentru organizarea muncii în medii izolate Bubblewrap 0.5.0 este disponibilă, fiind folosită în mod obișnuit pentru a restricționa aplicațiile utilizatorilor neprivilegiați. În practică, Bubblewrap este utilizat de proiectul Flatpak ca un strat pentru izolarea aplicațiilor care sunt rulate din pachete. Codul proiectului este scris în limbajul C și este distribuit sub licența LGPLv2+.
Pentru izolare se folosesc tehnologii tradiționale de virtualizare a containerelor în Linux, bazate pe utilizarea cgroups, spațiilor de nume (namespaces), Seccomp și SELinux. Pentru a efectua operațiuni privilegiate de configurare a containerului, Bubblewrap este lansat cu drepturi root (fișierul executabil are flag-ul suid) cu resetarea privilegiilor după finalizarea inițializării containerului.
Activarea sistemului de spații de nume pentru identificatorul utilizatorului (user namespaces), care permit utilizarea unui set propriu de identificatori în containere, nu este necesară pentru funcționare, deoarece în mod implicit nu funcționează în multe distribuții (Bubblewrap este poziționat ca o implementare suid limitată a unui subset de funcționalități user namespaces — pentru a exclude toți identificatorii utilizatorilor și proceselor din mediu, cu excepția celui curent, se utilizează modurile CLONE_NEWUSER și CLONE_NEWPID). Pentru o protecție suplimentară, programele rulabile sub Bubblewrap sunt lansate în modul PR_SET_NO_NEW_PRIVS, care interzice obținerea de noi privilegii, de exemplu, în prezența flag-ului setuid.
Izolarea la nivelul sistemului de fișiere se realizează prin crearea, în mod implicit, a unui nou spațiu de nume pentru punctele de montare (mount namespace), în care, cu ajutorul tmpfs, se creează un director rădăcină gol. În acest director, dacă este necesar, se atașează partiții ale FS externe în modul «mount —bind» (de exemplu, la pornirea cu opțiunea «bwrap —ro-bind /usr /usr», partiția /usr este transmisă din sistemul principal în modul doar pentru citire). Capacitățile de rețea sunt restricționate la accesul la interfața loopback, izolând stiva de rețea prin flagurile CLONE_NEWNET și CLONE_NEWUTS.
Diferența cheie față de proiectul similar Firejail, care folosește de asemenea un model de lansare cu utilizarea setuid, este că în Bubblewrap stratul pentru crearea containerelor include doar minimul necesar de funcționalități, iar toate funcțiile extinse necesare pentru a lansa aplicații grafice, interacțiunea cu desktopul și filtrarea apelurilor către Pulseaudio, sunt externalizate către Flatpak și executate deja după resetarea privilegiilor. Firejail, pe de altă parte, combină toate funcțiile asociate într-un singur fișier executabil, ceea ce complică auditul său și menținerea securității la un nivel adecvat.
Noua versiune oferă opțiuni: „—chmod” pentru modificarea permisiunilor, „—clearenv” pentru curățarea variabilelor de mediu (cu excepția PWD) și „—perms” pentru stabilirea permisiunilor ce se aplică la executarea operațiunilor „—bind-data”, „—dir”, „—file”, „—ro-bind-data” și „—tmpfs”. A fost îmbunătățită diagnosticul problemelor ce apar la eșuarea montării în modul bind. Suportul pentru completarea automată a comenzilor prin apăsarea tastei Tab a fost adăugat pentru zsh.
Sursa: opennet.ro
