Планирано је да се механизам за изолацију залога пренесе на Линук

Недавно је аутор стандардне C библиотеке Cosmopolitan и Redbean платформе најавио имплементацију механизма изолације pledge() за Linux.

Првобитно развијен од стране пројекта OpenBSD , Pledge вам омогућава да селективно забраните апликацијама приступ некоришћеним системским позивима (креирањем беле листе системских позива за апликацију и забраном других позива). За разлику од механизама контроле приступа системским позивима доступних у Линуксу, као што је seccomp, Pledge је од темеља дизајниран да буде што једноставнији за коришћење.

Неуспела иницијатива за изоловање апликација у основном окружењу ОпенБСД коришћењем механизма систраце показала је да је изолација на нивоу појединачних системских позива превише компликована и да одузима много времена.

Алтернативно, предложена је залога (plegge), која је омогућила креирање правила изолације без улажења у детаље и манипулације припремљеним класама приступа.

На пример, понуђене класе су стдио (улаз/излаз), рпатх (датотеке само за читање), впатх (уписивање датотека), цпатх (креирање датотека), тмппатх (рад са привременим датотекама), инет (мрежа утичница), уник (уникс сокети ), днс (ДНС резолуција), гетпв (приступ за читање корисничкој бази података), иоцтл (иоцтл позив), проц (контрола процеса), екец (процеси покретања) и ид (контрола дозвола).

Правила за рад са системским позивима су наведена у облику анотација које укључују листу дозвољених класа системских позива и низ путања датотека где је приступ дозвољен. Након компајлирања и покретања модификоване апликације, језгро преузима задатак праћења усклађености са наведеним правилима.

Одвојено, развија се имплементација залог за ФрееБСД, која се одликује способношћу да се апликације изолују без уношења измена у њихов код, док је у ОпенБСД-у позив залагања усмерен на чврсту интеграцију са основним окружењем и додавање напомена у код сваког од њих.

Заклетва је као забрањено воће које сви жудимо када шеф каже да треба да користимо ствари као што је Линук. Зашто је то важно? То је зато што пледге() заправо чини безбедност разумљивом. Линук никада заиста није имао ниво сигурности који обични смртници могу да разумеју.

Програмери порта за Linux pledge следили су пример FreeBSD-а и, уместо измена кода, припремили су додатни услужни програм са pledge.com који вам омогућава да примените ограничења без измене кода ваше апликације. На пример, да бисте покренули услужни програм curl са приступом само класама системских позива stdio, rpath, inet и threadstdio, једноставно покрените `./pledge.com -p 'stdio rpath inet thread' curl http://example.com`.

Услужни програм ради на свим Linux дистрибуцијама од RHEL6 па надаље и не захтева root приступ. Поред тога, на основу библиотеке cosmopolitan, обезбеђен је API за управљање ограничењима у C програмском коду, омогућавајући, између осталог, креирање енклава за селективно ограничавање приступа одређеним функцијама апликације.

У прошлости је било неколико програмера који су ово испробали. Нећу да наводим имена, јер већина ових пројеката никада није завршена. Када је у питању СЕЦОМП, онлајн туторијали објашњавају само како ставити системске позиве на белу листу, тако да већина људи губи интересовање пре него што схвате како да филтрирају аргументе. Пројекти који су напредовали такође су имали пропусте као што је омогућавање промене сетуид/сетгид/лепљивих битова. Стога, ниједна од тренутних алтернатива не би требало да се користи. Мислим да нас овај напор доводи много ближе томе да имамо пледге() него икада раније.

Имплементација не захтева промене језгра: ограничења услужних програма се преводе у СЕЦЦОМП БПФ правила и обрађују коришћењем Линук-овог природног механизма за изолацију системских позива. На пример, позивање обећања("стдио рпатх", 0) ће се претворити у БПФ филтер

На крају, ако сте заинтересовани да сазнате више, детаље можете пронаћи на следећем линку.


Додај као жељени извор на Гуглу