Pentru FreeBSD este dezvoltat un mecanism de izolare, similar cu plegde și unveil

Pentru FreeBSD a fost propusă o implementare a mecanismului de izolare a aplicațiilor, similară cu apelurile de sistem plegde și unveil dezvoltate de proiectul OpenBSD. Izolarea în plegde se realizează prin interzicerea accesului la apelurile de sistem neutilizate de aplicație, iar în unveil prin deschiderea selectivă a accesului doar pentru anumite căi de fișiere cu care aplicația poate lucra. Pentru aplicație se formează un fel de listă albă a apelurilor de sistem și căilor de fișiere, iar toate celelalte apeluri și căi sunt interzise.

Diferenta dintre analogul plegde și unveil dezvoltat pentru FreeBSD constă în furnizarea unei suprapunte suplimentare, care permite izolarea aplicațiilor fără a aduce modificări în codul lor sau cu modificări minime. Să ne amintim că, în OpenBSD, plegde și unveil sunt concepute pentru o integrare strânsă cu mediul de bază și sunt utilizate prin adăugarea de anotări speciale în codul fiecărei aplicații. Pentru simplificarea organizării protecției, filtrele permit ocolirea detaliilor la nivel de apeluri de sistem individuale și manipularea claselor de apeluri de sistem (input/output, citire fișiere, scriere fișiere, socket-uri, ioctl, sysctl, lansare procese etc.). Funcțiile de restricționare a accesului pot fi apelate în codul aplicației pe măsură ce se execută anumite acțiuni, de exemplu, accesul la socket-uri și fișiere poate fi închis după deschiderea fișierelor necesare și stabilirea conexiunii de rețea.

Autorul portului plegde și unveil pentru FreeBSD intenționează să ofere posibilitatea izolării aplicațiilor arbitrare, pentru care a fost propusă utilitarul curtain, care permite aplicarea regulilor definite într-un fișier separat la aplicații. Configurarea propusă include un fișier cu setările de bază, care definesc clasele de apeluri de sistem și căile de fișiere tipice, specifice pentru anumite aplicații (lucrul cu sunetul, interacțiune de rețea, ieșire în jurnal etc.), precum și un fișier cu regulile de acces pentru aplicații specifice.

Utilitarul curtain poate fi utilizat pentru izolarea majorității utilitariilor nemodificate, proceselor serverului, aplicațiilor grafice și chiar a întregilor sesiuni de desktop. Este acceptată utilizarea curtain în combinație cu mecanismele de izolare oferite de subsistemele Jail și Capsicum. De asemenea, este posibilă organizarea unei izolări înnăscute, în care aplicațiile lansate moștenesc regulile stabilite aplicației părinte, completându-le cu constrângeri separate. Unele operațiuni ale nucleului (instrumente de depanare, POSIX/SysV IPC, PTYs) sunt suplimentar protejate printr-un mecanism de bariere care împiedică accesul la obiectele nucleului create de procesele curente sau părinte.

Procesul poate să configureze propriile sale măsuri de izolare prin apelarea curtainctl sau folosind funcțiile oferite de biblioteca libcurtain, pledge() și unveil(), similare cu funcțiile corespunzătoare din OpenBSD. Pentru a monitoriza blocările pe parcursul funcționării aplicației, este prevăzut sysctl ‘security.curtain.log_level’. Accesul la protocoalele X11 și Wayland este activat separat prin specificarea opțiunilor ‘-X’/ ‘-Y’ și ‘-W’ la lansarea curtain, însă suportul pentru aplicațiile grafice nu este încă suficient de stabilizat și are o serie de probleme nerezolvate (problemele se manifestă în principal la utilizarea X11, iar suportul pentru Wayland este implementat semnificativ mai bine). Utilizatorii pot adăuga constrângeri suplimentare prin crearea de fișiere locale cu reguli (~/.curtain.conf). De exemplu, pentru a permite scrierea din Firefox doar în directorul ~/Downloads/, se poate adăuga o secțiune “[firefox]” cu regula “~/Downloads/ : rw +”.

Implementarea include un modul al nucleului mac_curtain pentru controlul de acces mandatoriu (MAC, Mandatory Access Control), un set de patch-uri pentru nucleul FreeBSD cu implementarea handlerelor și filtrelor necesare, biblioteca libcurtain pentru utilizarea funcțiilor pledge și unveil în aplicații, utilitarul curtain, exemple de fișiere de configurare, un set de teste și patch-uri pentru unele programe în spațiul utilizatorului (de exemplu, pentru utilizarea $TMPDIR în scopul unificării lucrului cu fișiere temporare). Autorul intenționează, pe cât posibil, să minimizeze numărul de modificări pentru care este necesară aplicarea de patch-uri la nucleu și aplicații.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster