Seccomp ho Kubernetes: Lintho tse 7 tseo u hlokang ho li tseba ho tloha qalong

Hlokomela. fetolela.: Re u hlokomelisa ka phetolelo ea sengoloa ke moenjiniere ea phahameng oa ts'ireletso k'hamphaning ea Borithane ea ASOS.com. Ka eona, o qala letoto la lingoliloeng tse ikemiselitseng ho ntlafatsa ts'ireletso ho Kubernetes ka tšebeliso ea seccomp. Haeba babadi ba rata selelekela, re tla latela mongodi mme re tswele pele ka dingolwa tsa hae tsa kamoso mabapi le sehlooho sena.

Seccomp ho Kubernetes: Lintho tse 7 tseo u hlokang ho li tseba ho tloha qalong

Sengoliloeng sena ke sa pele letotong la lipehelo mabapi le mokhoa oa ho theha li-profiles tsa seccomp moeeng oa SecDevOps, ntle le ho sebelisa boselamose le boloi. Karolong ea XNUMX, ke tla akaretsa lintlha tsa motheo le lintlha tsa ka hare tsa ho kenya ts'ebetsong seccomp ho Kubernetes.

The Kubernetes ecosystem e fana ka mekhoa e mengata e fapaneng ea ho boloka le ho arola lijana. Sengoliloeng se bua ka Secure Computing Mode, e tsejoang hape e le seccomp. Boleng ba eona ke ho sefa mehala ea sistimi e fumanehang bakeng sa ho bolaoa ke lijana.

Ke hobane'ng ha e le ea bohlokoa? Setshelo ke ts'ebetso feela e sebetsang mochining o itseng. 'Me e sebelisa kernel joalo ka lits'ebetso tse ling. Haeba lijana li ka etsa mehala ea sistimi efe kapa efe, haufinyane malware e tla nka monyetla oa ho qoba ho itšehla thajana le ho ama lits'ebetso tse ling: thibela tlhahisoleseling, fetola litlhophiso tsa sistimi, jj.

liprofaele tsa seccomp li hlalosa hore na ke mehala efe ea sistimi e lokelang ho lumelloa kapa ho koaloa. Nako ea ho sebetsa ea setshelo e ba kenya tšebetsong ha e qala e le hore kernel e ka shebella ts'ebetso ea bona. Ho sebelisa li-profiles tse joalo ho u lumella ho fokotsa vector ea tlhaselo le ho fokotsa tšenyo haeba lenaneo leha e le lefe ka hare ho setshelo (ke hore, litšepiso tsa hau, kapa litšepiso tsa bona) le qala ho etsa ntho e sa lumelloeng ho e etsa.

Ho fihla linthong tsa motheo

Boemo ba mantlha ba seccomp bo kenyelletsa lintlha tse tharo: defaultAction, architectures (kapa archMap) le 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-seccomp.json)

defaultAction e khetha qetello ea kamehla ea mohala ofe kapa ofe oa sistimi e sa boleloang karolong syscalls. Ho nolofatsa lintho, a re tsepamiseng maikutlo holim'a litekanyetso tse peli tsa mantlha tse tla sebelisoa:

  • SCMP_ACT_ERRNO - e thibela ho etsoa ha mohala oa sistimi,
  • SCMP_ACT_ALLOW - lumella.

karolong architectures meralo e reretsoeng ho thathamisitsoe. Sena se bohlokoa hobane filthara ka boeona, e sebelisoang maemong a kernel, e ipapisitse le li-identifiers tsa mohala oa sistimi, eseng mabitsong a tsona a boletsoeng profilaneng. Nako ea ho sebetsa ea setshelo e tla li bapisa le li-identifiers pele li sebelisoa. Taba ke hore mehala ea sistimi e ka ba le li-ID tse fapaneng ka ho felletseng ho latela sebopeho sa sistimi. Mohlala, mohala oa sistimi recvfrom (e sebelisetsoang ho amohela tlhahisoleseling ho tsoa ho sokete) e na le ID = 64 ho litsamaiso tsa x64 le ID = 517 ho x86. ke o ka fumana lethathamo la mehala eohle ea sistimi bakeng sa meralo ea x86-x64.

Karolong syscalls e thathamisa mehala eohle ea sistimi ebe e bolela seo u lokelang ho se etsa ka tsona. Ka mohlala, o ka etsa whitelist ka ho seta defaultAction mabapi le SCMP_ACT_ERRNO, le mehala karolong syscalls abela SCMP_ACT_ALLOW. Kahoo, o lumella feela mehala e boletsoeng karolong eo syscalls, le ho thibela tse ling kaofela. Bakeng sa blacklist o lokela ho fetola litekanyetso defaultAction le diketso tse fapaneng.

Hona joale re lokela ho bua mantsoe a seng makae ka li-nuances tse sa hlakileng hakaalo. Ka kopo elelloa hore likhothaletso tse ka tlase li nka hore u sebelisa lethathamo la likopo tsa khoebo ho Kubernetes 'me u batla hore li sebetse ka menyetla e fokolang e ka khonehang.

1. AllowPrivilegeEscalation=mashano

В securityContext setshelo se na le parameter AllowPrivilegeEscalation. Haeba e kentsoe ho false, lijana li tla qala ka (on) hanyane no_new_priv. Moelelo oa parameter ena o hlakile ho tsoa ho lebitso: e thibela setshelo ho qala lits'ebetso tse ncha tse nang le litokelo tse ngata ho feta kamoo e nang le tsona.

Phello e ka thōko ea khetho ena e behiloe ho true (default) ke hore nako ea ho sebetsa ea setshelo e sebelisa profil ea seccomp qalong ea ts'ebetso ea ho qala. Kahoo, mehala eohle ea sistimi e hlokahalang ho tsamaisa lits'ebetso tsa nako ea kahare (mohlala, ho beha li-ID tsa mosebelisi / sehlopha, ho theola bokhoni bo itseng) li tlameha ho kengoa profilaneng.

Ho setshelo se etsang dintho tse sa reng letho echo hi, ho tla hlokahala litumello tse latelang:

{
    "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-seccomp.json)

... sebakeng sa tsena:

{
    "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-seccomp.json)

Empa hape, ke hobane'ng ha see e le bothata? Ka bonna, ke ne ke tla qoba ho hlakola mehala e latelang ea sistimi (ntle le haeba ho na le tlhoko ea 'nete bakeng sa bona): capset, set_tid_address, setgid, setgroups и setuid. Leha ho le joalo, phephetso ea 'nete ke hore ka ho lumella lits'ebetso tseo u se nang taolo ho tsona ho hang, u kopanya li-profiles ts'ebetsong ea nako ea ho sebetsa. Ka mantsoe a mang, ka letsatsi le leng u ka fumana hore ka mor'a ho ntlafatsa tikoloho ea nako ea nako ea setshelo (ebang ke uena kapa, mohlomong, ka mofani oa litšebeletso tsa leru), lijana li khaotsa ho sebetsa ka tšohanyetso.

Keletso # 1: Matha lijana ka AllowPrivilegeEscaltion=false. Sena se tla fokotsa boholo ba li-profiles tsa seccomp le ho li etsa hore li se ke tsa ameha haholo ka liphetoho tse teng tikolohong ea nako ea ho sebetsa.

2. Ho beha li-profiles tsa seccomp boemong ba setshelo

Boemo ba seccomp bo ka beoa boemong ba pod:

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

... kapa boemong ba setshelo:

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

Ka kopo hlokomela hore syntax e kaholimo e tla fetoha ha Kubernetes seccomp e tla fetoha GA (ketsahalo ena e lebeletsoe tokollong e latelang ea Kubernetes - 1.18 - approx. transl.).

Ke batho ba fokolang ba tsebang hore Kubernetes esale a e-na le eona kokoanyanae entseng hore ho kenngwe diporofaele tsa seccomp ho kgefutsa setshelo. Tikoloho ea nako ea ho sebetsa e lefella bofokoli bona ka mokhoa o itseng, empa setshelo sena ha se nyamele ho li-pods, kaha se sebelisetsoa ho lokisa meaho ea bona.

Bothata ke hore setshelo sena se qala ka linako tsohle AllowPrivilegeEscalation=true, e lebisang mathateng a boletsoeng serapeng sa 1, ’me sena se ke ke sa fetoloa.

Ka ho sebelisa li-profiles tsa seccomp boemong ba setshelo, o qoba leraba lena mme o ka theha profaele e etselitsoeng setshelo se itseng. Sena se tla tlameha ho etsoa ho fihlela baetsi ba lokisa phoso 'me phetolelo e ncha (mohlomong 1.18?) e fumaneha ho bohle.

Keletso # 2: Beha li-profiles tsa seccomp boemong ba setshelo.

Ka mokhoa o sebetsang, molao ona hangata o sebetsa e le karabo e akaretsang ea potso e reng: "Hobaneng boemo ba ka ba seccomp bo sebetsa le docker runempa ha e sebetse kamora ho romelloa sehlopheng sa Kubernetes?

3. Sebelisa nako ea ho sebetsa/ea kamehla e le khetho ea ho qetela

Kubernetes e na le likhetho tse peli bakeng sa lifaele tse hahelletsoeng ka hare: runtime/default и docker/default. Ka bobeli li kengoa ts'ebetsong ke nako ea nako ea setshelo, eseng Kubernetes. Ka hona, li ka fapana ho latela tikoloho ea nako ea ho sebetsa e sebelisitsoeng le mofuta oa eona.

Ka mantsoe a mang, ka lebaka la ho fetola nako ea ho sebetsa, setshelo se ka ba le phihlello ea mehala e fapaneng ea sistimi, eo e ka e sebelisang kapa e ke keng ea e sebelisa. Linako tse ngata li sebelisoa Ts'ebetsong ea Docker. Haeba u lakatsa ho sebelisa profaele ena, ka kopo etsa bonnete ba hore e u loketse.

Pale ea Boemo docker/default e tlositsoe ho tloha Kubernetes 1.11, kahoo qoba ho e sebelisa.

Ka maikutlo a ka, profil runtime/default e loketseng hantle bakeng sa morero oo e etselitsoeng eona: ho sireletsa basebelisi likotsing tse amanang le ho phethahatsa taelo docker run likoloing tsa bona. Leha ho le joalo, ha ho tluoa lits'ebetsong tsa khoebo tse sebetsang ho lihlopha tsa Kubernetes, nka iteta sefuba ho pheha khang ea hore profil e joalo e bulehile haholo mme bahlahisi ba lokela ho tsepamisa maikutlo ho theheng lifaele tsa lits'ebetso tsa bona (kapa mefuta ea lits'ebetso).

Keletso # 3: Theha profaele ea seccomp bakeng sa lits'ebetso tse ikhethileng. Haeba sena se sa khonehe, etsa li-profiles tsa mefuta ea likopo, mohlala, etsa profil e tsoetseng pele e kenyelletsang li-API tsohle tsa webo tsa kopo ea Golang. Sebelisa feela nako ea ho sebetsa/ea kamehla e le khetho ea ho qetela.

Liphatlalatsong tse tlang, ke tla bua ka mokhoa oa ho theha li-profile tsa seccomp tse bululetsoeng ke SecDevOps, ke li hlophise, le ho li leka ka liphaephe. Ka mantsoe a mang, u ke ke ua ba le lebaka la ho se ntlafale ho liprofaele tse ikhethileng tsa ts'ebeliso.

4. Ho sa koalloa HASE khetho.

Из tlhahlobo ea pele ea ts'ireletso ea Kubernetes ho ile ha fumaneha hore ka ho sa feleng seccomp e holofetseng. Sena se bolela hore haeba u sa behe PodSecurityPolicy, e tla e nolofalletsa sehlopheng, li-pods tsohle tseo profil ea seccomp e sa hlalosoang li tla sebetsa ho tsona. seccomp=unconfined.

Ho sebetsa ka mokhoa ona ho bolela hore ho lahleha lera lohle la insulation le sireletsang sehlopha. Mokhoa ona ha o khothalletsoe ke litsebi tsa ts'ireletso.

Keletso # 4: Ha ho setshelo se ka har'a sehlopha se lokelang ho kena seccomp=unconfined, haholo-holo libakeng tsa tlhahiso.

5. "Audit mode"

Ntlha ena ha e ikhethang ho Kubernetes, empa e ntse e oela sehlopheng sa "lintho tseo u lokelang ho li tseba pele u qala".

Joalo ka ha ho etsahala, ho theha li-profiles tsa seccomp esale e le phephetso mme ho itšetlehile haholo ka liteko le liphoso. 'Nete ke hore basebelisi ha ba na monyetla oa ho ba leka libakeng tsa tlhahiso ntle le ho beha kotsing ea ho "lahla" kopo.

Kamora ho lokolloa ha Linux kernel 4.14, ho ile ha khoneha ho tsamaisa likarolo tsa profil ka mokhoa oa tlhahlobo, ho rekota tlhahisoleseling mabapi le mehala eohle ea sistimi ho syslog, empa ntle le ho e thibela. U ka kenya mokhoa ona ka ho sebelisa parameter SCMT_ACT_LOG:

SCMP_ACT_LOG: seccomp e ke ke ea ama khoele e etsang mohala oa sistimi haeba e sa lumellane le molao ofe kapa ofe ho sefa, empa tlhaiso-leseling e mabapi le mohala oa sistimi e tla kenngoa.

Mona ke mokhoa o tloaelehileng oa ho sebelisa sesebelisoa sena:

  1. Lumella mehala ea sistimi e hlokahalang.
  2. Thibela mehala e tsoang ho sistimi eo u tsebang hore e ke ke ea thusa.
  3. Rekota tlhahisoleseling mabapi le li-call tse ling kaofela ho log.

Mohlala o nolofalitsoeng o shebahala tjena:

{
    "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"
        }
    ]
}

(medium-mixed-seccomp.json)

Empa hopola hore o hloka ho thibela mehala eohle eo o tsebang hore e ke ke ea sebelisoa mme e ka senyang sehlopha. Motheo o motle oa ho hlophisa lethathamo ke molaoli Litokomane tsa Docker. E hlalosa ka botlalo hore na ke mehala efe ea sistimi e koetsoeng profilaneng ea kamehla le hore na hobaneng.

Leha ho le joalo, ho na le tšoasa e le 'ngoe. Leha ho le joalo SCMT_ACT_LOG e tšehetsoeng ke Linux kernel ho tloha bofelong ba 2017, e kene ho Kubernetes ecosystem haufinyane tjena. Ka hona, ho sebelisa mokhoa ona o tla hloka Linux kernel 4.14 le mofuta oa runC o seng tlase v1.0.0-rc9.

Keletso # 5: Profaele ea mokhoa oa tlhahlobo bakeng sa tlhahlobo tlhahisong e ka etsoa ka ho kopanya manane a matšo le a masoeu, 'me mekhelo eohle e ka kenngoa.

6. Sebelisa li-whitelists

Whitelisting e hloka boiteko bo eketsehileng hobane o tlameha ho tseba mohala o mong le o mong oo kopo e ka o hlokang, empa mokhoa ona o ntlafatsa ts'ireletso haholo:

Ho khothalletsoa haholo ho sebelisa mokhoa oa whitelist kaha o bonolo ebile o tšepahala. Lethathamo la li-blacklist le tla hloka ho nchafatsoa neng kapa neng ha mohala o ka bang kotsi oa sistimi (kapa folakha e kotsi/khetho haeba e le lethathamong le thibelang) e eketsoa. Ho phaella moo, hangata hoa khoneha ho fetola boemeli ba parameter ntle le ho fetola moelelo oa eona 'me ka tsela eo ho feta lithibelo tsa lenane le letšo.

Bakeng sa lits'ebetso tsa Go, ke thehile sesebelisoa se ikhethileng se tsamaeang le kopo mme se bokella mehala eohle e entsoeng nakong ea ts'ebetso. Ka mohlala, bakeng sa kopo e latelang:

package main

import "fmt"

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

... ha re qaleng gosystract kahoo:

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

... mme re fumana sephetho se latelang:

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

Hajoale, ona ke mohlala feela - lintlha tse ling mabapi le lisebelisoa li tla latela.

Keletso # 6: Lumella feela mehala eo u hlileng u e hlokang 'me u thibele tse ling kaofela.

7. Theha metheo e nepahetseng (kapa lokisetsa boitšoaro bo sa lebelloang)

Kernel e tla tiisa profil ho sa tsotelehe hore na u ngola eng ho eona. Leha e se hantle seo o neng o se batla. Mohlala, haeba u thibela phihlello ea mehala joalo ka exit kapa exit_group, setshelo se ke ke sa khona ho koala ka nepo esita le taelo e bonolo joalo ka echo hi mo fanyeheo bakeng sa nako e sa lekanyetsoang. Ka lebaka leo, o tla fumana ts'ebeliso e phahameng ea CPU sehlopheng:

Seccomp ho Kubernetes: Lintho tse 7 tseo u hlokang ho li tseba ho tloha qalong

Maemong a joalo, sesebelisoa se ka thusa strace - e tla bontša hore na bothata e ka ba bofe:

Seccomp ho Kubernetes: Lintho tse 7 tseo u hlokang ho li tseba ho tloha qalong
sudo strace -c -p 9331

Etsa bonnete ba hore profaele e na le mehala eohle ea sistimi eo sesebelisoa se e hlokang ka nako ea ts'ebetso.

Keletso # 7: Ela hloko lintlha tsohle 'me u netefatse hore mehala eohle e hlokahalang ea sistimi e khethiloe.

Sena se phethela karolo ea pele ea letoto la lihlooho tse mabapi le ho sebelisa seccomp ho Kubernetes moeeng oa SecDevOps. Likarolong tse latelang re tla bua ka hore na ke hobane'ng ha sena se le bohlokoa le mokhoa oa ho iketsetsa ts'ebetso.

PS ho tsoa ho mofetoleli

Bala hape ho blog ea rona:

Source: www.habr.com

Eketsa ka tlhaloso