Planirano je prebacivanje mehanizma za izolaciju zaloga na Linux

Nedavno je autor Cosmopolitan C standardne biblioteke i Redbean platforme najavio implementaciju mehanizma izolacije pledge() za Linux.

Prvobitno razvijen od strane OpenBSD projekta , Pledge vam omogućava da selektivno zabranite aplikacijama pristup nekorištenim sistemskim pozivima (kreiranjem bijele liste sistemskih poziva za aplikaciju i zabranom drugih poziva). Za razliku od mehanizama kontrole pristupa sistemskim pozivima dostupnih u Linuxu, kao što je seccomp, Pledge je od temelja dizajniran da bude što je moguće prilagođeniji korisniku.

Neuspjela inicijativa za izolaciju aplikacija u osnovnom okruženju OpenBSD korištenjem mehanizma systrace pokazala je da je izolacija na nivou pojedinačnih sistemskih poziva previše komplikovana i dugotrajna.

Alternativno, predložen je pledge, koji je omogućio kreiranje pravila izolacije bez ulaska u detalje i manipulisanja pripremljenim klasama pristupa.

Na primjer, ponuđene klase su stdio (ulaz/izlaz), rpath (datoteke samo za čitanje), wpath (upisivanje datoteka), cpath (kreiranje datoteka), tmppath (rad sa privremenim datotekama), inet (mreža utičnica), unix (unix utičnice ), dns (DNS rezolucija), getpw (pristup za čitanje korisničkoj bazi podataka), ioctl (poziv ioctl), proc (kontrola procesa), exec (procesi pokretanja) i id (kontrola dozvola).

Pravila za rad sa sistemskim pozivima su specificirana u obliku anotacija koje uključuju listu dozvoljenih klasa sistemskih poziva i niz putanja datoteka gdje je pristup dozvoljen. Nakon kompajliranja i pokretanja modificirane aplikacije, kernel preuzima zadatak praćenja usklađenosti sa navedenim pravilima.

Odvojeno, razvija se implementacija zalog za FreeBSD, koju odlikuje mogućnost izolacije aplikacija bez unošenja promjena u njihov kod, dok je u OpenBSD-u založni poziv usmjeren na čvrstu integraciju sa osnovnim okruženjem i dodavanje napomena u kod svakog od njih.

Zakletva je poput zabranjenog voća za kojim svi žudimo kada šef kaže da trebamo koristiti stvari poput Linuxa. Zašto je to važno? To je zato što pledge() zapravo čini sigurnost razumljivom. Linux nikada zapravo nije imao sloj sigurnosti koji obični smrtnici mogu razumjeti.

Programeri Linux pledge porta slijedili su primjer FreeBSD-a i, umjesto promjena koda, pripremili su dodatni uslužni program sa pledge.com koji vam omogućava da primijenite ograničenja bez mijenjanja koda vaše aplikacije. Na primjer, da biste pokrenuli curl uslužni program s pristupom samo klasama sistemskih poziva stdio, rpath, inet i threadstdio, jednostavno pokrenite `./pledge.com -p 'stdio rpath inet thread' curl http://example.com`.

Alat radi na svim Linux distribucijama od RHEL6 nadalje i ne zahtijeva root pristup. Dodatno, baziran na biblioteci Cosmopolitan, obezbijeđen je API za upravljanje ograničenjima u C programskom kodu, omogućavajući, između ostalog, kreiranje enklava za selektivno ograničavanje pristupa određenim funkcijama aplikacije.

Bilo je nekoliko programera u prošlosti koji su ovo isprobali. Neću imenovati imena, jer većina ovih projekata nikada nije završena. Kada je u pitanju SECOMP, onlajn tutorijali objašnjavaju samo kako staviti sistemske pozive na belu listu, tako da većina ljudi gubi interesovanje pre nego što shvate kako da filtriraju argumente. Projekti koji su napredovali također su imali propuste kao što je omogućavanje promjene setuid/setgid/sticky bitova. Stoga se nijedna od trenutnih alternativa ne bi trebala koristiti. Mislim da nas ovaj napor dovodi mnogo bliže tome da imamo pledge() nego ikada prije.

Implementacija ne zahtijeva promjene kernela: ograničenja uslužnih programa se prevode u SECCOMP BPF pravila i obrađuju korištenjem Linuxovog prirodnog mehanizma za izolaciju sistemskih poziva. Na primjer, pozivanje obećanja("stdio rpath", 0) će se pretvoriti u BPF filter

Konačno, ako ste zainteresirani da saznate više, detalje možete pronaći na sljedećem linku.


Dodaj kao preferirani izvor na Googleu