Seccomp in Kubernetes: 7 res a primordio scire debes

Nota. transl.: Intentionem tuam exhibemus translationem articuli per applicationem senioris fectum securitatis in societate Britannica ASOS.com. Cum ea, incipit seriem publicationis ad securitatem meliori in Kubernetes per usum seccomp dedicandam. Si lectores placet introductio, auctorem sequemur et in hoc argumento cum suis futuris materiis permanebimus.

Seccomp in Kubernetes: 7 res a primordio scire debes

Articulus hic primus est in serie nuntia quomodo profiles seccomp in spiritu SecDevOps crearet, nisi magicis et veneficiis adhibitis. In Parte I, fundamenta et singula ad effectum deducendi in Kubernetes tegam.

Ecosystem Kubernetes varias vias praebet ad continentes tutandos et segregandos. Articulus est de modo computandi Secure, etiam notus as seccomp. Essentia sua est ratio eliquare in vasis ad executionem vocat.

Quid interest? Continens est iustus processus cursus in machina specifica. Utitur autem nucleo mox ut aliis medicamentis. Si continentia aliquem systematis vocationis conficere potuit, brevissime malware hoc usui esset ut praetermitteret continentis solitudinem et alias applicationes afficeret: informationes intercipere, occasus systematis mutare, etc.

seccomp profiles definire quae ratio vocat permissa vel erret. Continens runtime eos operatur cum incipit ut nucleus earum executionem monitorem possit. Talibus perfiles permittit tibi vectorem oppugnationis finire et damnum minuere si quis programmata intra continentem (id est, clientelas tuas vel eorum clientelas) inceperit facere aliquid quod facere non licet.

Questus ad basics

In basic seccomp profile tria elementa includit: defaultAction, architectures (aut archMap) et 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 defectus sortis ratio determinat aliquam vocationem non determinatis in sectione syscalls. Ut faciliora omnia efficiant, dolor sit in duobus valoribus principalibus qui adhibebuntur;

  • SCMP_ACT_ERRNO - ratio vocationis impedit executionem;
  • SCMP_ACT_ALLOW — concedit.

sectioni architectures scopum architecturae enumerantur. Hoc magni momenti est quod ipsum colum, ad nucleum planum applicatum, a systematis identificatoribus dependet, et non a nominibus eorum in figura definitis. Continens runtime illis identificantibus ante usum congruit. Idea est quod ratio vocat potest habere omnino diversa IDs secundum systema architecturae. Exempli gratia, ratio vocationis recvfrom (ex nervum recipere solebat) ID = 64 in systematibus x64 et ID = 517 ad x86. est indicem omnium systematum invenire potes architecturae x86-x64.

In sectione syscalls enumerat omnia ratio vocat et specificat quid cum illis faciendum sit. Exempli gratia, album per occasum creare potes defaultAction on SCMP_ACT_ERRNOet vocat in sectione syscalls assign SCMP_ACT_ALLOW. Ita, vos tantum vocatis permittitis specificatis in sectione syscallsac prohibemus. Nam notatione debes mutare bona defaultAction et factis in contrarium.

Nunc pauca de nuances non ita perspicua dicamus. Nota quaeso commendationes infra ponendas te disponi ad applicationes negotiorum in Kubernetes et eas cum minimis privilegiis possibilibus currere velis.

1. AllowPrivilegeEscalation = falsum

В securityContext continens modularis AllowPrivilegeEscalation. Si est installed in false, continentia incipiet (on) bit no_new_priv. Sensus huius parametri patet ex nomine: non impedit quominus novos processus maioribus privilegiis quam habeat.

A latus effectus huius optionis positus est true (default) est quod continens runtime applicat profile seccomp in ipso initio processus satus. Ita omnia systema vocat requiri ad processuum runtimorum internorum (exempli gratia usor/group IDs, omissis quibusdam facultatibus) in profano esse debet.

Ad vas quod facit levia echo hisequentes permissiones requirentur;

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

...pro his:

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

Sed rursus cur haec quaestio est? Personaliter, ne albumen haec systema (nisi eis verum opus sit); capset, set_tid_address, setgid, setgroups и setuid. Vera tamen provocatio est quod permittens processibus quas omnino nullam potestatem habes, profiles ad exsecutionem runtime continentis alligare. Aliis verbis, uno die invenies quod post adaequationem continentis ambitus runtimi (vel per te vel, potius, per nubes servitii provisoris), continentes subito currere desinunt.

Tip # IVCurre vasa cum AllowPrivilegeEscaltion=false. Hoc magnitudinem seccomp profile rediget et eas minus sensitivas efficit mutationes in ambitu runtime continentis.

2. Profecti seccomp profiles in quo est planum

Seccomp profile ad legumen gradu erigi potest:

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

... vel in continente gradu:

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

Nota quaeso quod syntaxin praedictam mutabit cum Kubernetes seccomp fiet GA (hic eventus expectatur in altera emissione Kubernetes - 1.18 - approx. transl.).

Pauci homines sciunt quod Kubernetes semper habuit bugquae seccomp perfiles adhibenda moram continens. Pars runtime ambitus huic defectui compensat, sed continens hoc e siliquis non evanescit, cum infrastructuram eorum configurare solet.

Difficultas est hoc continens semper incipit cum AllowPrivilegeEscalation=trueducens ad problemata in paragrapho 1, quod mutari non potest.

Utendo seccomp profiles in gradu continentis, hanc foveam vitas et figuram ad certum vase formandam creare potes. Hoc fiet donec tincidunt cimex figere ac nova versione (fortasse 1.18?) omnibus praesto fiat.

Tip # IVPone seccomp profiles in continente gradu.

In sensu practico, haec regula plerumque inservit responsioni universali quaestioni: « Cur profile seccomp opus meum cum? docker runsed non laborat postquam ad botrum Kubernetes disponit?

3. Usus runtime / default nisi in novissima spe

Kubernetes duas optiones pro constructis-in profiles habet: runtime/default и docker/default. Utrumque opus continentis runtime, non Kubernetes efficiunt. Ergo differunt secundum ambitum runtime adhibitis et versio.

Aliis verbis, propter mutationem runtime, continens accessum habere potest ad aliam rationem vocatus, qua uti potest vel non potest. Most runtimes uti Docker implementation. Si hac profano uti voles, commodo ut tibi idoneus sit.

profile docker/default deprecatus est quia Kubernetes 1.11, ita uti ne.

Mea sententia, profile runtime/default perfecte idoneus ad id ad quod creatus est: utentes a periculis tutandis mandatum exsequendi consociata docker run in carros. Nihilominus, cum ad applicationes negotiorum in racemis Kubernetes currit, contendere ausim ausim esse talem figuram nimis apertam esse et tincidunt in creandis perfiles applicationibus (vel generibus applicationum).

Tip # IV: Seccomp crea profiles ad applicationes specificas. Si id fieri non potest, profiles applicationis generum crea, exempli gratia, profanum provectum crea in quo APIs totius applicationis Golang interretialem includit. Tantum utere runtime / per annum ut ultimae rei.

In futuris postibus, tegam quomodo SecDevOps inspiratas profiles seccomp inspiratas, eas automate, easque in pipelines probabo. Aliis verbis, excusationem habebis non ad applicationes ad personas speciales.

4. liberum non est optio.

ex Primum Kubernetes securitatem audit accidit ut per defaltam seccomp debilitatum. Id si non PodSecurityPolicy, quod in botro efficiet , siliquae omnes , pro quibus profile seccomp non definiuntur , operabuntur seccomp=unconfined.

Hoc modo operandi significat integram tabulatum velit amitti, qui botrum tuetur. Aditus non commendatur a peritis securitatis.

Tip # IVNullum vas in botro debet currere seccomp=unconfinedpraesertim in ambitu gignendo.

