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.

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"
}
]
}()
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. 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 . 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"
}
]
}()
... 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"
}
]
}()
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 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 lea na mafua ai ona faʻaoga faʻamatalaga seccom i . 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 . 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 na aliali mai ona o le faaletonu . 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:
- Fa'ataga le faiga telefoni e mana'omia.
- Poloka telefoni mai le faiga e te iloa e le aoga.
- 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"
}
]
}()
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 . 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 .
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 o mo se vaitaimi le tumau. O se taunuuga, o le ae mauaina le maualuga o le faʻaogaina o le CPU i le fuifui:

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

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
