Seccomp i Kubernetes: 7 mea e tatau ona e iloa mai le amataga

Manatua. fa'aliliu.: Matou te tuʻuina atu ia te oe le faʻaliliuga o se tusiga a se inisinia sinia mo le puipuiga o talosaga i le kamupani Peretania ASOS.com. Faatasi ai ma ia, na ia amataina ai se faasologa o lomiga faʻapitoa mo le faʻaleleia atili o le saogalemu i Kubernetes e ala i le faʻaogaina o seccomp. Afai e fiafia le au faitau i le folasaga, matou te mulimuli i le tusitala ma faʻaauau ana mea i le lumanaʻi i lenei autu.

Seccomp i Kubernetes: 7 mea e tatau ona e iloa mai le amataga

O lenei tusiga o le muamua lea i se faasologa o pou i le auala e fatuina ai faʻamatalaga seccomp i le agaga o SecDevOps, e aunoa ma le faʻaogaina o togafiti faʻataulāitu. I le Vaega 1, o le a ou faʻamatalaina faʻavae ma faʻamatalaga i totonu o le faʻatinoina o seccomp i Kubernetes.

O le Kubernetes ecosystem e ofoina atu le tele o auala eseese e faʻamautu ma faʻaesea ai pusa. O le tusiga e uiga i le Secure Computing Mode, lea e lauiloa foi mea lilo. O lona uiga o le fa'amama lea o le telefoni feavea'i o lo'o avanoa mo le fa'atinoina e containers.

Aisea e taua ai? O se atigipusa ua na'o se fa'agasologa o lo'o fa'atinoina i luga o se masini fa'apitoa. Ma e faʻaaogaina le fatu e pei lava o isi talosaga. Afai e mafai e pusa ona faia soʻo se telefoni feaveaʻi, e le o toe umi ae faʻaogaina e le malware lenei mea e faʻafefe ai le tuʻueseeseina o pusa ma aʻafia ai isi talosaga: faʻalavelave faʻamatalaga, suia tulaga faʻaoga, ma isi.

o fa'amatalaga seccom e fa'amalamalama ai le telefoni feavea'i e tatau ona fa'atagaina pe fa'agata. E fa'agaoioia e le koneteina le taimi e amata ai ina ia mafai e le fatu ona mata'ituina le fa'atinoga. O le faʻaaogaina o ia faʻamatalaga e mafai ai ona e faʻatapulaʻaina le osofaʻiga o le vector ma faʻaitiitia le faʻaleagaina pe a fai o soʻo se polokalame i totonu o le koneteina (o lona uiga, o au faʻalagolago, poʻo latou faʻalagolago) e amata ona faia se mea e le faʻatagaina ona fai.

O'o atu i tulaga fa'avae

O le fa'amatalaga autu o le seccom e aofia ai elemene e tolu: defaultAction, architectures (po o archMap) ma 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 fuafua le fa'aletonu i'uga o so'o se faiga telefoni e le o fa'amaoti mai i le vaega syscalls. Ina ia faafaigofie mea, seʻi o tatou taulaʻi atu i tulaga taua e lua o le a faʻaaogaina:

  • SCMP_ACT_ERRNO - poloka le faŹ»atinoina o se telefoni feaveaŹ»i,
  • SCMP_ACT_ALLOW - fa'atagaina.

o le fuaiupu architectures o lo'o lisi atu fa'ailoga fa'atatau. E taua lenei mea ona o le faamama lava ia, e faʻaoga i le kernel level, e faʻalagolago i faʻamatalaga telefoni, ae le o latou igoa o loʻo faʻamaonia i le talaaga. Ole taimi ole koneteina ole a fa'afetaui i fa'amatalaga a'o le'i fa'aogaina. O le manatu o le telefoni feaveaʻi e mafai ona i ai ni ID eseese e faʻatatau i le fausaga o le faiga. Mo se faʻataʻitaʻiga, system call recvfrom (faʻaaogaina e maua ai faʻamatalaga mai le socket) ei ai ID = 64 i luga ole faiga x64 ma ID = 517 ile x86. o e mafai ona e mauaina se lisi o valaʻau uma mo le x86-x64 architectures.

I le vaega syscalls lisi uma telefoni faiga ma fa'amaoti mea e fai ia i latou. Mo se faʻataʻitaʻiga, e mafai ona e fatuina se lisi paʻepaʻe e ala i le seti defaultAction i SCMP_ACT_ERRNO, ma valaau i le vaega syscalls tofia SCMP_ACT_ALLOW. O lea, e te fa'atagaina na'o vala'au fa'amaonia i le vaega syscalls, ma faasāina isi uma. Mo le lisi uliuli e tatau ona e suia tulaga taua defaultAction ma faatinoga i le faafeagai.

