Ito ay pinlano na i-port ang pledge isolation mechanism sa Linux

Kamakailan lamang ang may-akda ng Cosmopolitan C standard library at ang platform ng Redbean ay inihayag sa pamamagitan ng a inihayag, ang pagpapatupad ng pledge() isolation mechanism para sa Linux.

Fue orihinal na binuo ng proyekto ng OpenBSD y nagbibigay-daan sa iyo na piliing ipagbawal na ang ina-access ng mga application ang mga hindi nagamit na tawag sa system (isang uri ng whitelist ng mga tawag sa system ay nabuo para sa aplikasyon at ipinagbabawal ang iba pang mga tawag). Hindi tulad ng syscall access control mechanism na available sa Linux, gaya ng seccomp, ang pledge mechanism ay idinisenyo mula sa simula upang maging user-friendly hangga't maaari.

Ang nabigong inisyatiba upang ihiwalay ang mga application sa OpenBSD base environment gamit ang mekanismo ng systrace ay nagpakita na ang paghihiwalay sa antas ng mga indibidwal na tawag sa system ay masyadong kumplikado at nakakaubos ng oras.

Bilang kahalili, ang pangako ay iminungkahi, na pinapayagang gumawa ng mga panuntunan sa paghihiwalay nang hindi naglalagay ng mga detalye at nagmamanipula ng mga inihandang klase sa pag-access.

Halimbawa, ang mga klase na inaalok ay stdio (input/output), rpath (read only files), wpath (write files), cpath (lumikha ng mga file), tmppath (work with temporary files), inet (sockets network), unix (unix sockets). ), dns (DNS resolution), getpw (read access sa user database), ioctl (ioctl call), proc (process control), exec (startup process), at id (permission control).

Ang mga patakaran para sa pagtatrabaho sa mga system call ay tinukoy sa anyo ng mga anotasyon na may kasamang listahan ng mga pinapayagang klase ng tawag sa system at isang hanay ng mga path ng file kung saan pinapayagan ang pag-access. Pagkatapos i-compile at patakbuhin ang binagong application, ang kernel ang humahawak sa trabaho ng pagsubaybay sa pagsunod sa mga tinukoy na panuntunan.

Hiwalay, ang pagpapatupad ng pledge para sa FreeBSD ay binuo, na nakikilala sa pamamagitan ng kakayahang ihiwalay ang mga application nang hindi gumagawa ng mga pagbabago sa kanilang code, habang sa OpenBSD ang pledge call ay naglalayong mahigpit na pagsasama sa base na kapaligiran at ang pagdaragdag ng mga anotasyon sa code ng bawat isa.

Ang pledge ay parang ipinagbabawal na prutas na pinagnanasaan nating lahat kapag sinabi ng amo na dapat nating gamitin ang mga bagay tulad ng Linux. Bakit mahalaga iyon? Ito ay dahil ang pledge() ay talagang ginagawang nauunawaan ang seguridad. Ang Linux ay hindi pa talaga nagkaroon ng layer ng seguridad na naiintindihan ng mga mortal.

Ang mga developer ng Linux pledge port ay kumuha ng cue mula sa FreeBSD at sa halip na gumawa ng mga pagbabago sa code, naghanda sila ng karagdagang utility mula sa pledge.com na nagbibigay-daan sa iyong maglapat ng mga paghihigpit nang hindi binabago ang application code. Halimbawa, para patakbuhin ang curl utility na may access lang sa stdio, rpath, inet, at threadstdio system call classes, patakbuhin lang ang "./pledge.com -p 'stdio rpath inet thread' curl http://example.com » .

Gumagana ang utility sa lahat ng distribusyon ng Linux mula noong RHEL6 at hindi nangangailangan ng root access. Bukod pa rito, batay sa cosmopolitan library, ang isang API ay ibinibigay para sa pamamahala ng mga paghihigpit sa code ng mga programa sa wikang C, na nagbibigay-daan, bukod sa iba pang mga bagay, upang lumikha ng mga enclave upang piliing paghigpitan ang pag-access kaugnay ng ilang mga function ng application. .

Mayroong ilang mga developer sa nakaraan na sinubukan ito. Hindi ko na banggitin ang mga pangalan, dahil karamihan sa mga proyektong ito ay hindi nakumpleto. Pagdating sa SECOMP, ipinapaliwanag lang ng mga online na tutorial kung paano i-whitelist ang mga tawag sa system, kaya nawawalan ng interes ang karamihan sa mga tao bago malaman kung paano mag-filter ng mga argumento. Ang mga proyektong sumulong ay mayroon ding mga oversight tulad ng pagpayag na baguhin ang setuid/setgid/sticky bits. Samakatuwid, wala sa mga kasalukuyang alternatibo ang dapat gamitin. Sa tingin ko ang pagsisikap na ito ay naglalapit sa atin sa pagkakaroon ng pledge() kaysa dati.

Ang pagpapatupad ay hindi nangangailangan ng mga pagbabago sa kernel: ang mga hadlang sa utility ay isinasalin sa mga panuntunan ng SECCOMP BPF at pinoproseso gamit ang native system call isolation mechanism ng Linux. Halimbawa, ang pagtawag sa promise("stdio rpath", 0) ay magko-convert sa isang BPF filter

Panghuli, kung interesado kang malaman ang tungkol dito, maaari kang kumunsulta sa mga detalye Sa sumusunod na link.


Iwanan ang iyong puna

Ang iyong email address ay hindi nai-publish. Mga kinakailangang patlang ay minarkahan ng *

*

*

  1. Responsable para sa data: Miguel Ángel Gatón
  2. Layunin ng data: Kontrolin ang SPAM, pamamahala ng komento.
  3. Legitimation: Ang iyong pahintulot
  4. Komunikasyon ng data: Ang data ay hindi maiparating sa mga third party maliban sa ligal na obligasyon.
  5. Imbakan ng data: Ang database na naka-host ng Occentus Networks (EU)
  6. Mga Karapatan: Sa anumang oras maaari mong limitahan, mabawi at tanggalin ang iyong impormasyon.