Drošība Docker konteineriem

Piezīme:: Docker drošības tēma, iespējams, ir viena no mūžīgākajām mūsdienu IT pasaulē. Tāpēc bez liekiem skaidrojumiem piedāvājam tulkojumu vēl vienai atbilstošu ieteikumu izlasei. Ja jau esat interesējies par šo jautājumu, daudzi no tiem jums būs pazīstami. Pašu izlasi esam papildinājuši ar noderīgu utilītu sarakstu un vairākām resursiem turpmākai izpētei.

Drošība Docker konteineriem

Piedāvāju jūsu uzmanībai rokasgrāmatu Docker drošības nodrošināšanai. Atsauksmes ir laipni gaidītas, jo tas vairāk izskatās kā fragmentu krājums no dažādiem resursiem, un ne visi no tiem ir rūpīgi pārbaudīti. Ieteikumi ir sadalīti trīs kategorijās:

  1. Nepieciešamie pasākumi operētājsistēmas saimniek datorā, strādājot ar Docker;
  2. Instrukcijas, kas attiecas uz montāžas konfigurācijas failu un konteineru izveidi;
  3. Drošības rīki, kas var integrēties ar Docker Enterprise specifiskajām funkcijām.


Rokasgrāmata balstīta uz dažādiem resursiem, no kuriem daudzi ir minēti zemāk. To nevar uzskatīt par izsmeļošu, tomēr tas aptver visas pamata lietas. Papildu informāciju var atrast CIS testu aprakstā (saite sniegta šīs rokasgrāmatas beigās), kā arī Docker dokumentācijā.

Docker drošības standarts

Docker drošības pārbaude automātiski pārbauda jūsu Docker atbilstību visizplatītākajām labākajām praksēm. Skripts kalpo par labu heuriskiem drošības testiem, tomēr to nevajadzētu uzskatīt par visaptverošu analīzes rīku.

Saimeja operētājsistēma

Acīmredzami, ka Docker konteiners nevar būt drošs, ja pati saimniek dators nav aizsargāta. Tāpēc ir jāievēro labākās prakses operētājsistēmas drošības nodrošināšanā. Turklāt būtu prātīgi veikt ievainojamības analīzi, papildus sekojošiem ieteikumiem.

Audita noteikumi

Izveidojiet un lietojiet audita noteikumus failiem, kas saistīti ar Docker, izmantojot auditctl. Piemēram, varat pievienot -w /usr/bin/dockerd -k docker uz /etc/audit.rules un restartēt audita pakalpojumu.

FIPS režīms

FIPS režīma aktivizēšana liek kriptogrāfiskajiem rīkiem pāriet uz algoritmiem, kas iekļauti FIPS (amerikāņu Federālās informācijas apstrādes standarti — piezīme tulkotājam), atbilst tādējādi federālajiem un nozares noteikumiem un prasībām. Ja hosta OS atbalsta FIPS režīmu, to var aktivizēt, izpildot šādas komandas:

sed -i 's\/GRUB_CMDLINE_LINUX="\/GRUB_CMDLINE_LINUX="fips=1 \/g' \/etc\/default\/grub\ngrub2-mkconfig -o \/boot\/grub2\/grub.cfg && reboot

Tāpat ir nepieciešams aktivizēt FIPS Docker Engine:

mkdir -p \/etc\/systemd\/system\/docker.service.d 2>&1; echo -e "[Service]n Environment="DOCKER_FIPS=1"" > \/etc\/systemd\/system\/docker.service.d\/fips-module.conf; systemctl daemon-reload; systemctl restart docker

Lai iegūtu sīkāku informāciju, skatiet dokumentāciju Docker un Red Hat.

Docker Secrets

Konfidenciālie dati jāuzglabā kā slepeni. Atbilstošo pakalpojumu var startēt, izmantojot komandu docker service create:

docker service create --label com.docker.ucp.access.label=\/prod --name nginx --publish 443 --secret source=orcabank_prod_mobile.ca.pem.v1,target=ca.pem nginx

Sīkāku informāciju skatiet dokumentācijā.

Docker konfigurācijas fails

Sevis iestatījumus var pievienot konfigurācijas failam /etc/docker/daemon.json:

  • "icc":false — atslēdz datu apmaiņu starp konteineriem, lai novērstu nevajadzīgu informācijas noplūdi.
  • log-level: "info" — sagūst visus žurnālus, izņemot atkļūdošanas žurnālus.
  • {
      "log-driver": "syslog",
      "log-opts": {
        "syslog-address": "udp:\/\/1.2.3.4:1111"
      }
    }

    — pieslēdz attālināto žurnālu veidošanu, nosūtot tos uz norādīto adresi. Darbojas tikai tad, ja darbojas syslog démons. Opcijās tiek pieļauts TCP un UDP. Ir iespējams pieslēgt katram konkrētam konteineram. Šim nolūkam Docker palaišanas laikā jāizvēlas īpašs karogs (--log-opt syslog-address=ADDRESS).

  • "userns-remap": "Your_User" — novērš privilēģiju celšanu (privilege escalation), izolējot nosaukumu telpu zem konkrēta lietotāja.

Transporta līmeņa drošība

Piekļuve Docker démona piekļuvei (ja attālinātā piekļuve ir nepieciešama) jābūt tikai lietotājiem ar piekļuvi TLS klienta akreditācijām.

Autorizācijas spraudņi

Izlemiet, kuriem lietotājiem ir atļauts veikt kādas komandas, un izveidojiet atbilstošu autorizācijas spraudni Docker. Pēc tam kārtējais Docker démons un pievienojiet tam spraudni:

dockerd --authorization-plugin=PLUGIN_ID

Lai uzzinātu vairāk par autorizācijas spraudņu izveidi, skatiet dokumentācijā.

Démona opcijas

Docker démons darbojas ar noklusējuma parametru komplektu.

  • --live-restore — šis parametrs palīdz samazināt konteineru dīkstāves laiku, izslēdzot vai restartējot sistēmu. Tas padara to vieglāk niansēt vai atjaunot ar minimālu dīkstāvi;
  • --userland-proxy=false — kad ir izmanto hairpin NAT, proxy lietotāja telpā kļūst lieks pakalpojums, kas tikai palielina iespējamās uzbrukumu vektorus;
  • --no-new-privileges — novērš papildu privilēģiju piekļuvi konteineriem, izmantojot suid vai sguid;
  • --seccomp-profile /path/to/profile — ja jums ir savs seccomp profils, varat to piemērot, izmantojot šo karogu. Vairāk par Seccomp un Docker varat uzzināt šeit.

Konteineru un būvniecības failu konfigurācija

Lietotāja izveide

Pārliecinieties, ka konteineram ir izveidots lietotājs un palaižiet to ar šo lietotāju (NEPALAIŽIET konteineru kā root).

Tālvadība

Aizliegiet attālinātu piekļuvi demonam. Ja tā ir nepieciešama, aizsargājiet to ar sertifikātiem.

Izolējiet lietotāja nosaukumu telpu

Īpaši svarīgi ir pārliecināties, ka lietotāja nosaukumu telpa Dockerā ir izolēta, jo pēc noklusējuma tā tiek koplietota ar hosta nosaukumu telpu. Dažos gadījumos to var izmantot, lai iegūtu privilēģijas vai pat izietu ārpus konteineru. Lietotāja nosaukumu telpu var izolēt, rediģējot konfigurācijas failu (kā aprakstīts iepriekš nodaļā 'Docker konfigurācijas fails'). Papildus šīs problēmas pieminēšana šeit ir saistīta ar tās nozīmīgumu.

Healthcheck

Healthcheck (darba stāvokļa pārbaude) ir jaudīgs rīks, kas ļauj pārbaudīt konteineru integritāti. To iestatā Dockerfile, izmantojot komandu HEALTHCHECK. Healthcheck ļauj pārliecināties, ka konteineris darbojas pareizi. Zemāk redzamajā piemērā darba stāvokļa pārbaude beidzas ar 0, ja serveris darbojas, un 1, ja tas ir 'nokritis':

HEALTHCHECK CMD curl --fail http://localhost || exit 1

SELinux

Ja SELinux atbalsta hosta operētājsistēma, izveidojiet vai importējiet SELinux politiku un palaidiet Docker ar SELinux iespējotu:

docker daemon --selinux-enable

Šajā gadījumā Docker konteinerus var palaist ar drošības iespējām, piemēram:

docker run --interactive --tty --security-opt label=level:TopSecret centos /bin/bash

Network interfaces

Pēc noklusējuma Docker klausās visus tīkla interfeisus. Tā kā lielākajā daļā gadījumu trafiks tiek gaidīts tikai uz vienu no tiem, šāda pieeja nepamatoti palielina uzbrukumu risku. Tādēļ, uzsākot konteineru, to var piesaistīt konkrētiem interfeisiem uz hosta:

docker run --detach --publish 10.2.3.4:49153:80 nginx

Kešētās attēlu versijas

Lejupielādējot attēlus, pārliecinieties, ka vietējais kešatmiņa atbilst krātuves saturam. Pretējā gadījumā jūs varat saņemt nolietotu attēla versiju vai attēlu, kas satur drošības ievainojamības.

Tīkla tilts

Noklusējuma tīkla modelis, docker0, ir neaizsargāts pret ARP-spoofing un MAC-flooding uzbrukumiem. Lai atrisinātu šo problēmu, izveidojiet tīkla tiltu atbilstoši savām specifikācijām, kā aprakstīts šeit.

Docker soketa brīdinājums

Nekad neizveriet Docker soketu iekš konteineru. Pretējā gadījumā konteineram būs iespēja izpildīt Docker komandas un, attiecīgi, sazināties ar hosta operētājsistēmu un kontrolēt to. Nedariet to.

Docker Enterprise konfigurācija

Docker Trust

Docker Trust ļauj ģenerēt atslēgas, ar kurām var pārbaudīt attēlu kriptogrāfisko integritāti. Docker Trust atslēgas var izmantot Docker attēlu parakstīšanai ar privātajām atslēgām, ko pārbauda publiskās atslēgas uz Notary Server. Papildinformācija — šeit. Docker Trust ieslēgšana Enterprise Engine detalizēti aprakstīta šajā dokumentācijas nodaļā.

Vainojumu skenēšana

Docker Enterprise ir iebūvēts ievainojamību skeneris, kas ļauj lejupielādēt CVE datubāzi offline ievainojamību skenēšanai attēlos. Regulāra attēlu skenēšana palīdz padarīt tos drošākus: lietotājs uzreiz saņem brīdinājumus par atrastajām ievainojamībām. Sīkāka informācija par to, kā to var izdarīt, skatiet šeit.

Piezīme:: Ir arī Open Source ievainojamību skeneri Docker attēlos, piemērus skatiet raksta beigās.

LDAP un UCP integrācija

Universal Control Plane var integrēt ar LDAP. Rezultātā tiek iegūta vienkāršota autentifikācijas sistēma, kas novērš nevajadzīgu dublēšanu. Sīkāka informācija par to ir pieejama rakstā Integrate with an LDAP directory.

Citi materiāli

Papildu informāciju par labākajām praksēm Docker drošības nodrošināšanā var atrast docs.docker.com. Tāpat iesakām lejupielādēt Center for Internet Security testus Docker.

Tulkotāja bonuss

Kā loģisku papildinājumu šim rakstam publicējam sarakstu ar 10 populārām Open Source rīku drošības nodrošināšanai Docker. Tas tika aizņemts no cita raksta (no Bill Doerrfeld no Doerrfeld.io).

