Hiljuti teatas Cosmopolitan C standardteegi ja Redbeani platvormi autor Linuxi jaoks pledge() isolatsioonimehhanismi rakendamisest.
Algselt OpenBSD projekti poolt välja töötatud pledge võimaldab teil valikuliselt keelata rakendustel juurdepääsu kasutamata süsteemikõnedele (luues rakenduse jaoks süsteemikõnede valge nimekirja ja keelates muud kõned). Erinevalt Linuxis saadaolevatest süsteemikõnede juurdepääsu kontrollimehhanismidest, näiteks seccomp, on pledge algusest peale loodud võimalikult kasutajasõbralikuks.
Ebaõnnestunud algatus isoleerida rakendusi OpenBSD baaskeskkonnas, kasutades systrace mehhanismi, näitas, et isoleerimine üksikute süsteemikutsete tasemel on liiga keeruline ja aeganõudev.
Teise võimalusena pakuti välja pant, mis võimaldas luua isolatsioonireegleid ilma detailidesse laskumata ja ettevalmistatud juurdepääsuklasse manipuleerimata.
Näiteks pakutavad klassid on stdio (sisend/väljund), rpath (kirjutuskaitstud failid), wpath (failide kirjutamine), cpath (failide loomine), tmppath (töö ajutiste failidega), inet (sockettide võrk), unix (unixi soklid ), dns (DNS-i eraldusvõime), getpw (lugemisjuurdepääs kasutajate andmebaasile), ioctl (ioctl-kõne), proc (protsessijuhtimine), exec (käivitusprotsessid) ja id (lubade kontroll).
Süsteemikõnedega töötamise reeglid on täpsustatud annotatsioonide kujul, mis sisaldavad lubatud süsteemikõnede klasside loendit ja failiteede massiivi, kuhu juurdepääs on lubatud. Pärast muudetud rakenduse kompileerimist ja käivitamist võtab kernel üle määratud reeglite järgimise jälgimise ülesande.
Eraldi arendatakse FreeBSD jaoks lubade realiseerimist, mida eristab võimalus eraldada rakendusi ilma nende koodi muutmata, samas kui OpenBSD-s on pantikõne suunatud tihedale integreerimisele baaskeskkonnaga ja koodile annotatsioonide lisamisele. igast.
Pant on nagu keelatud vili, mida me kõik ihaldame, kui ülemus ütleb, et peaksime kasutama selliseid asju nagu Linux. Miks see oluline on? Põhjus on selles, et pant() teeb turvalisuse tegelikult arusaadavaks. Linuxil pole kunagi tegelikult olnud turvakihti, millest lihtsurelikud aru saaksid.
Linuxi pledge'i pordi arendajad järgisid FreeBSD eeskuju ja koodimuudatuste tegemise asemel valmistasid pledge.com-ist välja täiendava utiliidi, mis võimaldab teil piiranguid rakendada ilma rakenduse koodi muutmata. Näiteks curl-utiliidi käivitamiseks ainult süsteemikõnede klassidele stdio, rpath, inet ja threadstdio pääsemiseks käivitage lihtsalt käsk `./pledge.com -p 'stdio rpath inet thread' curl http://example.com`.
Utiliit töötab kõigis Linuxi distributsioonides alates RHEL6-st ja ei vaja juurjuurdepääsu. Lisaks on cosmopolitan teegi põhjal API-liides C-programmikoodi piirangute haldamiseks, mis võimaldab muuhulgas luua enklaave, et valikuliselt piirata juurdepääsu teatud rakenduse funktsioonidele.
Varem on mõned arendajad seda proovinud. Ma ei hakka nimesid nimetama, sest enamik neist projektidest ei saanud kunagi valmis. Mis puutub SECOMP-i, siis veebipõhised õpetused selgitavad ainult süsteemikõnede valgesse nimekirja lisamist, nii et enamik inimesi kaotab huvi enne, kui nad mõistavad, kuidas argumente filtreerida. Edasi liikunud projektidel oli ka puudusi, näiteks setuid/setgid/sticky bittide muutmise lubamine. Seetõttu ei tohiks kasutada ühtegi praegustest alternatiividest. Ma arvan, et see pingutus viib meid lubaduse() omamisele palju lähemale kui kunagi varem.
Rakendamine ei nõua kerneli muutmist: utiliidi piirangud tõlgitakse SECCOMP BPF-i reegliteks ja töödeldakse Linuxi loomuliku süsteemikõnede eraldamise mehhanismi abil. Näiteks lubaduse ("stdio rpath", 0) kutsumine teisendab BPF-filtriks
Lõpuks, kui olete huvitatud lisateabest, leiate üksikasjad järgmiselt lingilt.