Për FreeBSD është propozuar një zbatim i mekanizmit të izolimit të aplikacioneve, i ngjashëm me thirrjet sistemike plegde dhe unveil të zhvilluara nga projekti OpenBSD. Izolimi në plegde realizohet përmes ndalimit të thirrjeve sistemike të pavaruara nga aplikacioni, ndërsa në unveil përmes hapjes selektive të aksesit vetëm për rrugët e caktuara të skedarëve, me të cilat mund të punojë aplikacioni. Për aplikacionin formohet një lloj liste të bardhë të thirrjeve sistemike dhe rrugëve të skedarëve, ndërsa të gjitha thirrjet dhe rrugët e tjera ndalohen.
Dallimi i analogut të zhvilluar për FreeBSD të plegde dhe unveil qëndron në ofrimin e një shtrese shtesë, e cila lejon izolimin e aplikacioneve pa bërë ndryshime në kodin e tyre ose me ndryshime minimale. Le të rikujtojmë se në OpenBSD, plegde dhe unveil synojnë integrimin e ngushtë me mjedisin bazë dhe përdoren përmes shtimit të anotacioneve speciale në kodin e secilit aplikacion. Për të lehtësuar organizimin e mbrojtjes, filtrat lejojnë të shmangen detajet në nivelin e thirrjeve sistemike të veçanta dhe të manipulojnë me klasat e thirrjeve sistemike (përputhje/evitimi, leximi i skedarëve, shkrimi i skedarëve, soketët, ioctl, sysctl, nisja e proceseve, etj.). Funksionet e kufizimit të aksesit mund të thirren në kodin e aplikacionit gjatë ekzekutimit të veprimeve të caktuara, për shembull, akseset në soketë dhe skedarë mund të mbyllen pas hapjes së skedarëve të nevojshëm dhe vendosjes së lidhjeve rrjet.
Autori i portit plegde dhe unveil për FreeBSD qëllon të ofrojë mundësinë e izolimit të aplikacioneve të rastit, për çfarë është propozuar utilitari curtain, i cili lejon zbatimin e rregullave të përcaktuara në një skedar të veçantë për aplikacionet. Konfigurimi i propozuar përfshin një skedar me konfigurimet e bazë, që përcaktojnë klasat e thirrjeve sistemike dhe rrugët tipike të skedarëve, specifike për aplikacione të caktuara (punimi me tinguj, ndërveprimi rrjet, regjistrimi në log, etj.), si dhe një skedar me rregullat e aksesit të aplikacioneve specifike.
Utilita curtain mund të përdoret për të izoluara shumicën e utilitareve të pa modifikuara, proceseve server, aplikacioneve grafike dhe madje edhe seancave të tërë të desktopit. Përdorimi i përbashkët i curtain me mekanizmat e izolimit të ofruara nga nën-sistemet Jail dhe Capsicum mbështetet. Gjithashtu, është e mundur të organizohet izolimi i përmbushur, kur aplikacionet e nisura trashëgojnë rregullat e vendosura nga aplikacioni prind, duke i plotësuar ato me kufizime të veçanta. Disa operacione të bërthamës (mjetet e debuggimit, POSIX/SysV IPC, PTYs) mbrohen përmes mekanizmit të barrierave, i cili ndalon qasjen në objektet e bërthamës të krijuara nga procesi aktual ose prind.
Procesi mund të konfigurojë vetë izolimin e tij duke thirrur curtainctl ose duke përdorur funksionet plegde() dhe unveil() të ofruara nga biblioteka libcurtain, të ngjashme me funksionet e tilla nga OpenBSD. Për të monitoruar bllokimet gjatë funksionimit të aplikacionit, është parashikuar sysctl ‘security.curtain.log_level’. Qasja në protokollet X11 dhe Wayland aktivizohet veçmas duke specifikuar opsionet ‘-X’/‘-Y’ dhe ‘-W’ gjatë nisjes së curtain, por mbështetja për aplikacione grafike ende nuk është mjaft e qëndrueshme dhe ka disa probleme të pazgjidhura (problemet shfaqen kryesisht kur përdoret X11, ndërsa mbështetja për Wayland është realizuar shumë më mirë). Përdoruesit mund të shtojnë kufizime të tjera duke krijuar skedarë lokalë me rregulla (~/.curtain.conf). Për shembull, për të lejuar të shkruhet nga Firefox vetëm në drejtorinë ~/.Downloads/ mund të shtohet një seksion “[firefox]” me rregullin “~/.Downloads/: rw +”.
Implementimi përfshin modulin e bërthamës mac_curtain për kontrollin e qasjes marrëdhënës (MAC, Mandatory Access Control), një grup patch-e për bërthamën FreeBSD me implementimin e menaxherëve dhe filtrave të nevojshëm, bibliotekën libcurtain për përdorimin e funksioneve plegde dhe unveil në aplikacione, utilitarin curtain, shembuj skedarësh konfigurimi, një grup testesh dhe patch-e për disa programe në hapësirën e përdoruesit (për shembull, për të përdorur $TMPDIR për të unifikuar punën me skedarët e përkohshëm). Sa më shumë që të jetë e mundur, autori ka për qëllim të minimizojë numrin e ndryshimeve për të cilat kërkohet aplikimi i patch-ëve në bërthamë dhe aplikacione.
Burimi: opennet.ru