Piezīme: Par vairākām šeit minētajām iniciatīvām lasiet arī rakstā «33+ Kubernetes drošības rīki».

  1. Docker drošības pārbaude — jau iepriekš minētais skripts, kas pārbauda Docker konteinerus, vai tie atbilst izplatītām drošības praksei.

    Drošība Docker konteineriem

  2. Clair — iespējams, populārākā utilīta statiskai ievainojamību analīzei konteinerā. Tā izmanto daudzus CVE ievainojamību datubāzes (ieskaitot vadošo Linux izplatīšanas versiju, piemēram, Red Hat, Debian, Ubuntu, izsekošanas sistēmas). Piedāvā API izstrādātājiem un vieglu iespēju paplašināt funkcijas (caur «piedziņu» pievienošanu). Tiek izmantota populārajā publiskajā konteineru attēlu reģistrā (analogs Docker Hub) — Quay.io.
  3. Cilium — risinājums tīkla drošības nodrošināšanai līmenī, kas balstīts uz BPF tīkla pakotņu filtrēšanas tehnoloģiju.
  4. Anchore — utilīta, kas analizē attēlu saturu drošības ievainojamību meklēšanai, balstoties uz CVE datubāzi. Turklāt tā ļauj izmantot pielāgotas politikas (balstoties uz dažādiem datiem, tostarp baltajiem/melniem sarakstiem, failu saturu utt.) konteineru drošības novērtēšanai.
  5. OpenSCAP Workbench — visa ekosistēma drošības politiku izstrādei un uzturēšanai dažādās platformās. Tiek piedāvāta utilīta konteineru pārbaudei oscap-docker.
  6. Dagda — utilīta, kas skenē Docker konteinerus uz ievainojamībām, trojāniem, vīrusiem un ļaunprātīgajām programmām. CVE datubāzē ir iekļautas pārbaudes atkarībā no OWASP, Red Hat Oval datubāzes un Exploit Database krātuves.
  7. Notary — rāmis Docker attēlu parakstīšanai, sākotnēji izstrādāts Docker Inc (un pēc tam nodots CNCF attīstībai). Tās izmantošana ļauj deleģēt lomas un sadalīt atbildību par konteineriem, kā arī pārbaudīt attēlu kriptogrāfisko integritāti.
  8. Grafaes — metadatu API, kas paredzēts iekšējo drošības politiku pārvaldībai. Piemēram, tas uzlabo konteineru drošības skeneru darbu. Shopify izmanto šo API, lai pārvaldītu metadatus par saviem 500 tūkstošiem attēlu.
  9. Sysdig Falco — utilīta Kubernetes, kas uzrauga sistēmas uzvedību: aktivitāti konteineros, uz hostiem, tīklā. Tā ļauj konfigurēt nepārtrauktas pārbaudes infrastruktūrā, atklāt anomālijas un nosūtīt brīdinājumus par jebkuriem Linux sistēmas izsaukumiem.
  10. Banyanops Collector — vēl viens rīks Docker konteineru attēlu statiskai analīzei. Tas ļauj "ieviest" attēla failos, apkopo nepieciešamo informāciju, piemērojot nepieciešamos noteikumus utt.

Vēl viena laba praktisko ieteikumu izlase par to, kā padarīt Docker drošāku, ir atrodama šajā rakstā kompānijā Aqua Security. Daudzi no tās padomiem sakrīt ar jau iepriekš minētajiem, bet ir arī citi. Piemēram, autori piedāvā organizēt aktivitātes uzraudzību konteineros un norāda, uz ko pievērst uzmanību, lietojot Docker Swarm.

Tiem, kuri vēlas vēl sīkāk iepazīties ar šo tēmu, pagājušajā gadā iznāca grāmata "Docker Security: Quick Reference»", fragmenti no kuras ir brīvi pieejami šeit.

Visbeidzot, praktiskai iepazīšanai ar dažiem Docker drošības aspektiem: Seccomp profiliem un Linux kodola capabilities izmantošanu konteineros — var izpildīt attiecīgās laboratorijas darba uzdevumus resursā Play with Docker* — skat. sadaļu „Drošība”.

Drošība Docker konteineriem

* Par šo pašu resursu mēs stāstījām pirms diviem gadiem, un 2018. gada novembrī ar to notika ļoti interesanta (drošības ziņā) vēsture. Ja īsi, speciālistiem no CyberArk Software Ltd. izdevās to uzlauzt: iegūt iespēju izpildīt komandas ārpus konteineriem, t.i., uz hosta sistēmas. Lieliska ilustrācija drošības problēmām Docker, vai ne? Par visām notikušā detaļām lasiet šeit.

P.S. no tulka

Lasiet arī mūsu emuāra rakstos:

Avots: habr.com

Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem 🔥 Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem | ProHoster