noua versiune a uneltelor , destinat pentru organizarea activității mediilor izolate în Linux și funcționând la nivelul aplicațiilor utilizatorilor neprivilegiați. În practică, Bubblewrap este utilizat de proiectul Flatpak ca un strat pentru izolarea aplicațiilor lansate din pachete. Codul proiectului este scris în limbajul C și 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 în sistem a spațiilor de nume pentru identificatori de utilizator (user namespaces), care permit utilizarea într-un container a propriului set de identificatori separate, nu este necesară pentru funcționare, deoarece în mod implicit nu funcționează în multe distribuții (Bubblewrap se promovează ca o implementare suid limitată a unui subset de funcționalități ale spațiilor de nume pentru utilizatori — pentru a exclude toate identificatoarele utilizatorilor și proceselor din mediu, cu excepția celui curent, se folosesc modurile CLONE_NEWUSER și CLONE_NEWPID). Pentru o protecție suplimentară, programele rulează sub gestionarea
Bubblewrap sunt lansate în modul PR_SET_NO_NEW_PRIVS, care interzice obținerea unor privilegii noi, 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 esențială față de un proiect similar , care folosește de asemenea un model de execuție cu aplicarea setuid, constă în faptul că în Bubblewrap stratul pentru crearea containerelor include doar minimul necesar de funcționalități, iar toate funcțiile extinse necesare pentru rularea aplicațiilor grafice, interacțiunea cu desktopul și filtrarea apelurilor la Pulseaudio sunt mutate în partea Flatpak și executate deja după resetarea privilegiilor. Firejail, pe de altă parte, combină toate funcțiile în același fișier executabil, ceea ce complică auditul său și menținerea securității la .
Noua versiune se remarcă prin implementarea suportului pentru conectarea spațiilor de nume existente al utilizatorilor (user namespaces) și al proceselor (pid namespaces). Pentru gestionarea conectării spațiilor de nume au fost adăugate opțiunile „—userns”, „—userns2” și „—pidns”.
Această opțiune nu funcționează în modul setuid și necesită aplicarea unei modalități separate, care poate funcționa fără obținerea privilegiilor root, dar necesită activare.
spațiilor de nume al utilizatorilor în sistem (de obicei dezactivate în Debian și RHEL/CentOS) și nu exclude posibilitatea. pentru marginile restricțiilor „user namespaces”. Din noile funcționalități Bubblewrap 0.4 se remarcă de asemenea posibilitatea construirii cu biblioteca C musl în loc de glibc și suportul pentru salvarea informațiilor despre spațiile de nume într-un fișier de statistică în format JSON.
Sursa: opennet.ro