O lenei e tatau ona tatou fai atu ni nai upu e uiga i nuances e le o manino. Faamolemole ia matau o fautuaga o loʻo i lalo e faʻapea o loʻo e faʻapipiʻiina se laina o pisinisi talosaga i luga o Kubernetes ma e te manaʻo latou te tamoʻe ma le itiiti ifo o avanoa e mafai ai.

1. AllowPrivilegeEscalation=sese

В securityContext o lo'o i ai se ta'otoga o pusa AllowPrivilegeEscalation. Afai e faʻapipiʻi i totonu false, o koneteina o le a amata ile (on) itiiti no_new_priv. O le uiga o lenei parakalafa e manino mai le igoa: e taofia ai le atigipusa mai le faʻalauiloaina o faiga fou ma sili atu avanoa nai lo ia lava.

O se itu a'afiaga o lenei filifiliga ua seti i true (default) o le taimi e fa'aoga ai le koneteina le fa'ailoga seccom i le amataga lava o le fa'agasologa o le amataga. O lea la, o telefoni uma e mana'omia e fa'agasolo ai taimi fa'alotoifale (fa'ata'ita'iga o le fa'atulagaina o ID fa'aoga/vaega, fa'aitiitia nisi o mea e mafai) e tatau ona fa'agaoioi ile fa'amatalaga.

I se atigipusa e fai mea faatauvaa echo hi, o fa'atagaga nei o le a mana'omia:

{
    "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)

... nai lo mea nei:

{
    "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)

Ae toe fai atu, aisea ua avea ai lea ma faafitauli? O le tagata lava ia, o le a ou aloese mai le faʻamaeʻaina o le telefoni feaveaʻi (sei vagana ua i ai se manaʻoga moni mo latou): capset, set_tid_address, setgid, setgroups и setuid. Ae ui i lea, o le luʻitau moni o le faʻatagaina o faʻagasologa e matua leai sau pule i luga, o loʻo e nonoa faʻamatalaga i le faʻatinoga o le taimi faʻatulagaina. I se isi faaupuga, i se tasi aso e te ono iloa ai pe a uma ona faʻafouina le koneteina runtime siosiomaga (pe e oe poʻo, e sili atu, e le kamupani o loʻo tuʻuina atu le ao), faʻafuaseʻi ona taofi le taʻavale pusa.

Motugaafa # 1: Fa'amomoe pusa ma AllowPrivilegeEscaltion=false. O lenei mea o le a fa'aitiitia ai le tele o fa'amatalaga seccom ma fa'aitiitia ai lo latou ma'ale'ale i suiga i le si'osi'omaga taimi ta'avale pusa.

2. Fa'atulaga fa'amatalaga seccom i le tulaga o koneteina

E mafai ona seti le talaaga seccom i le tulaga o le pod:

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

...po'o le tulaga o pusa:

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

Faamolemole ia matau o le syntax o loʻo i luga o le a suia pe a le Kubernetes seccomp o le a avea ma GA (o lenei mea o loʻo faʻamoemoeina i le isi faʻasalalauga o Kubernetes - 1.18 - approx. transl.).

E toaitiiti tagata latou te iloa e masani ona maua e Kubernetes buglea na mafua ai ona faʻaoga faʻamatalaga seccom i taofi pusa. O le siʻosiʻomaga taimi faʻataʻitaʻiga e totogi ai se vaega mo lenei faaletonu, ae o lenei koneteina e le mou ese mai le pusa, talu ai e faʻaaogaina e faʻapipiʻi ai a latou atinaʻe.

O le fa'afitauli o lenei koneteina e amata i taimi uma AllowPrivilegeEscalation=true, e taŹ»itaŹ»ia atu ai i faafitauli o loo taŹ»ua i le palakalafa 1, ma e lē mafai ona suia.

I le fa'aogaina o fa'amatalaga seccomp i le tulaga o koneteina, e te 'alo ese ai i lenei fa'alavelave ma e mafai ona e faia se fa'amatalaga e fa'atatau i se pusa fa'apitoa. E tatau ona faia lenei mea seia oʻo ina faʻapipiʻi e le au atiaʻe le pusa ma le faʻamatalaga fou (atonu 1.18?) e avanoa mo tagata uma.

Motugaafa # 2: Seti fa'amatalaga seccom i le tulaga o pusa.

I se tulaga aoga, o lenei tulafono e masani ona avea o se tali lautele i le fesili: "Aisea e aoga ai laʻu faʻamatalaga seccom ma docker runae e le aoga pe a uma ona faʻapipiʻi i se kulupu Kubernetes?

3. Fa'aaoga le taimi fa'agaoioiga/fa'agaoioiga na'o se mea mulimuli

E lua filifiliga a Kubernetes mo faʻamatalaga fausia i totonu: runtime/default и docker/default. O lo'o fa'atinoina uma e le ta'imu o koneteina, ae le o Kubernetes. O le mea lea, e mafai ona eseese e fa'atatau i le si'osi'omaga taimi fa'aaoga ma lona fa'asologa.

I se isi faaupuga, o se taunuuga o le suiga o le taʻavale, e mafai e le koneteina ona maua avanoa i se isi seti o telefoni feaveaʻi, e ono mafai pe leai foi. Ole tele ole taimi fa'aaoga Fa'atinoga o Docker. Afai e te mana'o e fa'aoga lenei fa'amatalaga, faamolemole ia mautinoa e fetaui mo oe.

tino mai docker/default ua le toe faaaogaina talu mai le Kubernetes 1.11, ia aloese mai le faaaogaina.

I lo'u manatu, talaaga runtime/default fetaui lelei mo le mafuaʻaga na faia ai: puipuia tagata faʻaoga mai lamatiaga e fesoʻotaʻi ma le faʻatinoina o se poloaiga docker run i luga oa latou taavale. Ae ui i lea, pe a oʻo mai i pisinisi faʻaoga o loʻo faʻaogaina i luga o le Kubernetes clusters, ou te faʻamalosi e finau o sea faʻamatalaga e matua matala ma e tatau i tagata atiae ona taulaʻi i le fatuina o faʻamatalaga mo a latou talosaga (poʻo ituaiga o talosaga).

Motugaafa # 3: Fausia fa'amatalaga seccom mo talosaga fa'apitoa. Afai e le mafai, fai faʻamatalaga mo ituaiga talosaga, mo se faʻataʻitaʻiga, fatuina se faʻamatalaga maualuga e aofia uma ai le upega tafaʻilagi API o le Golang application. Fa'aaoga na'o le taimi fa'agaoioiga/fa'agaoioiga e fai ma mea mulimuli.

I fa'amatalaga i le lumana'i, o le a ou fa'amatalaina pe fa'afefea ona fai secDevOps-inspired seccomp profiles, fa'autometi, ma fa'ata'ita'i i paipa. I se isi faaupuga, e leai sau 'alofaga e aua le fa'aleleia i fa'amatalaga fa'apitoa mo talosaga.

4. Unconfined E LE'O se filifiliga.

Mai muamua Kubernetes su'etusi saogalemu na aliali mai ona o le faaletonu seccom disabled. O lona uiga afai e te le setiina PodSecurityPolicy, lea o le a mafai ai i totonu o le fuifui, o pods uma e le o faʻamatalaina le faʻamatalaga seccom o le a aoga i totonu seccomp=unconfined.

O le galue i lenei faiga o lona uiga o se vaega atoa o le insulation ua leiloa e puipuia ai le fuifui. O lenei faiga e le fautuaina e tagata tomai faapitoa tau puipuiga.

Motugaafa # 4: E leai se atigipusa i totonu o le fuifui e tatau ona alu i totonu seccomp=unconfined, aemaise i siosiomaga gaosiga.

5. "Faiga su'etusi"

O lenei manatu e le faʻapitoa i Kubernetes, ae o loʻo pa'ū pea i le vaega "mea e te iloa ae e te leʻi amataina".

A'o tupu, o le faia o fa'amatalaga seccom e masani lava ona lu'itau ma fa'alagolago tele i tofotofoga ma mea sese. O le mea moni e le o maua e tagata faʻaoga le avanoa e faʻataʻitaʻi ai i latou i siosiomaga gaosiga e aunoa ma le lamatia o le "tuu" le talosaga.

Ina ua uma ona aliali mai le ogatotonu Linux 4.14 na faʻalauiloa mai ai le mafai ona faʻatino ni vaega o se talaaga i le faiga o suʻesuʻega, ma faʻamaumau faʻamatalaga e uiga i valaʻau uma a le polokalama i le syslog e aunoa ma le polokaina. E mafai ona faʻagaoioia lenei faiga e faʻaaoga ai le parakalafa SCMT_ACT_LOG:

SCMP_ACT_LOG: Seccomp o le a le afaina ai le filo e faia ai le telefoni pe afai e le fetaui ma soʻo se tulafono i totonu o le faamama, ae o faʻamatalaga e uiga i le telefoni feaveaʻi o le a logoina.

O se ta'iala masani lea mo le fa'aogaina o lenei vaega:

  1. Fa'ataga le faiga telefoni e mana'omia.
  2. Poloka telefoni mai le faiga e te iloa e le aoga.
  3. Faamaumau faamatalaga e uiga i isi valaau uma i le ogalaau.

O se faʻataʻitaʻiga faigofie e pei o lenei:

{
    "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)

Ae ia manatua e tatau ona e poloka uma telefoni e te iloa e le faʻaaogaina ma e ono afaina ai le fuifui. O se faavae lelei mo le tuufaatasia o se lisi o le aloaia Fa'amaumauga a Docker. O lo'o fa'amatalaina auiliili po'o fea vala'au o lo'o poloka ile fa'ailoga fa'aletonu ma pe aisea.

Ae ui i lea, e tasi le pu'e. E ui lava SCMT_ACT_LOG lagolagoina e le kernel Linux Talu mai le faaiuga o le 2017, ua faatoa ulufale mai nei i le faiga o Kubernetes. O le mea lea, ina ia faaaoga lenei metotia, e te manaomia se kernel Linux 4.14 ma le lomiga runC e le maualalo ifo v1.0.0-rc9.

Motugaafa # 5: E mafai ona faia se fa'ailoga fa'ata'ita'iga mo su'ega i le gaosiga e ala i le tu'ufa'atasia o lisi uliuli ma papa'e, ma e mafai ona fa'amauina fa'atasi uma.

6. Fa'aaoga lisi papa'e

Whitelisting e manaʻomia ai taumafaiga faʻaopoopo aua e tatau ona e faʻailoaina valaau uma e ono manaʻomia e le talosaga, ae o lenei auala e faʻaleleia atili ai le saogalemu:

E matua fautuaina le faʻaogaina o le auala paʻepaʻe aua e faigofie ma sili atu ona faʻatuatuaina. E mana'omia le fa'afouina o le lisi uliuli i so'o se taimi e fa'aopoopoina ai se fa'alavelave mata'utia (po'o se fu'a/filifiliga mata'utia pe a iai i le lisi uliuli). E le gata i lea, e masani ona mafai ona suia le faʻatusaina o se parakalafa e aunoa ma le suia o lona uiga ma faʻapea ona pasia le faʻatapulaʻaina o le lisi uliuli.

Mo Go applications, na ou atiaeina se meafaigaluega faʻapitoa e faʻatasi ma le talosaga ma aoina uma telefoni na faia i le taimi o le faʻatinoga. Mo se faʻataʻitaʻiga, mo le talosaga lenei:

package main

import "fmt"

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

... tatou fa'alauiloa gosystract faʻapea:

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

... ma tatou maua ai le taunuuga lenei:

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

Mo le taimi nei, ua naʻo se faʻataʻitaʻiga-o nisi faʻamatalaga e uiga i meafaigaluega o le a mulimuli mai.

Motugaafa # 6: Fa'ataga na'o na telefoni e te mana'omia moni ma poloka isi uma.

7. Fa'ata'atia ni fa'avae sa'o (pe sauni mo amioga fa'afuase'i)

O le fatu o le a faʻamalosia le faʻamatalaga e tusa lava po o a mea e te tusia i totonu. E tusa lava pe le o le mea tonu lea e te manaʻo ai. Mo se faʻataʻitaʻiga, afai e te poloka le avanoa i telefoni pei exit poʻo exit_group, o le a le mafai ona tapunia saʻo le koneteina ma e oʻo lava i se faʻatonuga faigofie pei echo hi tautau o ia i lugao mo se vaitaimi le tumau. O se taunuuga, o le ae mauaina le maualuga o le faʻaogaina o le CPU i le fuifui:

Seccomp i Kubernetes: 7 mea e tatau ona e iloa mai le amataga

I ia tulaga, e mafai ona sau se mea aoga e laveai strace - o le a fa'aalia ai le fa'afitauli:

Seccomp i Kubernetes: 7 mea e tatau ona e iloa mai le amataga
sudo strace -c -p 9331

Ia mautinoa o loʻo i ai i faʻamatalaga uma le telefoni feaveaʻi e manaʻomia e le talosaga i le taimi faʻaoga.

Motugaafa # 7: Fa'alogo lelei i fa'amatalaga ma ia mautinoa o lo'o fa'amae'aina vala'au uma e mana'omia.

E fa'ai'u ai le vaega muamua o se faasologa o tala i le fa'aogaina o le seccomp i Kubernetes i le agaga o SecDevOps. I vaega o loʻo mulimuli mai o le a tatou talanoa ai pe aisea e taua ai lenei mea ma pe faʻafefea ona faʻaogaina le faagasologa.

PS mai faaliliu

Faitau foi i la matou blog:

puna: www.habr.com

FaŹ»atau talimalo faŹ»atuatuaina mo nofoaga ma DDoS puipuiga, VPS VDS servers šŸ”„ Fa'atau le 'upega tafa'ilagi talimalo fa'atuatuaina ma le puipuiga DDoS, 'au'aunaga VPS VDS | ProHoster