Pre FreeBSD je navrhnutá implementácia mechanizmu izolácie aplikácií, ktorý pripomína systémové volania plegde a unveil vyvíjané projektom OpenBSD. Izolácia v plegde sa vykonáva zakázaním prístupu k systémovým volaniam, ktoré aplikácia nevyžaduje, a v unveil selektívnym otvorením prístupu iba pre určité súborové cesty, s ktorými môže aplikácia pracovať. Pre aplikáciu sa vytvára niečo ako biely zoznam systémových volaní a súborových ciest, pričom všetky ostatné volania a cesty sú zakázané.
Rozdiel vyvíjaného ekvivalentu plegde a unveil pre FreeBSD spočíva v poskytnutí dodatočnej vrstvy, ktorá umožňuje izoláciu aplikácií bez toho, aby bolo potrebné meniť ich kód alebo s minimálnymi zmenami. Pripomeňme, že v OpenBSD sú plegde a unveil navrhnuté na úzku integráciu s základným prostredím a aplikujú sa pridaním špeciálnych anotácií do kódu každej aplikácie. Pre zjednodušenie organizácie ochrany filtre umožňujú obísť detailné úrovne jednotlivých systémových volaní a manipulovať s triedami systémových volaní (vstup/výstup, čítanie súborov, zápis súborov, zásuvky, ioctl, sysctl, spúšťanie procesov atď.). Funkcie obmedzenia prístupu môžu byť volané v kóde aplikácie pri vykonávaní rôznych akcií, napríklad prístup k zásuvkám a súborom môže byť uzatvorený po otvorení potrebných súborov a nadviazaní sieťového pripojenia.
Autor portu plegde a unveil pre FreeBSD plánuje poskytnúť možnosť izolácie libovolných aplikácií, na čo je navrhnutý nástroj curtain, ktorý umožňuje aplikovať na aplikácie pravidlá definované v samostatnom súbore. Navrhnutá konfigurácia zahŕňa súbor s základnými nastaveniami, ktoré určujú triedy systémových volaní a typické súborové cesty, špecifické pre určité aplikácie (práca so zvukom, sieťová interakcia, výstup do logu atď.), ako aj súbor s pravidlami prístupu konkrétnych aplikácií.
Nástroj curtain môže byť použitý na izoláciu väčšiny nemodifikovaných nástrojov, serverových procesov, grafických aplikácií a dokonca aj celých relácií pracovnej plochy. Podporované je zdieľanie curtain s mechanizmami izolácie poskytovanými subsystémami Jail a Capsicum. Rovnako je možné organizovať vnorenú izoláciu, pri ktorej spúšťané aplikácie dedičia pravidlá nastavené rodičovskej aplikácii, ktoré dopĺňajú samostatné obmedzenia. Niektoré operácie jadra (nástroje na ladenie, POSIX/SysV IPC, PTYs) sú dodatočne chránené pomocou mechanizmu bariér, ktorý zabraňuje prístupu k objektom jadra, ktoré vytvoril nie aktuálny alebo rodičovský proces.
Proces môže sám nastaviť svoju klasifikáciu pomocou volania curtainctl alebo využitím funkcií plegde() a unveil() poskytovaných knižnicou libcurtain, ktoré sú podobné funkciám OpenBSD. Na sledovanie zablokovaní počas behu aplikácie je k dispozícii sysctl ‘security.curtain.log_level’. Prístup k protokolom X11 a Wayland je možné zapnúť samostatne prostredníctvom zadaného argumentu pri spustení curtain s voľbami „-X“/“-Y“ a „-W“, avšak podpora grafických aplikácií ešte nie je dostatočne stabilná a má rad nevyriešených problémov (problémy sa najčastejšie vyskytujú pri používaní X11, zatiaľ čo podpora Wayland je implementovaná oveľa lepšie). Používatelia môžu pridať ďalšie obmedzenia vytvorením miestnych súborov s pravidlami (~/.curtain.conf). Napríklad pre povolenie zápisu z Firefoxu len do adresáru ~/.Downloads/ môžu pridať sekciu „[firefox]“ s pravidlom „~/.Downloads/ : rw +“.
Implementácia zahŕňa modul jadra mac_curtain pre manderatný kontrol prístupu (MAC, Mandatory Access Control), súbor záplaty pre jadro FreeBSD, ktorý obsahuje potrebné spracovateľské mechanizmy a filtre, knižnicu libcurtain na využívanie funkcií plegde a unveil v aplikáciách, nástroj curtain, vzorové konfiguračné súbory, súbor testov a záplaty pre niektoré programy v užívateľskom prostredí (napríklad na používanie $TMPDIR s cieľom unifikácie práce s dočasnými súbormi). Autor má v pláne minimalizovať počet zmien, ktoré vyžadujú aplikáciu záplat na jadro a aplikácie, ak je to možné.
Zdroj: opennet.ru
