Seccom i Kubernetes: E 7 nga mea me mohio koe mai i te timatanga

Tuhipoka. whakamaori.: Ka tukuna atu e matou ki a koe te whakamaoritanga o tetahi tuhinga na tetahi miihini haumaru tono matua i te kamupene Ingarangi ASOS.com. Na tenei, ka timata ia i te raupapa pukapuka i whakatapua ki te whakapai ake i te haumarutanga i Kubernetes ma te whakamahi i te seccomp. Mena ka pai nga kaipānui ki te whakataki, ka whai tatou i te kaituhi me te haere tonu ki ana rauemi mo te heke mai mo tenei kaupapa.

Seccom i Kubernetes: E 7 nga mea me mohio koe mai i te timatanga

Ko tenei tuhinga te tuatahi i roto i te raupapa o nga panui me pehea te hanga i nga korero a seccomp i runga i te wairua o SecDevOps, me te kore e uru ki nga mahi makutu me nga mahi makutu. I te Wāhanga XNUMX, ka hipokina e au nga korero taketake me nga korero o roto mo te whakatinana i te seccomp i Kubernetes.

Ko te rauwiringa kaiao o Kubernetes he maha nga huarahi hei whakamarumaru me te wehe i nga ipu. Ko te tuhinga mo te Aratau Rorohiko Haumaru, e mohiotia ana ano muna. Ko te mea nui ko te tātari i nga waea punaha e waatea ana mo te mahi ma nga ipu.

He aha te mea nui? Ko te ipu he mahinga noa i runga i tetahi miihini motuhake. A ka whakamahia e ia te kernel pera i etahi atu tono. Mena ka taea e nga ipu te mahi i nga waea punaha, kaore e roa ka whai hua te malware ki te karo i te wehenga ipu ka pa ki etahi atu tono: te haukoti korero, te whakarereke i nga tautuhinga punaha, aha atu.

Ko nga korero a seccom e whakaatu ana ko nga waea punaha ka whakaaetia, ka whakakorehia ranei. Ko te wa whakahaere ipu ka whakahohe i a raatau ina tiimata ana kia taea e te kernel te aro turuki i a raatau mahi. Ma te whakamahi i nga korero penei ka taea e koe te whakawhāiti i te vector whakaeke me te whakaiti i te kino mena ka timata tetahi papatono kei roto i te ipu (ara, o koutou whakawhirinakitanga, o ratou whakawhirinakitanga ranei) ki te mahi i tetahi mea kaore e whakaaetia kia mahia.

Te Maramatanga ki nga Taketake

E toru nga waahanga kei roto i te kōtaha seccom taketake: defaultAction, architectures (ranei archMap) a syscalls:

{
    "defaultAction": "SCMP_ACT_ERRNO",
    "architectures": [
        "SCMP_ARCH_X86_64",
        "SCMP_ARCH_X86",
        "SCMP_ARCH_X32"
    ],
    "syscalls": [
        {
            "names": [
                "arch_prctl",
                "sched_yield",
                "futex",
                "write",
                "mmap",
                "exit_group",
                "madvise",
                "rt_sigprocmask",
                "getpid",
                "gettid",
                "tgkill",
                "rt_sigaction",
                "read",
                "getpgrp"
            ],
            "action": "SCMP_ACT_ALLOW"
        }
    ]
}

(medium-basic-seccom.json)

defaultAction ka whakatau i te aitua taunoa o tetahi waea punaha kaore i tohua i roto i te waahanga syscalls. Kia ngawari ake nga mahi, me aro ki nga uara matua e rua ka whakamahia:

  • SCMP_ACT_ERRNO - ka aukati i te mahi o te waea punaha,
  • SCMP_ACT_ALLOW - ka taea.

