Ķīlas izolācijas mehānismu plānots portēt uz Linux

Nesen Cosmopolitan C standarta bibliotēkas un Redbean platformas autors paziņoja par pledge() izolācijas mehānisma ieviešanu Linux vidē.

Sākotnēji izstrādāts OpenBSD projekta ietvaros , pledge ļauj selektīvi liegt lietojumprogrammām piekļūt neizmantotiem sistēmas izsaukumiem (izveidojot lietojumprogrammas sistēmas izsaukumu balto sarakstu un aizliedzot citus izsaukumus). Atšķirībā no Linux pieejamiem sistēmas izsaukumu piekļuves kontroles mehānismiem, piemēram, seccomp, pledge ir izstrādāts no paša sākuma, lai būtu pēc iespējas lietotājam draudzīgāks.

Neveiksmīgā iniciatīva izolēt lietojumprogrammas OpenBSD bāzes vidē, izmantojot systrace mehānismu, parādīja, ka izolēšana atsevišķu sistēmas izsaukumu līmenī ir pārāk sarežģīta un laikietilpīga.

Alternatīvi tika piedāvāta apņemšanās (pledge), kas ļāva izveidot izolācijas noteikumus, neiedziļinoties detaļās un nemanipulējot ar sagatavotajām piekļuves klasēm.

Piemēram, tiek piedāvātas klases: stdio (ievade/izvade), rpath (tikai lasāmi faili), wpath (failu rakstīšana), cpath (failu izveide), tmppath (darbs ar pagaidu failiem), inet (sockets tīkls), unix (unix ligzdas). ), dns (DNS izšķirtspēja), getpw (lasīšanas piekļuve lietotāju datu bāzei), ioctl (ioctl izsaukums), proc (procesu kontrole), exec (startēšanas procesi) un id (atļauju kontrole).

Noteikumi darbam ar sistēmas izsaukumiem ir norādīti anotāciju veidā, kas ietver atļauto sistēmas izsaukumu klašu sarakstu un failu ceļu masīvu, kur piekļuve ir atļauta. Pēc modificētās lietojumprogrammas kompilēšanas un palaišanas kodols pārņem uzdevumu uzraudzīt atbilstību norādītajiem noteikumiem.

Atsevišķi tiek izstrādāta FreeBSD ķīlas ieviešana, kas izceļas ar spēju izolēt lietojumprogrammas, neveicot izmaiņas to kodā, savukārt OpenBSD ķīlas izsaukums ir vērsts uz ciešu integrāciju ar bāzes vidi un anotāciju pievienošanu kodam. no katra.

Ķīla ir kā aizliegtais auglis, kuru mēs visi iekārojam, kad priekšnieks saka, ka mums vajadzētu izmantot tādas lietas kā Linux. Kāpēc tam ir nozīme? Tas ir tāpēc, ka ķīla () faktiski padara drošību saprotamu. Linux nekad īsti nav bijis tāds drošības slānis, ko vienkārši mirstīgie varētu saprast.

Linux pledge porta izstrādātāji sekoja FreeBSD piemēram un koda izmaiņu vietā sagatavoja papildu utilītu no pledge.com, kas ļauj piemērot ierobežojumus, nemainot lietojumprogrammas kodu. Piemēram, lai palaistu curl utilītu ar piekļuvi tikai sistēmas izsaukumu klasēm stdio, rpath, inet un threadstdio, vienkārši palaidiet `./pledge.com -p 'stdio rpath inet thread' curl http://example.com`.

Šī utilitāte darbojas visās Linux distribūcijās, sākot no RHEL6 , un tai nav nepieciešama root piekļuve. Turklāt, pamatojoties uz Cosmopolitan bibliotēku, ir nodrošināta API ierobežojumu pārvaldībai C programmas kodā, kas cita starpā ļauj izveidot enklāvus, lai selektīvi ierobežotu piekļuvi noteiktām lietojumprogrammu funkcijām.

Pagātnē ir bijuši daži izstrādātāji, kas to ir izmēģinājuši. Es nemācēšu nosaukt vārdus, jo lielākā daļa šo projektu nekad netika pabeigti. Runājot par SECOMP, tiešsaistes apmācības tikai izskaidro, kā iekļaut sistēmas zvanus baltajā sarakstā, tāpēc lielākā daļa cilvēku zaudē interesi, pirms izdomā, kā filtrēt argumentus. Projektiem, kas virzījās uz priekšu, bija arī tādas nepilnības, piemēram, ļāva mainīt setuid/setgid/sticky bitus. Tāpēc nevajadzētu izmantot nevienu no pašreizējām alternatīvām. Es domāju, ka šie centieni mūs daudz vairāk tuvina solījuma() iegūšanai nekā jebkad agrāk.

Ieviešanai nav nepieciešamas kodola izmaiņas: utilītu ierobežojumi tiek tulkoti SECCOMP BPF noteikumos un apstrādāti, izmantojot Linux vietējo sistēmas zvanu izolācijas mehānismu. Piemēram, solījums ("stdio rpath", 0) tiks pārveidots par BPF filtru

Visbeidzot, ja vēlaties uzzināt vairāk, sīkāku informāciju varat atrast, izmantojot tālāk norādīto saiti.


Pievienot kā vēlamo avotu pakalpojumā Google