Kako zavarovati dockerja v proizvodnem okolju?

Poglejmo, kako utrditi in pritrditi Docker za proizvodno okolje.


Čeprav Docker je razvijalcem programske opreme in inženirjem DevOps omogočil hitro gradnjo in uvajanje aplikacij, poleg tega pa je na voljo tudi velika napadalna površina za kibernetske hekerje.

Poglejte, kako zavarovati Docker na platformi Linux iz naslednjega.

  • Napake v konfiguraciji
  • Oddaljeno izvajanje kode
  • Buffer preliva
  • Ponarejanje slik in tako naprej.

Izkoristili bomo naslednja orodja, kot so Dockerjev notarski strežnik za podpisovanje slik in Varnost docker klopi da preverite gostitelja, konfiguracijo demona ipd.

Preden nadaljujemo z varovanjem, si oglejmo osnove na dotik.

Kaj je tehnologija zabojnikov?

Container tehnologija omogoča razvijalcem ali DevOps inženirjem paketno aplikacijo, da se lahko zažene z odvisnostmi, izoliranimi od drugih procesov.

Na trgu obstaja več tehnologij zabojnikov, kot so Apache Mesos, Raketa, lxc, in Docker. Čeprav spadajo v kategorijo tehnologije zabojnikov, delujejo drugače.

Razlika med VM & VE

Gostitelj virtualnega stroja se popolnoma razlikuje od gostitelja virtualnega okolja. Na virtualnih računalnikih vsaka posoda z aplikacijo ima svoj nabor knjižnic in operacijskega sistema, medtem ko aplikacije privzeto v gostitelju virtualnega okolja, kot je lxc, in dockerju delijo jedro Linuxa.

Kaj je Docker?

Docker je tehnologija zabojnikov, ki jo milijoni uporabljajo za izdelavo spletne aplikacije in njeno uporabo iz preizkusnega v proizvodno okolje.

Dockerjev motor

Motor Docker je sestavljen iz treh komponent.

  • Strežnik: Ta komponenta je dolgotrajen postopek ali demon, ki je odgovoren za upravljanje slik in vsebnikov.
  • API REST: Ta vmesnik omogoča komunikacijo docker-demon in orodje docker odjemalec.
  • Orodje Docker Client: Orodje za odjemalce Docker uporablja komponento REST API za obveščanje demona dockerja za uporabo kontejnerske aplikacije.

Docker Trusted Registry

Docker Trusted Registry je Dockerjeva rešitev za shranjevanje slik za poslovne platforme podjetja. Razlikuje se od docker pesto.  Medtem ko je vozlišče dockerja gostovano v oblaku, je registrski zaupnik docker-jev lokalna rešitev za shranjevanje Docker Enterprise Edition.

Docker Content Trust

Docker Content Trust omogoča uporabo podatkovnih podpisov za slike, poslane in prejete v oddaljene registre dokerjev, kot je docker pesto.

Linux Namespace

Linux-prostori s imeni so funkcija jedra Linuxa, ki izolira zabojnikano aplikacijo ali postopek, ki deluje na gostitelju virtualnega okolja od drugih procesov.

Linux nadzorne skupine (skupine)

Linux Control Groups je funkcija jedra Linuxa, ki vam omogoča, da dodelite vire, kot so čas CPU, pasovna širina omrežja, sistemski pomnilnik in tako naprej, aktivnim procesom na gostitelju.

Zmožnosti

V Linuxu je v podsistemu jedra zaščitna funkcija, ki jo je mogoče nastaviti ali uveljaviti za omejitev privilegiranega procesa, tak postopek, ki ga izvaja uporabnik z UID 1. Čeprav privilegirani procesi ali uporabniki lahko zaobidejo diskrecijsko dovoljenje za nadzor dostopa, ne morejo zaobiti pravila o zmogljivostih.

Zdaj se osredotočimo na varnost.

Zavarovanje Docker Host

V tem razdelku bomo pogledali, kako zavarovati gostitelja, kjer Docker prebiva.

Optično branje Linux jedra

Preden gostitelja dockerja gostite na platformi Linux, morate najprej pregledati jedro. Obstaja več odprtokodnih orodij, kot so Lynis in OpenVAS lahko uporabite za skeniranje jedra Linuxa.

Kopirajte ali klonirajte projekt Lynis iz Github-a s pomočjo ukaza git clone.

git klon https://github.com/CISOfy/lynis.git

Nato uporabite spodnji ukaz za pomikanje do imenika lynis in pregled sistema Linux.

CD linis; ./livisni revizijski sistem

Strdi Linux jedro

Ko ste skenirali jedro Linux za sistemske ranljivosti, lahko jedru dodate še en dodatni sloj zaščite preko varnost. Ponuja varnostne funkcije, kot so naslednje.

  • Preprečevanje izkoriščanja zaščitnega preliva
  • / tmp preprečevanje ranljivosti rase
  • / proc omejitve, ki ne puščajo informacij o lastnikih procesov.
  • Preprečevanje samovoljnega izvrševanja kode v jedru in tako naprej.

Na začetku lahko Prenesi zaplata brezplačno od grsecurity in ga uporabite na vašem trenutnem jedru. Ampak brezplačnih popravkov ne dovoljuje več.

Namestite Docker v VM

Namesto da namestite Docker neposredno na Linux gostitelja, lahko dodate dodatno plast zaščite, tako da jo namestite v virtualni stroj. S tem tudi, če pride do težave z ranljivostjo gostiteljskega jedra, to ne bo vplivalo na vsebnike dockerjev.

Zaščita koreninskih privilegijev

Docker privzeto zahteva korenske privilegije za ustvarjanje in upravljanje vsebnikov. Zlonamerna skripta lahko to napadalno površino izkoristi za to, da se poveča na podporočnika na strežniku Linux in sčasoma dostopa do občutljivih datotek / map, slik, potrdil itd..

Če ga želimo preprečiti, lahko uporabimo naslednji ukaz. Odločimo se lahko, da bomo opustili zmogljivosti, kot sta setgid in setuid, da drugim programom ali procesom preprečimo spreminjanje svojega GID-a v drugega GID-a, kar lahko povzroči privilegij stopnjevanja. Lahko tudi preverite tukaj za seznam definicij zmogljivosti Linuxa.

Spodnji ukaz zažene vsebnik spletnega strežnika apache in spušča nastavljene in nastavljene zmogljivosti s pomočjo –cap-drop, da prepreči, da bi apache vsebnik spremenil svoj GID in UID v drug UID in GID.

GID in UID se v tem kontekstu nanašata na ID skupine oziroma ID uporabnika.

docker run -d –cap-drop SETGID –cap-drop SETUID apache

Uporabnik Dockerja

Poleg preprečevanja drugih programov ali procesov lahko ustvarite tudi uporabnika za upravljanje operacij dockerja, kot je na primer docker run, namesto da bi ga upravljali prek nadporočnika.

Uporabnika dockerja lahko dodate ali ustvarite z naslednjim:

sudo groupadd docker

Zgornji ukaz ustvari skupino, imenovano docker

Nato ustvarite uporabnika s spodnjim ukazom:

sudo useradd mike

Končno uporabite spodnji ukaz, da dodate uporabniški mikrofon v skupinski docker za administracijo docker operacij.

sudo usermod -aG docker mike

Upravljanje vsebnika s skupinami

V proizvodnem okolju imate lahko več posod.

Če na vašem gostitelju nimate nameščenih skupin, lahko za namestitev uporabite naslednji ukaz in potrdite tukaj (za Ubuntu) o tem, kako ga konfigurirati.

sudo apt – namestite cgroup-bin cgroup-lite cgroup-tools cgroupfs-mount libcgroup1

Kontejnerje lahko razporedimo na omejene vire procesorja prek –cpu-share in -cpuset-cpus

Naslednji ukazni primer prikazuje, da je proces vsebnika prodnginx izveden samo na prvem jedru prek –cpuset-cpus in dodeljuje 20 CPU prek –cpu-delnic, medtem ko se postopek vsebnika proxnginx izvaja na prvih dveh jedrih procesorja in je dodeljen tudi 20 CPU.

docker run -d –ime prodnginx –cpuset-cpus = 0 –cpu-share = 20 nginx
docker run -d –ime testnginx –cpuset-cpus = 2 –cpu-share = 20 nginx

Nato vnesite statistične podatke ukazne dockerja, da si ogledate porabo CPE-ja v vsebnikih prodnginx in testnginx

ID IME KONTEJNER CPU% UPORABA MEM / OMEJITEV MEM% NET NET V / I BLOCK V / I
845bea7263fb prodnginx 57,69% 1,285MiB / 985,2MiB 0,13% 578B / 0B 1,33MB / 0B
189ba15e8258 testnginx 55,85% 1,25MiB / 985,2MiB 0,13% 578b / 0B 1,33MB / 0B

Če imate na voljo več kot en vsebnik, je dobro določiti skupne dele CPU za docker gostitelja.

Upravljanje vsebnikov s prostorskimi imeni

Imenski prostor lahko prepreči, da bi se vsebniki prikazovali kot privilegirani uporabniki, kar lahko pomaga, da se izognete napadom stopnjevanja privilegij.

Imenski prostor lahko omogočimo v dockerju z uporabo / etc / subuid in / etc / subgid datotek, kot je prikazano spodaj.

  • ustvarite uporabnika z ukazom adduser

sudo adduser dockremap

  • Nastavite podproid za uporabniško dockrema

sudo sh -c ‘echo dockremap: 400000: 65536 > / itd / subbuid ‘

  • Nato nastavite subgid za uporabniški dockremap

sudo sh -c ‘echo dockremap: 400000: 65536 > / etc / subgid “

  • Odprite datoteko daemon.json in jo napolnite z naslednjo vsebino, da atribut userns-remap povežete z uporabniškim dockremapom

vi /etc/docker/daemon.json
{

"userns-remap": "dockremap"

}

  • Pritisnite: wq, če želite shraniti in zapreti datoteko daemon.json, in končno znova zagnati docker, da omogočite imenske prostore na strežniku dockerja

sudo /etc/init.d/docker znova zaženite

Zavarovanje Dockerjevega demona

Prav tako je treba konfigurirati Docker-ov demon, da se zagotovi varna komunikacija med docker-jevim odjemalcem in docker-jevim demonom prek TLS-a.

Z naslednjim ukazom odprite datoteko daemon.json in kopirajte in prilepite naslednjo vsebino (zamenjajte IP s svojim dejanskim), kot je prikazano spodaj

vi daemon.json
{
"odpravljanje napak": napačno,
"tls": prav,
"tlscert": "/var/docker/server.pem",
"tlskey": "/var/docker/serverkey.pem",
"gostitelji": ["tcp: //192.168.16.5: 2376"]
}

Zaščita komponent Dockerja

Poglejmo si, kako uporabiti orodja, kot so CodeNotary in notarski strežnik podpisovati slike, da bi se izognili ponarejanju slik. Poleg tega je treba skenirati tudi slike, da se prepričate, da slike niso polne ranljivosti

Za podpis in preverjanje slik ter uporabo bomo uporabili nockerjev strežnik Docker Sidrni motor za skeniranje slik glede ranljivosti.

Preverite slike z notarskim strežnikom

Preden lahko za podpisovanje slik uporabimo notarski strežnik, moramo prenesti in namestiti docker-compose. Docker Compose bomo uporabili za nastavitev notarskega strežnika.

  • Zaženite spodnji ukaz in naložite najnovejšo različico Docker Compose

sudo curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s) – $ (unme -m)" -o / usr / local / bin / docker-compose

  • Uporabite dovoljenja za izvedbo docker-compose, kot je prikazano spodaj

sudo chmod 700 / usr / local / bin / docker-compose

  • Lahko preizkusite, ali ste uspešno namestili docker-compose z naslednjim ukazom

docker-compose – pretvorba

  • Zdaj lahko namestimo notarski strežnik prek docker-compose

git klon https://github.com/theupdateframework/notary.git

  • Zgoraj navedeni ukaz klonira ali nopira strežnik notarja iz notarsko skladišče
  • Zaženite notarskega strežnika in podpisnika prek spodnjih ukazov:

graditi docker-sestavljati
docker-sestavljati up -d

  • Nato kopirajte konfiguracijo in potrdila o preizkusu v lokalni notarski imenik s spodnjim ukazom

mkdir -p ~ / .notar && cp cmd / notar / config.json cmd / notar / root-ca.crt ~ / .notary

  • Zdaj zaženite naslednji ukaz, da notarskega strežnika povežete s stranko docker

izvoz DOCKER_CONTENT_TRUST = 1
izvoz DOCKER_CONTENT_TRUST_SERVER = https: // notarski strežnik: 4443

  • Ustvarite par ključev delegiranja s spodnjim ukazom

ključ docker zaupanja ustvari mike –dir ~. / docker / trust

  • Zdaj ustvarimo nove ciljne ključe v primeru, da skladišče ne obstaja

docker zaupnik podpisnik dodaj –key ~ / .docker / trust / mike.pub mike mikedem0 / whalesay

  • Nato lahko podokno podpišete s pomočjo zaupnega znaka ukaznega dockerja. Sliko dockerja morate izvleči iz vozlišča dockerja in ga znova označiti z ukazom docker pull in docker tag.

znak zaupanja docker mikedem0 / nginx: najnovejši

Prav tako lahko skenirate slike dockerja glede ranljivosti in napak v konfiguraciji. Tu lahko preverite, kako uporabljate Anchor Engine za iskanje ranljivosti in Varnost docker klopi za preverjanje konfiguracijskih napak.

Upam, da vam zgoraj navedeno predstavi varnost Docker za proizvodno okolje. Morda boste želeli preveriti tudi ta tečaj Udemy kramp in zavarovanje Dockerjevih zabojnikov.

Oznake:

  • Docker

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map