wāhanga architectures kua whakarārangitia ngā hoahoanga whainga. He mea nui tenei na te mea ko te tātari ake, ka whakamahia ki te taumata kernel, ka whakawhirinaki ki nga kaitautuhi waea punaha, kaua ki o raatau ingoa kua tohua ki te kōtaha. Ko te wa whakahaere ipu ka taurite ki nga kaitautohu i mua i te whakamahi. Ko te whakaaro ka taea e nga waea waea te whai ID tino rereke i runga i te hoahoanga o te punaha. Hei tauira, waea punaha recvfrom (i whakamahia hei tiki korero mai i te turanga) he ID = 64 kei runga i nga punaha x64 me te ID = 517 kei te x86. ko te reira Ka kitea e koe he rarangi o nga waea punaha katoa mo nga hoahoanga x86-x64.

I te wahanga syscalls ka whakarārangihia ngā waea pūnaha katoa me te whakapūtā me aha. Hei tauira, ka taea e koe te hanga rarangi ma ma te tautuhi defaultAction i runga i SCMP_ACT_ERRNO, me nga waea i roto i te waahanga syscalls tautapa SCMP_ACT_ALLOW. No reira, ka whakaaetia e koe nga waea kua tohua ki te waahanga syscalls, me te aukati i era atu katoa. Mo te rarangi pango me huri koe i nga uara defaultAction me nga mahi ki te ritenga atu.

Inaianei me korero etahi kupu mo nga nuances kaore e tino kitea. Kia mahara ko nga taunakitanga kei raro nei e kii ana kei te horahia e koe he rarangi tono pakihi ki runga i a Kubernetes ka hiahia koe kia haere me te iti rawa o nga painga ka taea.

1. AllowPrivilegeEscalation=teka

В securityContext he tawhā te ipu AllowPrivilegeEscalation. Mena kua whakauruhia ki roto false, ka timata nga ipu ki te (on) moka no_new_priv. Ko te tikanga o tenei tawhā ka kitea mai i te ingoa: ka aukati i te ipu ki te whakarewa i nga tikanga hou me nga mana nui atu i a ia ake.

He painga taha o tenei kowhiringa kua whakaritea ki true (taunoa) ko te wa whakahaere ipu ka pa ki te kotaha seccom i te timatanga o te mahi whakaoho. No reira, ko nga waea punaha katoa e hiahiatia ana ki te whakahaere i nga tikanga whakahaere-a-roto (hei tauira, te whakarite i nga ID kaiwhakamahi/rōpū, te whakaheke i etahi kaha) me whakahohe i roto i te kōtaha.

Ki te ipu e mahi ana i nga mea iti echo hi, ka hiahiatia nga whakaaetanga e whai ake nei:

{
    "defaultAction": "SCMP_ACT_ERRNO",
    "architectures": [
        "SCMP_ARCH_X86_64",
        "SCMP_ARCH_X86",
        "SCMP_ARCH_X32"
    ],
    "syscalls": [
        {
            "names": [
                "arch_prctl",
                "brk",
                "capget",
                "capset",
                "chdir",
                "close",
                "execve",
                "exit_group",
                "fstat",
                "fstatfs",
                "futex",
                "getdents64",
                "getppid",
                "lstat",
                "mprotect",
                "nanosleep",
                "newfstatat",
                "openat",
                "prctl",
                "read",
                "rt_sigaction",
                "statfs",
                "setgid",
                "setgroups",
                "setuid",
                "stat",
                "uname",
                "write"
            ],
            "action": "SCMP_ACT_ALLOW"
        }
    ]
}

(hi-pod-seccom.json)

... hei utu mo enei:

{
    "defaultAction": "SCMP_ACT_ERRNO",
    "architectures": [
        "SCMP_ARCH_X86_64",
        "SCMP_ARCH_X86",
        "SCMP_ARCH_X32"
    ],
    "syscalls": [
        {
            "names": [
                "arch_prctl",
                "brk",
                "close",
                "execve",
                "exit_group",
                "futex",
                "mprotect",
                "nanosleep",
                "stat",
                "write"
            ],
            "action": "SCMP_ACT_ALLOW"
        }
    ]
}

(hi-container-seccom.json)

Engari ano, he aha tenei raru? Ko ahau ake, ka karo ahau ki te whakararangi ma i nga waea punaha e whai ake nei (mehemea he tino hiahia mo ratou): capset, set_tid_address, setgid, setgroups и setuid. Heoi, ko te tino wero ko te tuku i nga tikanga kaore koe i te mana whakahaere, kei te herea e koe nga korero ki te whakatinanatanga o te waa whakahaere ipu. Arā, i tetahi ra ka kite pea koe i muri i te whakahōu i te taiao whakahaere ipu (na koe, na te kaiwhakarato ratonga kapua ranei), ka mutu te rere o nga ipu.

Tohu # 1: Whakahaere ipu ki AllowPrivilegeEscaltion=false. Ma tenei ka whakaiti i te rahi o nga korero a seccom, ka iti ake te aro ki nga huringa o te taiao wa whakahaere ipu.

2. Te whakatakoto i nga korero a seccom ki te taumata ipu

Ka taea te tautuhi i te kōtaha seccomp ki te taumata pākākano:

annotations:
  seccomp.security.alpha.kubernetes.io/pod: "localhost/profile.json"

...i te taumata ipu:

annotations:
  container.security.alpha.kubernetes.io/<container-name>: "localhost/profile.json"

Kia mahara ka huri te wetereo i runga ake nei i te wa kubernetes seccomp ka waiho hei GA (Kei te tumanakohia tenei huihuinga i te tukunga o muri mai o Kubernetes - 1.18 - approx. transl.).

He iti noa nga tangata e mohio ana kua mau tonu a Kubernetes bugna te mea i tonohia nga korero a seccomp whakatā ipu. Ko te taiao omaoma he utu mo tenei ngoikoretanga, engari kaore tenei ipu e ngaro mai i nga putunga, na te mea ka whakamahia hei whirihora i o raatau hanganga.

Ko te raruraru ko tenei ipu ka timata i nga wa katoa AllowPrivilegeEscalation=true, ka puta ki nga raru e whakahuahia ana i te wharangi 1, a kaore e taea te whakarereke.

Ma te whakamahi i nga korero a seccomp i te taumata ipu, ka karo koe i tenei mahanga ka taea e koe te hanga i tetahi tohu kua whakangao ki tetahi ipu motuhake. Me mahi tenei tae noa ki te whakatika a nga kaihanga i te bug me te putanga hou (pea 1.18?) ka waatea ki te katoa.

Tohu # 2: Tautuhia nga korero a seccom ki te taumata ipu.

I roto i te tikanga whaitake, ko tenei ture te tikanga hei whakautu mo te ao katoa ki te patai: "He aha te take e mahi ai taku kōtaha seccomp me docker runengari karekau e mahi i muri i te tuku ki te roopu Kubernetes?

3. Whakamahia te wa whakahaere/taunoa hei huarahi whakamutunga

E rua nga whiringa a Kubernetes mo nga korero kua whakauruhia ki roto: runtime/default и docker/default. Ka whakatinanahia nga mea e rua e te wa whakahaere ipu, ehara i te Kubernetes. Na reira, ka rereke pea i runga i te waahi whakahaere i whakamahia me tona putanga.

Arā, nā te rerekē haere o te wā whakahaere, ka taea e te ipu te uru atu ki etahi atu momo waea punaha, tera pea ka whakamahia, kaore ranei. Ka whakamahia te nuinga o nga wa whakahaere Whakamahinga Docker. Mena kei te pirangi koe ki te whakamahi i tenei whaarangi, me whakarite e tika ana mo koe.

Putanga docker/default kua whakakorehia mai i te Kubernetes 1.11, na reira karohia te whakamahi.

Ki taku whakaaro, profile runtime/default he tino pai mo te kaupapa i hangaia ai: te tiaki i nga kaiwhakamahi mai i nga raru e pa ana ki te whakahaere i tetahi whakahau docker run i runga i o ratou waka. Heoi, ina tae mai ki nga tono pakihi e whakahaere ana i runga i nga kahui Kubernetes, ka maia ahau ki te tohe he tuwhera rawa te ahua o taua ahua me te arotahi nga kaiwhakawhanake ki te hanga korero mo a raatau tono (he momo tono ranei).

Tohu # 3: Waihangahia nga korero a seccom mo nga tono motuhake. Ki te kore e taea, hangahia nga korero mo nga momo tono, hei tauira, hangahia he tohu matatau kei roto katoa nga API tukutuku o te tono Golang. Whakamahia anake te wa whakahaere/taunoa hei huarahi whakamutunga.

I roto i nga panui kei te heke mai, ka hipokina e au me pehea te hanga i nga korero a SecDevOps-inspirated seccomp profiles, whakaaunoa, ka whakamatauria i roto i nga paipa. Arā, karekau he take kia kaua e whakahōu ake ki ngā kōtaha tauwhāiti tono.

4. Ko te kore herenga ehara i te whiringa.

Tuhinga ka whai mai Ko te arotake haumarutanga tuatahi o Kubernetes ka puta mai na te taunoa kua monokia. Ko te tikanga tenei ki te kore koe e whakarite PodSecurityPolicy, e taea ai i roto i te tautau, ka mahi i roto i nga pods katoa kaore i te tautuhia te kōtaha seccomp seccomp=unconfined.

Ko te mahi i tenei aratau ko te tikanga ka ngaro te paparanga katoa o te whakamatao e tiaki ana i te tautau. Ko tenei huarahi kaore i te taunakihia e nga tohunga mo te haumaru.

Tohu # 4: Kaua he ipu i roto i te tautau e rere ki roto seccomp=unconfined, ina koa i nga taiao whakaputa.

5. "Aratau Arotake"

Ehara tenei i te mea motuhake ki a Kubernetes, engari ka taka tonu ki roto i te waahanga "nga mea hei mohio i mua i to tiimata".

I te wa e tupu ana, he uaua tonu te hanga i nga korero a seccomp me te whakawhirinaki nui ki te whakamatautau me te hapa. Ko te meka ko nga kaiwhakamahi kaore i te whai waahi ki te whakamatautau i a raatau i roto i nga taiao whakaputa me te kore e tupono "ka taka" te tono.

I muri i te tukunga o te Linux kernel 4.14, ka taea te whakahaere i nga waahanga o te whaarangi i roto i te aratau arotake, te tuhi korero mo nga waea punaha katoa i roto i te syslog, engari me te kore e aukati. Ka taea e koe te whakahohe i tenei aratau ma te whakamahi i te tawhā SCMT_ACT_LOG:

SCMP_ACT_LOG: karekau te seccomp e pa ki te miro e hanga ana i te waeatanga punaha mena karekau e taurite ki tetahi ture i roto i te tātari, engari ko nga korero mo te waea punaha ka takiuru.

Anei he rautaki angamaheni mo te whakamahi i tenei ahuatanga:

  1. Whakaaetia nga waea punaha e hiahiatia ana.
  2. Aukati nga waea mai i te punaha e mohio ana koe kaore e whai hua.
  3. Tuhia nga korero mo etahi atu waea katoa ki te raarangi.

He tauira ngawari te ahua penei:

{
    "defaultAction": "SCMP_ACT_LOG",
    "architectures": [
        "SCMP_ARCH_X86_64",
        "SCMP_ARCH_X86",
        "SCMP_ARCH_X32"
    ],
    "syscalls": [
        {
            "names": [
                "arch_prctl",
                "sched_yield",
                "futex",
                "write",
                "mmap",
                "exit_group",
                "madvise",
                "rt_sigprocmask",
                "getpid",
                "gettid",
                "tgkill",
                "rt_sigaction",
                "read",
                "getpgrp"
            ],
            "action": "SCMP_ACT_ALLOW"
        },
        {
            "names": [
                "add_key",
                "keyctl",
                "ptrace"
            ],
            "action": "SCMP_ACT_ERRNO"
        }
    ]
}

(reo-mixed-seccomp.json)

Engari kia mahara me aukati koe i nga waea katoa e mohio ana koe kare e whakamahia, ka raru pea te kahui. Ko te turanga pai mo te whakahiato rarangi ingoa ko te mana Tuhinga Docker. Ka whakamāramahia he aha nga waea punaha e araia ana i te whaarangi taunoa me te aha.

Heoi ano, kotahi te hopu. Ahakoa SCMT_ACT_LOG i tautokohia e te kakano Linux mai i te mutunga o te tau 2017, i uru mai ki te punaha rauropi Kubernetes no tata nei. No reira, ki te whakamahi i tenei tikanga ka hiahia koe ki te Linux kernel 4.14 me te putanga runC kaore he iti iho v1.0.0-rc9.

Tohu # 5: Ka taea te hanga i tetahi tohu aratau arotake mo te whakamatautau i roto i nga mahi whakangao ma te whakakotahi i nga rarangi pango me nga ma, ka taea te whakauru i nga waahanga katoa.

6. Whakamahia nga rarangi ma

Me whakapau kaha te Whakamaama na te mea me tohu e koe nga waea katoa e hiahiatia ana e te tono, engari ko tenei huarahi ka tino pai ake te haumarutanga:

E tino taunaki ana kia whakamahia te huarahi whitelist na te mea he maamaa ake, he pono ake. Me whakahōuhia te rārangi pango i ngā wā ka tāpirihia he waea pūnaha mōrearea (he haki mōrearea/he kōwhiringa mēnā kei te rārangi pango). I tua atu, he maha nga wa ka taea te whakarereke i te ahua o te tawhā me te kore e whakarereke i tona ahuatanga me te karo i nga here o te rarangi pango.

Mo nga tono a Go, i hangaia e au tetahi taputapu motuhake e whai ana i te tono me te kohikohi i nga waea katoa i mahia i te wa e mahia ana. Hei tauira, mo te tono e whai ake nei:

package main

import "fmt"

func main() {
	fmt.Println("test")
}

... kia whakarewa tatou gosystract na:

go install https://github.com/pjbgf/gosystract
gosystract --template='{{- range . }}{{printf ""%s",n" .Name}}{{- end}}' application-path

... ka whiwhi tatou i te hua e whai ake nei:

"sched_yield",
"futex",
"write",
"mmap",
"exit_group",
"madvise",
"rt_sigprocmask",
"getpid",
"gettid",
"tgkill",
"rt_sigaction",
"read",
"getpgrp",
"arch_prctl",

Inaianei, he tauira noa tenei—ka whai ake nga korero mo nga taputapu.

Tohu # 6: Whakaaetia ko nga waea e tino hiahia ana koe ka aukati i etahi atu.

7. Whakatakotoria nga turanga tika (me whakarite ranei mo te whanonga ohorere)

Ka whakamanahia e te kernel te kōtaha ahakoa he aha taau e tuhi ki roto. Ahakoa ehara i te mea ko taau e hiahia ana. Hei tauira, ki te aukati koe i te uru ki nga waea penei exit ranei exit_group, e kore e taea e te ipu te kati tika me te whakahau ngawari penei echo hi whakairihia ki rungao mo te wa mutunga kore. Ko te mutunga, ka whiwhi koe i te whakamahi CPU teitei i roto i te tautau:

Seccom i Kubernetes: E 7 nga mea me mohio koe mai i te timatanga

I enei ahuatanga, ka taea e tetahi taputapu te haere mai ki te whakaora strace - ka whakaatu he aha te raru:

Seccom i Kubernetes: E 7 nga mea me mohio koe mai i te timatanga
sudo strace -c -p 9331

Me mohio kei roto i nga korero nga waea punaha katoa e hiahiatia ana e te tono i te wa whakahaere.

Tohu # 7: Kia whai whakaaro ki nga taipitopito me te whakarite kia whakaingoatia nga waea punaha katoa e tika ana.

Ka mutu tenei i te wahanga tuatahi o te raupapa tuhinga mo te whakamahi i te seccomp i Kubernetes i runga i te wairua o SecDevOps. I nga waahanga e whai ake nei ka korero tatou mo te take he mea nui tenei me pehea te whakaaunoa i te mahi.

PS mai i te kaiwhakamaori

Pānuihia hoki i runga i ta maatau blog:

Source: will.com

Tāpiri i te kōrero