Pledge isolatsioonimehhanismi portimise projekt Linuxile

Cosmopolitan C standard library ja Redbean platvormi autor teatas, et Linuxi jaoks on ellu viidud pledge() isolatsioonimehhanismi rakendamine. Alguses töötas pledge vĂ€lja OpenBSD projekt, mis vĂ”imaldab rakendustel valikuliselt keelata juurdepÀÀsu kasutamata sĂŒsteemi sĂŒsteemikĂ”nedele (rakendusele luuakse sĂŒsteemikĂ”nede sarnane lubatud nimekiri, samas keelatakse ĂŒlejÀÀnud kĂ”ned). Erinevalt Linuxis saadaolevatest sĂŒsteemikĂ”nede juurdepÀÀsu piiramise mehhanismidest, nagu seccomp, on pledge mehhanism algselt vĂ€lja töötatud eesmĂ€rgiga maksimaalselt lihtsustada rakendamise protsessi.

EbaĂ”nnestunud OpenBSD baasseadmestiku rakenduste isolatsioonialgatus systrace'i mehhanismi kasutamisel nĂ€itas, et isolatsioon ĂŒksikute sĂŒsteemikĂ”nede tasemel on liiga keeruline ja töömahukas. Alternatiivina pakuti vĂ€lja pledge, mis vĂ”imaldas luua isolatsioonireegleid, sĂŒvenemata detaile ja manipuleerides valmis ligipÀÀsuklassidega. NĂ€iteks pakutakse vĂ€lja klassid nagu stdio (sisend/vĂ€ljund), rpath (ainult failide lugemine), wpath (failide kirjutamine), cpath (failide loomine), tmppath (ajutiste failidega töötamine), inet (vĂ”rk soketid), unix (unix-soketid), dns (DNS-i lahendamine), getpw (lugemisĂ”igus kasutajate andmebaasile), ioctl (ioctl-i kĂ”ne), proc (protsesside haldamine), exec (protsesside kĂ€itamine) ja id (ligipÀÀs Ă”iguste haldamiseks).

SĂŒsteemikĂ”nede reeglid mÀÀratakse annotatsioonide kujul, mis sisaldavad nimekirja lubatud sĂŒsteemikĂ”nede klassidest ja failide teede massiivi, kuhu juurdepÀÀs on lubatud. PĂ€rast muudetud rakenduse koostamist ja kĂ€ivitamist, vĂ”tab tuuma ĂŒlesanne endale nĂ”utud reeglite jĂ€rgimise kontrollimise.

Erakordselt arendatakse FreeBSD jaoks pledge rakendust, mis erineb vÔimalusest isoleerida rakendusi ilma nende koodi muutmata, samas kui OpenBSD-s on pledge kÔne suunatud tihedale integreerimisele pÔhiÔhkkonna ja annotatsioonide lisamisega iga rakenduse koodi.

Linuxi pledge pordi arendajad kasutasid FreeBSD nĂ€idet ja valmistavad ette pledge.com nimelise utiliidi, mis vĂ”imaldab rakendamise piirangute rakendamist ilma rakenduse koodi muutmata. NĂ€iteks curl utiliidi kĂ€ivitamiseks, millel on juurdepÀÀs ainult stdio, rpath, inet ja threadstdio sĂŒsteemikĂ”nede klassidele, on piisav kĂ€ivitamine: "./pledge.com -p 'stdio rpath inet thread' curl http://example.com".

Pledge utiliit töötab kÔigis Linuxi distributsioonides alates RHEL6-st ja ei nÔua root-juurdepÀÀsu. Lisaks pakub cosmopolitan teekide alusel API, et hallata piiranguid C keeles programmide koodis, mis vÔimaldab ka luua enklaave, et piirata juurdepÀÀsu teatud rakenduse funktsioonidele.

Rakendamine ei nĂ”ua tuumas muutmist — pledge piirangud tĂ”lgitakse SECCOMP BPF reegliteks ja töödeldakse Linuxi sĂŒsteemikĂ”nede isolatsioonimehhanismi kaudu. NĂ€iteks oleks pledge('stdio rpath', 0) kĂ”ne muudetud BPF-filteriks 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 veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster