Kohët e fundit, autori i bibliotekës standarde Cosmopolitan C dhe platformës Redbean njoftuan zbatimin e mekanizmit të izolimit plead() për Linux.
Fillimisht i zhvilluar nga projekti OpenBSD , pledge ju lejon të bllokoni në mënyrë selektive aplikacionet nga qasja në thirrjet e sistemit të papërdorura (duke krijuar një listë të bardhë të thirrjeve të sistemit për aplikacionin dhe duke ndaluar thirrjet e tjera). Ndryshe nga mekanizmat e kontrollit të qasjes në thirrjet sistemore të disponueshme në Linux, siç është seccomp, pledge është projektuar që nga fillimi për të qenë sa më miqësor ndaj përdoruesit.
Nisma e dështuar për të izoluar aplikacionet në mjedisin bazë OpenBSD duke përdorur mekanizmin systrace tregoi se izolimi në nivelin e thirrjeve individuale të sistemit është shumë i ndërlikuar dhe kërkon kohë.
Si alternativë, u propozua pledge, i cili lejoi krijimin e rregullave të izolimit pa hyrë në detaje dhe pa manipuluar klasat e aksesit të përgatitura.
Për shembull, klasat e ofruara janë stdio (hyrje/dalje), rpath (skedarët vetëm për lexim), wpath (shkruani skedarë), cpath (krijoni skedarë), tmppath (punoni me skedarë të përkohshëm), inet (rrjeti i prizave), unix (priza unix ), dns (rezolucion DNS), getpw (qasja për lexim në bazën e të dhënave të përdoruesit), ioctl (thirrja ioctl), proc (kontrolli i procesit), exec (proceset e fillimit) dhe id (kontrolli i lejeve).
Rregullat për të punuar me thirrjet e sistemit specifikohen në formën e shënimeve që përfshijnë një listë të klasave të lejuara të thirrjeve të sistemit dhe një grup shtigjeve të skedarëve ku lejohet qasja. Pas kompilimit dhe ekzekutimit të aplikacionit të modifikuar, bërthama merr përsipër detyrën e monitorimit të pajtueshmërisë me rregullat e specifikuara.
Më vete, po zhvillohet zbatimi i premtimit për FreeBSD, i cili dallohet nga aftësia për të izoluar aplikacionet pa bërë ndryshime në kodin e tyre, ndërsa në OpenBSD thirrja e premtimit synon integrimin e ngushtë me mjedisin bazë dhe shtimin e shënimeve në kod. të secilit.
Pengu është si fruti i ndaluar që të gjithë e lakmojmë kur shefi thotë se duhet të përdorim gjëra të tilla si Linux. Pse ka rëndësi kjo? Kjo është për shkak se pledge() në fakt e bën sigurinë të kuptueshme. Linux nuk ka pasur kurrë një shtresë sigurie që njerëzit e thjeshtë mund ta kuptojnë.
Zhvilluesit e portit pledge të Linux ndoqën shembullin e FreeBSD dhe, në vend që të bënin ndryshime në kod, përgatitën një program shtesë nga pledge.com që ju lejon të aplikoni kufizime pa ndryshuar kodin e aplikacionit tuaj. Për shembull, për të ekzekutuar programin curl me qasje vetëm në klasat e thirrjes së sistemit stdio, rpath, inet dhe threadstdio, thjesht ekzekutoni `./pledge.com -p 'stdio rpath inet thread' curl http://example.com`.
Programi funksionon në të gjitha shpërndarjet Linux nga RHEL6 e tutje dhe nuk kërkon akses root. Përveç kësaj, bazuar në bibliotekën kozmopolite, ofrohet një API për menaxhimin e kufizimeve në kodin e programit C, duke lejuar, ndër të tjera, krijimin e enklavave për të kufizuar në mënyrë selektive aksesin në funksione specifike të aplikacionit.
Ka pasur disa zhvillues në të kaluarën që e kanë provuar këtë. Nuk do të përmend emra, sepse shumica e këtyre projekteve nuk u përfunduan kurrë. Kur bëhet fjalë për SECOMP, mësimet në internet shpjegojnë vetëm se si të listohen thirrjet e sistemit në listën e bardhë, kështu që shumica e njerëzve humbasin interesin përpara se të kuptojnë se si të filtrojnë argumentet. Projektet që ecën përpara gjithashtu kishin mbikëqyrje si lejimi i ndryshimeve të setuid/setgid/sticky bits. Prandaj, asnjë nga alternativat aktuale nuk duhet të përdoret. Mendoj se kjo përpjekje na afron shumë më afër se kurrë më parë për të pasur pledge().
Zbatimi nuk kërkon ndryshime kernel: kufizimet e shërbimeve përkthehen në rregullat SECCOMP BPF dhe përpunohen duke përdorur mekanizmin e izolimit të thirrjeve të sistemit të Linux-it. Për shembull, thirrja e premtimit ("stdio rpath", 0) do të konvertohet në një filtër BPF
Së fundmi, nëse jeni të interesuar të mësoni më shumë, mund t'i gjeni detajet në lidhjen e mëposhtme.