Pred kratkim je avtor standardne knjižnice Cosmopolitan C in platforme Redbean napovedal implementacijo izolacijskega mehanizma pledge() za Linux.
Pledge, ki ga je prvotno razvil projekt OpenBSD , vam omogoča selektivno prepoved dostopa aplikacij do neuporabljenih sistemskih klicev (ustvarjanje belega seznama sistemskih klicev za aplikacijo in prepoved drugih klicev). Za razliko od mehanizmov za nadzor dostopa do sistemskih klicev, ki so na voljo v Linuxu, kot je seccomp, je Pledge zasnovan od začetka tako, da je čim bolj uporabniku prijazen.
Neuspešna pobuda za izolacijo aplikacij v osnovnem okolju OpenBSD z uporabo mehanizma systrace je pokazala, da je izolacija na ravni posameznih sistemskih klicev preveč zapletena in dolgotrajna.
Druga možnost je bila pledge, ki je omogočil ustvarjanje pravil izolacije brez spuščanja v podrobnosti in manipuliranja s pripravljenimi razredi dostopa.
Ponujeni razredi so na primer stdio (vhod/izhod), rpath (datoteke samo za branje), wpath (pisanje datotek), cpath (ustvarjanje datotek), tmppath (delo z začasnimi datotekami), inet (omrežje vtičnic), unix (vtičnice unix ), dns (ločljivost DNS), getpw (dostop za branje do baze podatkov uporabnikov), ioctl (klic ioctl), proc (nadzor procesa), exec (zagonski procesi) in id (nadzor dovoljenj).
Pravila za delo s sistemskimi klici so določena v obliki opomb, ki vključujejo seznam dovoljenih razredov sistemskih klicev in polje poti datotek, kjer je dostop dovoljen. Po prevajanju in zagonu spremenjene aplikacije jedro prevzame nalogo spremljanja skladnosti z določenimi pravili.
Ločeno se razvija implementacija zastave za FreeBSD, ki se odlikuje po zmožnosti izolacije aplikacij brez spreminjanja njihove kode, medtem ko je v OpenBSD klic zastave namenjen tesni integraciji z osnovnim okoljem in dodajanju opomb v kodo vsakega posebej.
Zaveza je kot prepovedan sadež, po katerem vsi hrepenimo, ko šef reče, da bi morali uporabljati stvari, kot je Linux. Zakaj je to pomembno? To je zato, ker pledge() dejansko naredi varnost razumljivo. Linux v resnici nikoli ni imel ravni varnosti, ki bi jo lahko razumeli navadni smrtniki.
Razvijalci porta Linux Pledge so sledili zgledu FreeBSD in namesto spreminjanja kode pripravili dodatno orodje s spletne strani pledge.com, ki omogoča uporabo omejitev brez spreminjanja kode aplikacije. Na primer, če želite zagnati orodje curl z dostopom samo do sistemskih klicev stdio, rpath, inet in threadstdio, preprosto zaženite `./pledge.com -p 'stdio rpath inet thread' curl http://example.com`.
Pripomoček deluje na vseh distribucijah Linuxa od RHEL6 naprej in ne zahteva root dostopa. Poleg tega je na podlagi knjižnice Cosmopolitan na voljo API za upravljanje omejitev v programski kodi C, ki med drugim omogoča ustvarjanje enklav za selektivno omejevanje dostopa do določenih funkcij aplikacije.
V preteklosti je bilo nekaj razvijalcev, ki so to poskusili. Ne bom navajal imen, saj večina teh projektov ni bila nikoli dokončana. Ko gre za SECOMP, spletne vadnice pojasnjujejo samo, kako sistemske klice uvrstiti na seznam dovoljenih, zato večina ljudi izgubi zanimanje, preden ugotovijo, kako filtrirati argumente. Projekti, ki so napredovali, so imeli tudi spreglede, kot je omogočanje spreminjanja bitov setuid/setgid/sticky. Zato se ne sme uporabiti nobena od trenutnih alternativ. Mislim, da nas to prizadevanje pripelje veliko bližje pledge() kot kdaj koli prej.
Implementacija ne zahteva sprememb jedra: omejitve pripomočkov so prevedene v pravila SECCOMP BPF in obdelane z izvornim mehanizmom izolacije sistemskih klicev Linuxa. Na primer, klic promise("stdio rpath", 0) bo pretvoril v filter BPF
Nenazadnje, če vas zanima več informacij, lahko podrobnosti najdete na naslednji povezavi.