5. "Audit modum"

Hoc punctum Kubernetes unicum non est, sed tamen in categoriam "rerum cognoscendi antequam incipias" cadit.

Sicut accidit, profiles seccomp creando semper provocavit ac graviter in iudicio et errore nititur. Re vera utentes simpliciter non habent facultatem probandi eos in ambitus gignendi sine applicatione "omissa".

Post emissionem Linux nuclei 4.14, fieri potest ut partes figurae in modo computorum currant, informationes de omnibus systematis vocatorum in syslog commemoratis, sed sine obstaculo. Vos can movere hunc modum utendi modulo SCMT_ACT_LOG:

SCMP_ACT_LOG: seccomp sequelam non afficit vocationis rationi faciendae si regulae in colum non congruit, sed notitia de vocatione systematis initium erit.

Hic est pro more militari ad utens hoc pluma:

  1. Patitur ratio vocat quae necessaria sunt.
  2. Obstructionum vocat ratio, quam scis non esse utilem.
  3. Notitia de omnibus aliis vocat in leg.

Simplicius exemplum hoc spectat:

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

Sed memento quod opus est ut omnes vocantes clauderet quod scis non esse utendum et potentia botrum laedere potest. Bonum fundamentum componendis index officialis est Docker documentum. Explicat singillatim quae ratio vocat praecluduntur in defectu profile et cur.

Sed est quis capturam. Etsi SCMT_ACT_LOG nucleo Linux post finem 2017 fultus, Kubernetes ecosystematis relative modo nuper ingressus est. Ergo ut hac methodo utaris, Linux nucleo 4.14 et versione runC non inferiori indigebis RC1.0.0, v9.

Tip # IV: Modus computus profile probandi in productione creari potest iungendo album et nigrum, et omnes exceptiones possunt initium fieri.

6. Usus whitelists

Whitelisting conatus additicium requirit, quod omnem vocationem cognoscere debes ut applicationis opus sit, sed aditus valde melioris securitatis est;

Valde commendatur uti accessu whitelist simplicior et certior. Notatio notatione opus erit ut quando ratio vocationis periculosa potentia (vel vexillum periculosum/optionis est, si in notatione est) adiciatur. Praeterea saepe possibile est repraesentationem moduli immutare, quin suam essentiam mutaverit, ac per hoc limitationes notationis praetermittat.

Pro Vade applicationes, speciale instrumentum elaboravi, quod applicationem et collectam comitatur omnium vocatorum in executione facta. Exempli gratia, for the following application;

package main

import "fmt"

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

Lorem ... gosystract ut sequitur:

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

... et consequimur hunc exitum:

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

Nunc, hoc pro exemplo — plura de instrumentis sequentur.

Tip # IV: Concede tantum eos vocat quos vere postulo et impedit alios.

7. Fundamenta ius pone (vel praepara ad mores inopinatos)

Praecipua figura servabit id quod in eo scribis. Etiam id ipsum non nisi. Exempli gratia, si aditum intercluderes ad vocat simile exit aut exit_groupcontinens non poterit recte ac etiam simplex mandatum claudere echo hi suspende eumo ad tempus indefinitum. Quam ob rem usus es in botro alto CPU:

Seccomp in Kubernetes: 7 res a primordio scire debes

In quibus casibus utilitas subvenire potest strace — Id quale sit, ostendet;

Seccomp in Kubernetes: 7 res a primordio scire debes
sudo strace -c -p 9331

Fac ut profile contineant omnia systema vocat applicationem applicationis runtime necessarios.

Tip # IV: Attende singillatim et fac ut omnia necessaria systematis vocatorum dealbatorum.

Hoc concludit primam partem seriei articulorum in usu seccomp in Kubernetes in spiritu SecDevOps. In sequentibus partibus loquemur de causa huius momenti et quomodo processus automate.

PS ab translator

Lege etiam in nostro diario:

Source: www.habr.com

Add a comment