Seccomp f'Kubernetes: 7 affarijiet li trid tkun taf mill-bidu nett
Nota. transl.: Aħna nippreżentaw għall-attenzjoni tiegħek it-traduzzjoni ta 'artiklu minn inġinier anzjan tas-sigurtà tal-applikazzjoni fil-kumpanija Brittanika ASOS.com. Magħha, jibda sensiela ta’ pubblikazzjonijiet iddedikati għat-titjib tas-sigurtà f’Kubernetes permezz tal-użu ta’ seccomp. Jekk il-qarrejja togħġbu l-introduzzjoni, aħna se nsegwu lill-awtur u nkomplu bil-materjali futuri tiegħu dwar dan is-suġġett.
Dan l-artikolu huwa l-ewwel minn sensiela ta 'postijiet dwar kif jinħolqu profili seccomp fl-ispirtu ta' SecDevOps, mingħajr ma jirrikorru għall-maġija u s-sħaħar. Fil-Parti XNUMX, ser inkopri l-baŜi u d-dettalji interni tal-implimentazzjoni tas-seccomp f'Kubernetes.
L-ekosistema tal-Kubernetes toffri varjetà wiesgħa ta’ modi kif jiġu żgurati u iżolati l-kontenituri. L-artiklu huwa dwar Secure Computing Mode, magħruf ukoll bħala seccomp. L-essenza tagħha hija li tiffiltra s-sejħiet tas-sistema disponibbli għall-eżekuzzjoni mill-kontenituri.
Għaliex huwa importanti? Kontenitur huwa biss proċess li jaħdem fuq magna speċifika. U juża l-qalba bħal applikazzjonijiet oħra. Jekk il-kontejners jistgħu jwettqu xi sejħiet tas-sistema, malajr ħafna malware jieħu vantaġġ minn dan biex jevita l-iżolament tal-kontenitur u jaffettwa applikazzjonijiet oħra: jinterċetta informazzjoni, jibdel is-settings tas-sistema, eċċ.
Il-profili seccomp jiddefinixxu liema sejħiet tas-sistema għandhom ikunu permessi jew diżattivati. Ir-runtime tal-kontenitur jattivahom meta jibda sabiex il-qalba tkun tista' tissorvelja l-eżekuzzjoni tagħhom. L-użu ta 'profili bħal dawn jippermettilek tillimita l-vettur tal-attakk u tnaqqas il-ħsara jekk xi programm ġewwa l-kontenitur (jiġifieri, id-dipendenzi tiegħek, jew id-dipendenzi tagħhom) jibda jagħmel xi ħaġa li mhux permess li tagħmel.
Tasal għall-baŜi
Il-profil bażiku seccomp jinkludi tliet elementi: defaultAction, architectures (Jew archMap) U syscalls:
defaultAction jiddetermina d-destin default ta’ kwalunkwe sejħa tas-sistema mhux speċifikata fit-taqsima syscalls. Biex tagħmel l-affarijiet aktar faċli, ejja niffukaw fuq iż-żewġ valuri ewlenin li se jintużaw:
SCMP_ACT_ERRNO — jimblokka l-eżekuzzjoni ta’ sejħa tas-sistema,
SCMP_ACT_ALLOW - jippermetti.
Fit-taqsima architectures arkitetturi fil-mira huma elenkati. Dan huwa importanti għaliex il-filtru innifsu, applikat fil-livell tal-kernel, jiddependi fuq l-identifikaturi tas-sejħiet tas-sistema, u mhux fuq l-ismijiet tagħhom speċifikati fil-profil. Ir-runtime tal-kontenitur se jqabbelhom ma' identifikaturi qabel l-użu. L-idea hija li s-sejħiet tas-sistema jista 'jkollhom IDs kompletament differenti skont l-arkitettura tas-sistema. Per eżempju, sejħa tas-sistema recvfrom (użat biex tirċievi informazzjoni mis-socket) għandha ID = 64 fuq sistemi x64 u ID = 517 fuq x86. Hawnhekk tista' ssib lista tas-sejħiet kollha tas-sistema għall-arkitetturi x86-x64.
Fit-taqsima syscalls telenka s-sejħiet kollha tas-sistema u tispeċifika x'għandek tagħmel magħhom. Per eżempju, tista 'toħloq whitelist billi tistabbilixxi defaultAction fuq SCMP_ACT_ERRNO, u sejħiet fit-taqsima syscalls jassenja SCMP_ACT_ALLOW. Għalhekk, inti tippermetti biss sejħiet speċifikati fit-taqsima syscalls, u jipprojbixxu l-oħrajn kollha. Għal-lista sewda għandek tibdel il-valuri defaultAction u azzjonijiet għall-oppost.
Issa għandna ngħidu ftit kliem dwar sfumaturi li mhumiex daqshekk ovvji. Jekk jogħġbok innota li r-rakkomandazzjonijiet ta' hawn taħt jassumu li qed tuża linja ta' applikazzjonijiet tan-negozju fuq Kubernetes u trid li jaħdmu bl-inqas ammont ta' privileġġi possibbli.
1. AllowPrivilegeEscalation=falza
В securityContext kontenitur għandu parametru AllowPrivilegeEscalation. Jekk ikun installat fi false, il-kontenituri se jibdew bi (on) daqsxejn no_new_priv. It-tifsira ta 'dan il-parametru hija ovvja mill-isem: jipprevjeni lill-kontenitur milli jniedi proċessi ġodda b'aktar privileġġi milli għandu hu stess.
Effett sekondarju ta' din l-għażla li qed tiġi ssettjata għal true (default) huwa li r-runtime tal-kontenitur japplika l-profil seccomp fil-bidu nett tal-proċess tal-istartjar. Għalhekk, is-sejħiet kollha tas-sistema meħtieġa biex jitmexxew proċessi runtime interni (eż. l-issettjar tal-IDs tal-utent/grupp, it-twaqqigħ ta 'ċerti kapaċitajiet) għandhom ikunu attivati fil-profil.
Għal kontenitur li jagħmel affarijiet trivjali echo hi, se jkunu meħtieġa l-permessi li ġejjin:
Iżda għal darb'oħra, għaliex din hija problema? Personalment, nevita li ndaħħal fil-lista s-sejħiet tas-sistema li ġejjin (sakemm ma jkunx hemm bżonn reali għalihom): capset, set_tid_address, setgid, setgroups и setuid. Madankollu, l-isfida reali hija li billi tippermetti proċessi li m'għandek assolutament l-ebda kontroll fuqhom, qed torbot il-profili mal-implimentazzjoni tar-runtime tal-kontenitur. Fi kliem ieħor, xi darba tista 'ssib li wara li taġġorna l-ambjent tar-runtime tal-kontejner (jew minnek jew, aktar probabbli, mill-fornitur tas-servizz tal-cloud), il-kontenituri jieqfu jaħdmu f'daqqa.
Tip # 1: Mexxi kontenituri bi AllowPrivilegeEscaltion=false. Dan inaqqas id-daqs tal-profili seccomp u jagħmilhom inqas sensittivi għal bidliet fl-ambjent tar-runtime tal-kontenitur.
Jekk jogħġbok innota li s-sintassi t'hawn fuq tinbidel meta Kubernetes seccomp se ssir GA (dan l-avveniment huwa mistenni fir-rilaxx li jmiss ta 'Kubernetes - 1.18 - approx. transl.).
Ftit nies jafu li Kubernetes dejjem kellu bugli kkawża profili seccomp biex jiġu applikati pawża kontenitur. L-ambjent runtime jikkumpensa parzjalment għal dan in-nuqqas, iżda dan il-kontenitur ma jisparixxix mill-imżiewed, peress li jintuża biex jiġi kkonfigurat l-infrastruttura tagħhom.
Il-problema hija li dan il-kontenitur dejjem jibda bil AllowPrivilegeEscalation=true, li jwassal għall-problemi espressi fil-paragrafu 1, u dan ma jistax jinbidel.
Billi tuża profili seccomp fil-livell tal-kontenitur, tevita dan it-tfixkil u tista 'toħloq profil li huwa mfassal għal kontenitur speċifiku. Dan se jkollu jsir sakemm l-iżviluppaturi jiffissaw il-bug u l-verżjoni l-ġdida (forsi 1.18?) issir disponibbli għal kulħadd.
Tip # 2: Issettja profili seccomp fil-livell tal-kontenitur.
F'sens prattiku, din ir-regola normalment isservi bħala tweġiba universali għall-mistoqsija: "Għaliex il-profil tiegħi seccomp jaħdem ma' docker runimma ma taħdimx wara l-iskjerament għal cluster Kubernetes?
3. Uża runtime/default biss bħala l-aħħar għażla
Kubernetes għandu żewġ għażliet għal profili integrati: runtime/default и docker/default. It-tnejn huma implimentati mir-runtime tal-kontenitur, mhux Kubernetes. Għalhekk, jistgħu jvarjaw skont l-ambjent tar-runtime użat u l-verżjoni tiegħu.
Fi kliem ieħor, bħala riżultat ta 'runtime li jinbidel, il-kontenitur jista' jkollu aċċess għal sett differenti ta 'sejħiet tas-sistema, li jista' juża jew le. Ħafna runtimes jużaw Implimentazzjoni Docker. Jekk tixtieq tuża dan il-profil, jekk jogħġbok kun żgur li huwa adattat għalik.
Profil docker/default ġie deprecated minn Kubernetes 1.11, għalhekk evita li tużah.
Fl-opinjoni tiegħi, profil runtime/default perfettament adattat għall-iskop li għalih inħoloq: il-protezzjoni tal-utenti mir-riskji assoċjati mal-eżekuzzjoni ta 'kmand docker run fuq il-karozzi tagħhom. Madankollu, meta niġu għall-applikazzjonijiet tan-negozju li jaħdmu fuq clusters Kubernetes, nixtieq nargumenta li profil bħal dan huwa miftuħ wisq u l-iżviluppaturi għandhom jiffokaw fuq il-ħolqien ta 'profili għall-applikazzjonijiet tagħhom (jew tipi ta' applikazzjonijiet).
Tip # 3: Oħloq profili seccomp għal applikazzjonijiet speċifiċi. Jekk dan ma jkunx possibbli, oħloq profili għat-tipi ta 'applikazzjoni, pereżempju, oħloq profil avvanzat li jinkludi l-APIs kollha tal-web tal-applikazzjoni Golang. Uża biss runtime/default bħala l-aħħar għażla.
F'postijiet futuri, ser inkopri kif toħloq profili seccomp ispirati minn SecDevOps, awtomathom, u tittestjahom f'pipelines. Fi kliem ieħor, ma jkollokx skuża biex ma taġġornax għal profili speċifiċi għall-applikazzjoni.
4. Mhux konfinat MHUX għażla.
Ta ' l-ewwel verifika tas-sigurtà tal-Kubernetes irriżulta li awtomatikament seccomp diżattivat. Dan ifisser li jekk ma tissettjax PodSecurityPolicy, li se jippermettilu fil-cluster, il-miżwed kollha li għalihom il-profil seccomp mhux definit se jaħdmu fihom seccomp=unconfined.
It-tħaddim f'dan il-mod ifisser li jintilef saff sħiħ ta 'insulazzjoni li jipproteġi l-cluster. Dan l-approċċ mhuwiex rakkomandat mill-esperti tas-sigurtà.
Tip # 4: L-ebda kontenitur fil-cluster m'għandu jkun għaddej seccomp=unconfined, speċjalment f'ambjenti ta 'produzzjoni.
5. "Modalità ta' verifika"
Dan il-punt mhuwiex uniku għal Kubernetes, iżda xorta jaqa 'fil-kategorija "affarijiet li għandek tkun taf qabel tibda".
Kif jiġri, il-ħolqien ta 'profili seccomp dejjem kien ta' sfida u jiddependi ħafna fuq prova u żball. Il-fatt hu li l-utenti sempliċement m'għandhomx l-opportunità li jittestjawhom f'ambjenti ta 'produzzjoni mingħajr ma jirriskjaw li "jwaqqa'" l-applikazzjoni.
Wara r-rilaxx tal-kernel Linux 4.14, sar possibbli li jitmexxew partijiet ta 'profil fil-modalità ta' verifika, reġistrazzjoni ta 'informazzjoni dwar is-sejħiet kollha tas-sistema fis-syslog, iżda mingħajr ma jimblokkahom. Tista' tattiva din il-modalità billi tuża l-parametru SCMT_ACT_LOG:
SCMP_ACT_LOG: seccomp mhux se jaffettwa l-ħajta li tagħmel is-sejħa tas-sistema jekk ma taqbilx ma' xi regola fil-filtru, iżda l-informazzjoni dwar is-sejħa tas-sistema tiġi illoggjata.
Hawnhekk hawn strateġija tipika biex tuża din il-karatteristika:
Ippermetti sejħiet tas-sistema li huma meħtieġa.
Imblokka sejħiet mis-sistema li taf li mhux se jkunu utli.
Irrekordja l-informazzjoni dwar is-sejħiet l-oħra kollha fil-log.
Imma ftakar li għandek bżonn timblokka t-telefonati kollha li taf li mhux se jintużaw u li potenzjalment jistgħu jagħmlu ħsara lill-cluster. Bażi tajba għall-kompilazzjoni ta 'lista hija l-uffiċjal Dokumentazzjoni Docker. Jispjega fid-dettall liema sejħiet tas-sistema huma mblukkati fil-profil default u għaliex.
Madankollu, hemm qabda waħda. Għalkemm SCMT_ACT_LOG appoġġjat mill-kernel tal-Linux mill-aħħar tal-2017, daħal fl-ekosistema Kubernetes biss relattivament reċentement. Għalhekk, biex tuża dan il-metodu ser ikollok bżonn Linux kernel 4.14 u verżjoni runC mhux aktar baxxa v1.0.0-rc9.
Tip # 5: Profil tal-modalità tal-verifika għall-ittestjar fil-produzzjoni jista 'jinħoloq billi jiġu kkombinati listi suwed u bojod, u l-eċċezzjonijiet kollha jistgħu jiġu rreġistrati.
6. Uża whitelists
Whitelisting jeħtieġ sforz addizzjonali għaliex trid tidentifika kull sejħa li l-applikazzjoni jista 'jkollha bżonn, iżda dan l-approċċ itejjeb ħafna s-sigurtà:
Huwa rakkomandat ħafna li tuża l-approċċ tal-lista bajda peress li huwa aktar sempliċi u aktar affidabbli. Il-lista s-sewda trid tiġi aġġornata kull meta tiżdied sejħa tas-sistema potenzjalment perikoluża (jew bandiera/għażla perikoluża jekk tkun fuq il-lista s-sewda). Barra minn hekk, ħafna drabi huwa possibbli li tinbidel ir-rappreżentazzjoni ta 'parametru mingħajr ma tinbidel l-essenza tiegħu u b'hekk tevita r-restrizzjonijiet tal-lista s-sewda.
Għall-applikazzjonijiet Go, żviluppajt għodda speċjali li takkumpanja l-applikazzjoni u tiġbor is-sejħiet kollha li saru waqt l-eżekuzzjoni. Per eżempju, għall-applikazzjoni li ġejja:
package main
import "fmt"
func main() {
fmt.Println("test")
}
... ejja tniedi gosystract allura:
go install https://github.com/pjbgf/gosystract
gosystract --template='{{- range . }}{{printf ""%s",n" .Name}}{{- end}}' application-path
Għalissa, dan huwa biss eżempju—aktar dettalji dwar l-għodod se jsegwu.
Tip # 6: Ħalli biss dawk is-sejħiet li verament għandek bżonn u jimblokka l-oħrajn kollha.
7. Poġġi l-pedamenti t-tajbin (jew ipprepara għal imġieba mhux mistennija)
Il-qalba se tinforza l-profil irrispettivament minn dak li tikteb fih. Anke jekk mhux eżattament dak li ridt. Per eżempju, jekk timblokka l-aċċess għal sejħiet bħal exit jew exit_group, il-kontenitur mhux se jkun jista 'jingħalaq b'mod korrett u anke kmand sempliċi bħal echo hihang up liluo għal perjodu indefinit. Bħala riżultat, ikollok użu għoli tas-CPU fil-cluster:
F'każijiet bħal dawn, utilità tista 'tiġi għas-salvataġġ strace - se turi x'tista' tkun il-problema:
sudo strace -c -p 9331
Kun żgur li l-profili fihom is-sejħiet kollha tas-sistema li l-applikazzjoni teħtieġ waqt ir-runtime.
Tip # 7: Oqgħod attent għad-dettall u kun żgur li s-sejħiet kollha meħtieġa tas-sistema huma whitelisted.
Dan jikkonkludi l-ewwel parti ta 'serje ta' artikoli dwar l-użu ta 'seccomp f'Kubernetes fl-ispirtu ta' SecDevOps. Fil-partijiet li ġejjin se nitkellmu dwar għaliex dan huwa importanti u kif awtomat il-proċess.