Isolatsioonimehhanismi pledge portimise projekt Linuxile

Cosmopolitan'i ja Redbean'i standardset C-raamatukogu autor kuulutas vĂ€lja pledge() mehhanismi isoleerimise rakendamise Linuxis. Algne pledge kujundati OpenBSD projektis ning see vĂ”imaldab rakendustel valikuliselt keelata juurdepÀÀs kasutamata sĂŒsteemikĂ”nedele (rakendusele luuakse nagu valge nimekiri sĂŒsteemikĂ”nedest, samas kui teised kĂ”ned keelatakse). Erinevalt Linuxis saadaval olevatest sĂŒsteemikĂ”nede juurdepÀÀsu piiramise mehhanismidest, nagu seccomp, on pledge mehhanism algselt vĂ€lja töötatud, et maksimeerida kasutamise lihtsust.

EbaĂ”nnestunud OpenBSD pĂ”hikeskkonna rakenduste isoleerimisalgatus systrace'i mehhanismi kasutamist tĂ”i esile, et isoleerimine individuaalsetes sĂŒsteemikĂ”nedes on liiga keeruline ja töömahukas. Alternatiivina pakuti vĂ€lja pledge, mis vĂ”imaldas luua isoleerimisreegleid, sĂŒvenemata detailidesse ja manipuleerides valmis juurdepÀÀsuklassidega. NĂ€iteks pakutakse klasse stdio (sisendi/vĂ€ljundi), rpath (ainult failide lugemine), wpath (failide kirjutamine), cpath (failide loomine), tmppath (ajutiste failidega töötamine), inet (vĂ”rgu sokid), unix (unix-sokid), dns (DNS-i lahendamine), getpw (lugemisĂ”igus kasutajabaasile), ioctl (ioctl-kĂ”ne), proc (protsesside haldus), exec (protsesside kĂ€ivitamine) ja id (juurdepÀÀsuĂ”iguste haldamine).

SĂŒsteemikĂ”nede tööreeglid mÀÀratakse annotatsioonide vormis, mis sisaldavad loetelu lubatud sĂŒsteemikĂ”nede klassidest ja failiteede massiivi, kuhu juurdepÀÀs on lubatud. PĂ€rast muudetud rakenduse koostamist ja kĂ€ivitamist vĂ”tab tuuma töö enda kanda, et kontrollida antud reeglite jĂ€rgimist.

Eraldi arendatakse pledge rakendust FreeBSD jaoks, mis erineb rakenduste isoleerimise vÔimalusest ilma nende koodi muutmata, samas kui OpenBSD-s on pledge'i kÔne suunatud tihedale integreerimisele pÔhikeskkonnaga ja igas rakenduses annotatsioonide lisamisele.

Linuxi pledge'i pordi arendajad kasutasid FreeBSD nĂ€idet ja valmistusid koduĂŒlesande ettevalmistamise utiliidiks pledge.com, mis vĂ”imaldab kehtestada piiranguid ilma rakenduskoodi muutmata. NĂ€iteks utiliidi curl kĂ€ivitamiseks, avades juurdepÀÀsu ainult sĂŒsteemikĂ”nede klassidele stdio, rpath, inet ja threadstdio, piisab kĂ€sklusest „./pledge.com -p ‘stdio rpath inet thread’ curl http://example.com”.

Utiliit pledge töötab kÔikides Linuxi distributsioonides alates RHEL6-st ja ei vaja root-juurdepÀÀsu. Lisaks, Cosmopolitan'i raamatukogul pÔhinev API vÔimaldab hallata piiranguid C keeles kirjutatud programmide koodis, sealhulgas luua enclave'e, et valikuliselt piirata juurdepÀÀsu rakenduse konkreetsetele funktsioonidele.

Rakendamine ei nĂ”ua muudatusi kernelis - pledge'i piirangud tĂ”lgitakse SECCOMP BPF reegliteks, mida töödeldakse Linuxile iseloomuliku sĂŒsteemikallutuste isolatsioonimehhanismiga. NĂ€iteks, kĂ”ne pledge("stdio rpath", 0) muudetakse BPF-filtriks static const struct sock_filter kFilter[] = { /* L0*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, syscall, 0, 14 - 1), /* L1*/ BPF_STMT(BPF_LD | BPF_W | BPF_ABS, OFF(args[0])), /* L2*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 2, 4 - 3, 0), /* L3*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 10, 0, 13 - 4), /* L4*/ BPF_STMT(BPF_LD | BPF_W | BPF_ABS, OFF(args[1])), /* L5*/ BPF_STMT(BPF_ALU | BPF_AND | BPF_K, ~0x80800), /* L6*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 1, 8 - 7, 0), /* L7*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 2, 0, 13 - 8), /* L8*/ BPF_STMT(BPF_LD | BPF_W | BPF_ABS, OFF(args[2])), /* L9*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0, 12 - 10, 0), /*L10*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 6, 12 - 11, 0), /*L11*/ BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 17, 0, 13 - 11), /*L12*/ BPF_STMT(BPF_RET | BPF_K, SECCOMP_RET_ALLOW), /*L13*/ BPF_STMT(BPF_LD | BPF_W | BPF_ABS, OFF(nr)), /*L14*/ /* next filter */ };

Allikas: opennet.ru

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster