Siguria për kontejnerët Docker

Shën. përk.: Tema e sigurisë Docker, ndoshta, është njëra nga temat e përjetshme në botën moderne IT. Prandaj, pa shpjegime të tepërta prezantojmë përkthimin e një koleksioni përkatës rekomandimesh. Nëse keni qenë të interesuar për këtë çështje, shumica e tyre do t'ju jenë të njohura. Ndërsa koleksioni e kemi plotësuar me një listë të mjeteve të dobishme dhe disa burime për studime të mëtejshme mbi këtë çështje.

Siguria për kontejnerët Docker

Shtroj për vëmendjen një udhëzues për sigurimin e Docker. Feedback-u është i mirëpritur, pasi kjo është më së shumti një grumbull i fragmenteve nga burime të ndryshme, dhe jo të gjitha ato kanë kaluar një kontroll të hollësishëm. Rekomandimet janë të ndara në tri kategori:

  1. Masat e nevojshme brenda sistemit operativ të hostit kur punoni me Docker;
  2. Udhëzime që ndodhen në skedarin e konfiguracionit të ndërtimit dhe krijimin e konteinerëve;
  3. Mjetet për siguri që mund të integrohen me funksionet specifike të Docker Enterprise.


Burimi për udhëzimin është një sërë burimesh, shumë nga të cilat janë të listuara më poshtë. Nuk mund të quhet përfundimtar, megjithatë mb-cover të gjitha bazat. Informacione të tjera mund të gjenden në përshkrimin e testeve CIS (lidhja është dhënë në fund të këtij udhëzimi), si dhe në dokumentacionin për Docker-in.

Docker Security Benchmark

Docker Bench for Security automatikisht konteston Docker-in tuaj për t'u siguruar se përputhet me praktikat më të zakonshme. Skripti shërben si një test heuristik i sigurisë, megjithatë nuk duhet të merret si një vegël për analizën e plotë.

Sistemi operativ i hostit

Evident është se një kontejner Docker nuk mund të jetë i sigurt nëse vetë sistemi i hostit nuk është i sigurt. Prandaj, është e nevojshme të ndiqni praktikat më të mira për sigurimin e sistemeve operative. Për më tepër, do të ishte e arsyeshme të bëhet një analizë e dobësive përveç rekomandimeve të mëposhtme.

Rregullat e auditimit

Krijoni dhe përdorni rregulla auditimi për skedarët që lidhin me Docker-in, duke përdorur auditctl. Për shembull, mund të shtoni -w /usr/bin/dockerd -k docker për /etc/audit.rules dhe rini shërbimin e auditit.

Rezhimi FIPS

Aktivizimi i modes FIPS bĂ«n qĂ« mjetet kriptografike tĂ« kalojnĂ« nĂ« algoritmet e pĂ«rfshira nĂ« FIPS (amerikane Standardet Federale pĂ«r Procesimin e Informacionit — shĂ«nim i pĂ«rkthyesit.), duke pĂ«rmbushur, kĂ«shtu, normat dhe kĂ«rkesat federale dhe tĂ« sektorit. NĂ«se sistemi operativ i hostit mbĂ«shtet modin FIPS, mund tĂ« aktivizohet duke ekzekutuar komandat e mĂ«poshtme:

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

Po ashtu, është e nevojshme të aktivizohet FIPS në Docker Engine:

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

Për informacione të tjera, shihni dokumentacionin Docker dhe Red Hat.

Sekretet e Docker

Të dhënat konfidenciale duhet të ruhen si sekrete. Shërbimin përkatës mund ta aktivizoni me komandën 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

Për detajet, shihni në dokumentacion.

Skedari i konfigurimit të Docker-it

Për konfigurim mund të shtoni cilësimet e mëposhtme në skedarin e konfigurimit /etc/docker/daemon.json:

  • "icc":false — ç aktivizon shkĂ«mbimin e tĂ« dhĂ«nave midis kontejnerĂ«ve, pĂ«r tĂ« shmangur rrjedhjen e padĂ«shiruar tĂ« informacionit.
  • log-level: "info" — kap tĂ« gjitha log-et pĂ«rveç atyre tĂ« ndihmĂ«s.
  • {
      "log-driver": "syslog",
      "log-opts": {
        "syslog-address": "udp://1.2.3.4:1111"
      }
    }

    — lidh remote logging, duke i dĂ«rguar ato nĂ« adresĂ«n e specifikuar. Funksionon vetĂ«m nĂ«se Ă«shtĂ« nisur demon syslog. Mbeshtet opsionet TCP dhe UDP. PĂ«rdorimi i njĂ« lidhjeje pĂ«r çdo kontejner specifik Ă«shtĂ« gjithashtu e mundur. PĂ«r kĂ«tĂ«, pĂ«rfshihet njĂ« flamur i veçantĂ« gjatĂ« nisjes sĂ« Docker’it (--log-opt syslog-address=ADRESA).

  • "userns-remap": "PĂ«rdoruesi_Juaj" — parandalon rritjen e privilegjeve (privilege escalation) duke izoluari hapĂ«sirĂ«n e emrave pĂ«r njĂ« pĂ«rdorues tĂ« caktuar.

Siguria e nivelit të transportit

PĂ«rparĂ«sia pĂ«r t'u lidhur me demonin e Docker’it (nĂ«se Ă«shtĂ« e nevojshme qasja nĂ« distancĂ«) duhet tĂ« jetĂ« vetĂ«m pĂ«r pĂ«rdoruesit me qasje nĂ« kredencialet e TLS-klientit.

Plugins të autorizimit

Vendosni pĂ«r cilĂ«t pĂ«rdorues cila komanda duhet tĂ« jetĂ« e lejuar dhe krijoni pluginin pĂ«rkatĂ«s tĂ« autorizimit pĂ«r Docker’it. Pastaj, nisni demonin e Docker’it dhe sillni pluginin:

dockerd --authorization-plugin=PLUGIN_ID

Për të mësuar më shumë rreth krijimit të plugins të autorizimit, shih në dokumentacion.

Parametrat e demonit

Demoni i Docker’it funksionon me njĂ« set parametrash tĂ« parazgjedhur.

  • --live-restore — ky kyç Ă«shtĂ« ndihmon pĂ«r tĂ« reduktuar kohĂ«n e ndĂ«rprerjeve tĂ« kontejnerĂ«ve gjatĂ« fikjes ose riciklimit tĂ« sistemit. BĂ«n mĂ« tĂ« lehtĂ« patchimin ose pĂ«rditĂ«simin e tyre me pak ndĂ«rprerje;
  • --userland-proxy=false — kur janĂ« tĂ« disponueshme ose pĂ«rdoren NAT tĂ« tipit hairpin, proxy nĂ« hapĂ«sirĂ«n e pĂ«rdoruesit bĂ«het njĂ« shĂ«rbim i tepĂ«rt, i cili vetĂ«m rrit numrin e mundĂ«sive pĂ«r sulm;
  • --no-new-privileges — parandalon marrjen e privilegjeve shtesĂ« nga kontejnerĂ«t pĂ«rmes suid ose sguid;
  • --seccomp-profile /path/to/profile — nĂ«se keni njĂ« profil seccomp tĂ« zakonshĂ«m, mund ta aplikoni atĂ« me kĂ«tĂ« flamur. MĂ«soni mĂ« shumĂ« rreth Seccomp dhe Docker kĂ«tu.

Konfigurimi i kontejnerëve dhe skedarëve të ndërtimit

Krijimi i përdoruesit

Sigurohuni që një përdorues të jetë krijuar për kontejnerin dhe ta ekzekutoni atë nën këtë përdorues (MOS e filloni kontejnerin si root).

Qasja e largët

Ndaloni qasjen e largët në demon. Nëse gjithsesi është e nevojshme, mbrojeni atë me certifikata.

Izoloni hapësirën e emrave të përdoruesve

ËshtĂ« veçanĂ«risht e rĂ«ndĂ«sishme tĂ« sigurohet qĂ« hapĂ«sira e emrave tĂ« pĂ«rdoruesit nĂ« Docker tĂ« izolohet, pasi pĂ«r default ajo ndahet me hapĂ«sirĂ«n e emrave tĂ« hostit. NĂ« disa raste, kjo mund tĂ« shfrytĂ«zohet pĂ«r tĂ« rritur privilegjet ose madje pĂ«r tĂ« dalĂ« pĂ«rtej kontejnerit. HapĂ«sira e emrave tĂ« pĂ«rdoruesit mund tĂ« izolohet duke redaktuar skedarin e konfigurimit (siç pĂ«rshkruhet mĂ« sipĂ«r nĂ« seksionin "Skedari i konfigurimit tĂ« Docker’it"). PĂ«rdorimi i kĂ«saj çështjeje kĂ«tu Ă«shtĂ« i justifikuar nga rĂ«ndĂ«sia e saj.

Kontrolli i shëndetit

Kontrolli i shëndetit (healthcheck) është një mjet i fuqishëm që lejon kontrollin e integritetit të kontejnerit. Ai konfigurtohet në Dockerfile me ndihmën e udhëzimit HEALTHCHECK. Kontrolli i shëndetit lejon të sigurohet që kontejneri funksionon siç duhet. Në shembullin e mëposhtëm, kontrolli përfundon me 0 nëse serveri është aktiv dhe 1 nëse ai "ka rënë":

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

SELinux

Nëse SELinux mbështetet nga sistemi operativ i hostit, krijoni ose importoni një politikë SELinux dhe jepni komandën Docker në modalitetin demon me SELinux të aktivizuar:

docker daemon --selinux-enable

Në këtë rast, konteineret Docker mund të ekzekutohen me parametra sigurie, për shembull:

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

Interface të rrjeteve

Në fillim, Docker dëgjon të gjitha interface të rrjeteve. Duke qenë se në shumicën e rasteve trafik pritet vetëm në një prej tyre, një qasje e tillë rrit pa arsye rrezikun e sulmeve. Prandaj, kur ekzekutoni një konteiner, mund të lidhni portat e tij me interface specifike në host:

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

Versionet e memorizuara të imazheve

Kur shkarkoni imazhe, sigurohuni që memoria lokale përputhet me përmbajtjen e depozitës. Ndryshe, mund të merrni një version të vjetëruar të imazhit ose një imazh që përmban dobësi.

Ura rrjetit

Modeli i rrjetit në mënyrë default, docker0, është i pambrojtur ndaj sulmeve si ARP-spoofing dhe MAC-flooding. Për të zgjidhur këtë problem, krijoni një urë rrjeti sipas specifikimeve tuaja, siç është përshkruar këtu.

Kujdes për socketin e Docker-it

Kurrikoni asnjëherë një socket Docker brenda kontejnerit. Në të kundërt, kontejneri do të ketë mundësi të ekzekutojë komandat e Docker dhe, si pasojë, të lidhet me sistemin operativ të hostit dhe ta kontrollojë atë. Mos e bëni këtë.

Konfigurimi i Docker Enterprise

Docker Trust

Docker Trust lejon tĂ« gjeneroni çelĂ«sa, me anĂ« tĂ« tĂ« cilĂ«ve mund tĂ« verifikoni integritetin kriptografik tĂ« imazheve. ÇelĂ«sat e Docker Trust mund tĂ« pĂ«rdoren pĂ«r tĂ« nĂ«nshkruar imazhet Docker me çelĂ«sa privatĂ«, tĂ« cilat verifikohen nga çelĂ«sat publikĂ« nĂ« Notary Server. Informacione tĂ« tjera — kĂ«tu. Aktivizimi i Docker Trust nĂ« Enterprise Engine pĂ«rshkruhet nĂ« detaje nĂ« kĂ«tĂ« seksion tĂ« dokumentacionit.

Skane të dobësive

Docker Enterprise ka një skanues të integruar të dobësive, që ofron mundësinë për të ngarkuar një bazë CVE për skanimin offline të dobësive në imazhe. Skanimi i rregullt i imazheve ndihmon në sigurimin e tyre: përdoruesi merr menjëherë paralajmërime mbi dobësitë e gjetura. Më shumë rreth mënyrës se si mund ta bëni këtë, shihni. këtu.

Shën. përk.: Ekzistojnë edhe skanues të dobësive Open Source në imazhet Docker, shembuj të të cilëve janë përmendur në fund të materialit.

Integrimi i LDAP dhe UCP

Plane Kontrol Universale mund të integrohet me LDAP. Rezultati do të jetë një sistem autentikimi më i thjeshtuar, që lejon shmangien e kopjimeve të panevojshme. Më shumë informacion mund të gjeni në artikullin Integrohuni me një direktorium LDAP.

Materiale të tjera

Informacione shtesë mbi praktikat më të mira për sigurinë e Docker-it mund të gjeni në docs.docker.com. Gjithashtu, rekomandojmë të shkarkoni testet e Qendrës për Sigurinë e Internetit për Docker.

Bonusi i përkthyesit

Si një plotësim logjik për këtë artikull, po publikojmë një listë me 10 mjete të njohura Open Source për sigurimin në Docker. Ajo u mor nga një artikulli tjetër (nga Bill Doerrfeld nga Doerrfeld.io).

NB: Më shumë rreth shumë prej projekteve të përmendura këtu lexoni gjithashtu në artikullin33+ mjete për sigurinë në Kubernetes».

  1. Docker Bench for Security — skenari i pĂ«rmendur nĂ« fillim tĂ« artikullit, qĂ« kontrollon konteinerĂ«t Docker pĂ«r pĂ«rputhshmĂ«rinĂ« me praktikat e zakonshme tĂ« sigurisĂ«.

    Siguria për kontejnerët Docker

  2. Clair — ndoshta, Ă«shtĂ« utilita mĂ« e njohur pĂ«r analizĂ«n statike tĂ« ndjeshmĂ«rive nĂ« konteiner. PĂ«rdor pĂ«r kĂ«tĂ« shumĂ« baza ndjeshmĂ«rish CVE (pĂ«rfshirĂ« ndjekĂ«sit e distribucioneve kryesore tĂ« Linux, si Red Hat, Debian, Ubuntu). Ofron API pĂ«r zhvilluesit dhe njĂ« mundĂ«si tĂ« thjeshtĂ« pĂ«r zgjerimin e funksionaliteteve (nĂ«pĂ«rmjet shtimit tĂ« "drejtorĂ«ve"). Ajo pĂ«rdoret nĂ« regjistrin publik tĂ« njohur tĂ« imazheve tĂ« konteinerĂ«ve (analog i Docker Hub) — Quay.io.
  3. Cilium — njĂ« zgjidhje pĂ«r sigurimin e rrjetit nĂ« nivelin e bĂ«rthamĂ«s, e bazuar nĂ« teknologjinĂ« e filtrimit tĂ« paketeve tĂ« rrjetit BPF.
  4. Anchore — njĂ« utilitĂ« pĂ«r analizimin e pĂ«rmbajtjes sĂ« imazheve pĂ«r ndjeshmĂ«ri tĂ« sigurisĂ« sipas bazĂ«s CVE. PĂ«rveç kĂ«saj, ajo lejon aplikimin e politikave tĂ« personalizuara (tĂ« bazuara nĂ« tĂ« dhĂ«na tĂ« ndryshme, duke pĂ«rfshirĂ« lista tĂ« bardha/bardha, pĂ«rmbajtjen e skedarĂ«ve etj.) pĂ«r vlerĂ«simin e sigurisĂ« sĂ« konteinerĂ«ve.
  5. OpenSCAP Workbench — njĂ« ekosistem i tĂ«rĂ« pĂ«r krijimin dhe mbĂ«shtetje tĂ« politikave tĂ« sigurisĂ« nĂ« platforma tĂ« ndryshme. PĂ«r verifikimin e konteinerĂ«ve ofron utilitĂ«n oscap-docker.
  6. Dagda — njĂ« utilitet pĂ«r skanimin e kontejnerĂ«ve Docker pĂ«r dobĂ«si, trojana, virusĂ« dhe malware. Kontrollohet nĂ« bazat CVE pĂ«r varĂ«sitĂ« nga OWASP, pĂ«r bazĂ«n Red Hat Oval dhe pĂ«r depozitĂ«n e eksploitĂ«ve Exploit Database.
  7. Notary — njĂ« kornizĂ« pĂ«r nĂ«nshkrimin e imazheve Docker, fillimisht e krijuar nga Docker Inc (dhe mĂ« pas e kaluar pĂ«r zhvillim nĂ« CNCF). PĂ«rdorimi i saj lejon delegimin e roleve dhe shpĂ«rndarjen e pĂ«rgjegjĂ«sive pĂ«r kontejnerĂ«t, si dhe verifikimin e integritetit kriptografik tĂ« imazheve.
  8. Grafaes — njĂ« API pĂ«r metadatĂ«n, e cila ka pĂ«r qĂ«llim menaxhimin e politikave tĂ« brendshme tĂ« sigurisĂ«. PĂ«r shembull, ajo lejon pĂ«rmirĂ«simin e funksionimit tĂ« skanuesve tĂ« sigurisĂ« pĂ«r kontejnerĂ«t. Shopify e pĂ«rdor kĂ«tĂ« API pĂ«r tĂ« menaxhuar metadatĂ«n e 500 mijĂ« imazheve tĂ« saj.
  9. Sysdig Falco — njĂ« utilitet pĂ«r Kubernetes, qĂ« monitoron sjelljen e sistemit: aktivitetin nĂ« kontejnerĂ«, nĂ« host dhe nĂ« rrjet. Lejon konfigurimin e verifikimeve tĂ« vazhdueshme nĂ« infrastrukturĂ«, zbulimin e anomali dhe dĂ«rgimin e alerteve pĂ«r çdo thirrje sistemore nĂ« Linux.
  10. Banyanops Collector — njĂ« tjetĂ«r mjet pĂ«r analizĂ«n statike tĂ« imazheve tĂ« konteinerĂ«ve Docker. Lejon "tĂ« shikoni" nĂ« skedaret e imazhit, duke mbledhur tĂ« dhĂ«nat e nevojshme, duke aplikuar politikat e nevojshme, etj.

Një tjetër koleksion i mirë i rekomandimeve praktike për mënyrën se si ta bëni Docker më të sigurt, mund të gjeni në këtë artikull kompaninë Aqua Security. Shumë nga këshillat e saj përputhen me ato që përmendëm më lart, por ka edhe të tjera. Për shembull, autorët sugjerojnë të organizoni monitorimin e aktiviteteve në konteinerë dhe theksojnë çfarë duhet të ketë parasysh kur përdorni Docker Swarm.

Për ata që duan të thellohen më shumë në këtë temë, vitin e kaluar doli libri "Docker Security: Quick Reference»", fragmente të cilit janë të qasshme falas. këtu.

MĂ« nĂ« fund, pĂ«r njĂ« njohje praktike me disa aspekte tĂ« sigurisĂ« Docker: profilet Seccomp dhe pĂ«rdorimi i capabilities sĂ« kernel-it Linux nĂ« konteinerĂ« — mund tĂ« pĂ«rfundoni laboratorĂ«t pĂ«rkatĂ«s nĂ« burimin Play with Docker* — shih seksionin "Security".

Siguria për kontejnerët Docker

* Për vetë këtë burim ne folëm dy vjet më parë, dhe në nëntor 2018 ndodhi një histori shumë interesante (në aspektin e sigurisë) me të. Nëse e përmbledhim, specialistët nga CyberArk Software Ltd. arritën ta hackonin: të fitonin mundësinë për të ekzekutuar komanda jashtë kontejnerëve, dmth. në sistemin pritës. Një ilustiracion perfekt i problematikës së sigurisë në Docker, apo jo? Lexoni të gjitha detajet e ndodhur këtu.

P.S. nga përkthyesi

Lexoni gjithashtu në blogun tonë:

Burimi: habr.com

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster