Planirano je prenijeti mehanizam izolacije zaloga na Linux

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

Izvorno razvijen od strane projekta OpenBSD , Pledge vam omogućuje selektivno zabranjivanje aplikacijama pristupa nekorištenim sistemskim pozivima (stvaranje bijele liste sistemskih poziva za aplikaciju i zabrana 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 jednostavniji za korištenje.

Neuspješna inicijativa izolacije aplikacija u osnovnom okruženju OpenBSD pomoću mehanizma systrace pokazala je da je izolacija na razini pojedinačnih sistemskih poziva previše komplicirana i dugotrajna.

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

Na primjer, ponuđene klase su stdio (ulaz/izlaz), rpath (datoteke samo za čitanje), wpath (pisanje datoteka), cpath (stvaranje datoteka), tmppath (rad s privremenim datotekama), inet (mreža utičnica), unix (unix utičnice ), dns (DNS rezolucija), getpw (pristup čitanja korisničkoj bazi podataka), ioctl (ioctl poziv), proc (kontrola procesa), exec (pokretanje procesa) i id (kontrola dopuštenja).

Pravila za rad sa sistemskim pozivima specificirana su u obliku napomena koje uključuju popis dopuštenih klasa sistemskih poziva i niz putanja datoteka gdje je pristup dopušten. Nakon kompajliranja i pokretanja modificirane aplikacije, kernel preuzima zadatak praćenja usklađenosti s navedenim pravilima.

Zasebno se razvija pledge implementacija za FreeBSD, koja se ističe sposobnošću izolacije aplikacija bez mijenjanja njihovog koda, dok je u OpenBSD-u pledge call usmjeren na tijesnu integraciju s osnovnim okruženjem i dodavanje primjedbi u kod. svakog pojedinog.

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

Razvojni programeri Linux pledge porta slijedili su primjer FreeBSD-a i, umjesto promjena koda, pripremili dodatni uslužni program s pledge.com koji vam omogućuje primjenu ograničenja bez mijenjanja koda vaše aplikacije. Na primjer, za pokretanje uslužnog programa curl s pristupom samo klasama sistemskih poziva stdio, rpath, inet i threadstdio, jednostavno pokrenite `./pledge.com -p 'stdio rpath inet thread' curl http://example.com`.

Uslužni program radi na svim Linux distribucijama od RHEL6 nadalje i ne zahtijeva root pristup. Osim toga, na temelju biblioteke Cosmopolitan, osiguran je API za upravljanje ograničenjima u C programskom kodu, koji, između ostalog, omogućuje stvaranje enklava za selektivno ograničavanje pristupa određenim funkcijama aplikacije.

U prošlosti je bilo nekoliko programera koji su to pokušali. Neću navoditi imena jer većina tih projekata nikada nije završena. Kada je riječ o SECOMP-u, mrežni vodiči objašnjavaju samo kako staviti sistemske pozive na bijelu listu, tako da većina ljudi izgubi interes prije nego što shvate kako filtrirati argumente. Projekti koji su napredovali također su imali propuste poput dopuštanja promjene setuid/setgid/sticky bitova. Stoga se ne smije koristiti niti jedna od trenutačnih alternativa. Mislim da nas ovaj napor dovodi mnogo bliže pledge() nego ikad prije.

Implementacija ne zahtijeva promjene kernela: ograničenja uslužnog programa prevode se u SECCOMP BPF pravila i obrađuju koristeći izvorni Linuxov mehanizam izolacije sistemskih poziva. Na primjer, pozivanje promise("stdio rpath", 0) pretvorit će se u BPF filter

Konačno, ako ste zainteresirani saznati više, detalje možete pronaći na sljedećoj poveznici.


Dodaj kao preferirani izvor na Googleu