Seccomp
Taarifa Msingi
Seccomp, inayosimama kwa Secure Computing mode, ni kipengele cha usalama cha kernel ya Linux kilichoundwa kufanya uchujaji wa wito wa mfumo. Inazuia michakato kwa seti ndogo ya wito wa mfumo (exit()
, sigreturn()
, read()
, na write()
) kwa file descriptors zilizofunguliwa tayari. Ikiwa mchakato unajaribu kuita kitu kingine chochote, unakomeshwa na kernel kwa kutumia SIGKILL au SIGSYS. Mfumo huu haufanyi upya rasilimali lakini unaisolate michakato kutoka kwazo.
Kuna njia mbili za kuwezesha seccomp: kupitia wito wa mfumo wa prctl(2)
na PR_SET_SECCOMP
, au kwa kernel za Linux 3.17 na zaidi, wito wa mfumo wa seccomp(2)
. Njia ya zamani ya kuwezesha seccomp kwa kuandika kwenye /proc/self/seccomp
imepitwa na wakati na badala yake kutumia prctl()
.
Kuboresha, seccomp-bpf, inaongeza uwezo wa kuchuja wito wa mfumo kwa kutumia sera inayoweza kubadilishwa, kwa kutumia sheria za Berkeley Packet Filter (BPF). Programu kama OpenSSH, vsftpd, na vivinjari vya Chrome/Chromium kwenye Chrome OS na Linux hutumia kipengele hiki cha kuchuja wito wa mfumo kwa njia inayoweza kubadilika na yenye ufanisi, kutoa mbadala kwa systrace ambayo sasa haipatikani tena kwa Linux.
Njia ya Asili/Inayodhibitiwa
Katika hali hii, Seccomp inaruhusu tu wito wa mfumo exit()
, sigreturn()
, read()
na write()
kwa file descriptors zilizofunguliwa tayari. Ikiwa wito wa mfumo mwingine wowote unafanywa, mchakato unauawa kwa kutumia SIGKILL.
Seccomp-bpf
Hii hali inaruhusu uchujaji wa wito wa mfumo kwa kutumia sera inayoweza kusanidiwa iliyotekelezwa kwa kutumia sheria za Berkeley Packet Filter.
Seccomp katika Docker
Seccomp-bpf inasaidiwa na Docker ili kuzuia syscalls kutoka kwenye kontena na kupunguza eneo la hatari kwa ufanisi. Unaweza kupata syscalls zilizozuiliwa kwa chaguo-msingi katika https://docs.docker.com/engine/security/seccomp/ na seccomp profile ya chaguo-msingi inaweza kupatikana hapa https://github.com/moby/moby/blob/master/profiles/seccomp/default.json. Unaweza kuendesha kontena ya docker na sera ya seccomp tofauti na:
Ikiwa unataka, kwa mfano, kuzuia chombo cha kutekeleza baadhi ya syscall kama vile uname
unaweza kupakua maelezo ya msingi kutoka https://github.com/moby/moby/blob/master/profiles/seccomp/default.json na tu ondoa neno uname
kutoka orodha.
Ikiwa unataka kuhakikisha kwamba baadhi ya faili za binary hazifanyi kazi ndani ya kontena ya docker unaweza kutumia strace kuorodhesha syscalls ambazo faili ya binary inatumia na kisha kuzizuia.
Katika mfano ufuatao, syscalls za uname
zinagunduliwa:
Ikiwa unatumia Docker tu kuendesha programu, unaweza kuipima na strace
na ruhusu tu syscalls inayohitaji
Mfano wa sera ya Seccomp
Ili kuelezea kipengele cha Seccomp, hebu tujenge maelezo ya Seccomp yanayozuia wito wa mfumo wa "chmod" kama ifuatavyo.
Katika wasifu uliopita, tumeweka hatua ya msingi kuwa "ruhusu" na tumeunda orodha nyeusi ya kuzima "chmod". Ili kuwa salama zaidi, tunaweza kuweka hatua ya msingi kuwa "ondoa" na kuunda orodha nyeupe ya kuwezesha wito wa mfumo kwa uchaguzi. Matokeo yanayofuata yanaweka wito wa "chmod" ukirudi kosa kwa sababu umewezeshwa katika wasifu wa seccomp.
Matokeo yafuatayo yanaweka wazi "docker inspect" yanayoonyesha maelezo ya wasifu:
Kuzima katika Docker
Zindua chombo na bendera: --security-opt seccomp=unconfined
Kuanzia Kubernetes 1.19, seccomp imeamilishwa kwa chaguo-msingi kwa Pods zote. Walakini, maelezo ya seccomp ya chaguo-msingi yanayotumiwa kwa Pods ni maelezo ya "RuntimeDefault", ambayo hutolewa na runtime ya chombo (k.m., Docker, containerd). Maelezo ya "RuntimeDefault" inaruhusu wito wa mfumo wengi wakati inazuia wachache ambao wanachukuliwa kuwa hatari au kwa ujumla sio lazima kwa vyombo.
Last updated