Bilješka. prev.: Tema Docker sigurnosti možda je jedna od vječnih u modernom IT svijetu. Stoga, bez daljnjeg objašnjenja, predstavljamo prijevod sljedećeg izbora relevantnih preporuka. Ako ste već bili zainteresirani za ovo pitanje, mnogi od njih će vam biti poznati. Samu zbirku dopunili smo popisom korisnih alata i nekoliko izvora za daljnje proučavanje problematike.

Predstavljam vam vodič za osiguravanje sigurnosti Dockera. Povratne informacije su dobrodošle jer je ovo više zbirka izvadaka iz raznih izvora, a nisu svi temeljito pregledani. Preporuke su podijeljene u tri kategorije:
- Neophodne mjere unutar operacijskog sustava hosta pri radu s Dockerom;
- Upute vezane uz konfiguracijsku datoteku izgradnje i stvaranje spremnika;
- Sigurnosni alati koji se mogu integrirati sa specifičnim značajkama Docker Enterprisea.
Vodič se temelji na nizu izvora, od kojih su mnogi navedeni u nastavku. Nije sveobuhvatan, ali pokriva sve osnove. Dodatne informacije mogu se pronaći u opisu CIS testova (povezan na kraju ovog vodiča), kao iu dokumentaciji Dockera.
Docker sigurnosni benchmark
automatski provjerava vaš Docker prema najčešćim najboljim praksama. Skripta je dobar heuristički sigurnosni test, ali ne treba je smatrati sveobuhvatnim alatom za analizu.
Host OS
Očito, Docker spremnik ne može biti siguran osim ako sam host sustav nije siguran. Stoga je potrebno slijediti najbolju praksu u sigurnosti operacijskog sustava. Osim toga, bilo bi mudro provesti analizu ranjivosti uz sljedeće preporuke.
Pravila revizije
Stvorite i koristite pravila revizije za korištenje datoteka povezanih s Dockerom auditctl. Na primjer, možete dodati -w /usr/bin/dockerd -k docker к /etc/audit.rules i ponovno pokrenite uslugu revizije.
FIPS način rada
Omogućavanje FIPS načina prisiljava kriptografske alate da se prebace na algoritme navedene na FIPS-u (Američki - cca. prev.), čime je usklađen sa saveznim i industrijskim propisima i zahtjevima. Ako glavni OS podržava FIPS način rada, možete ga omogućiti pokretanjem sljedećih naredbi:
sed -i 's/GRUB_CMDLINE_LINUX="/GRUB_CMDLINE_LINUX="fips=1 /g' /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg && rebootTakođer morate omogućiti FIPS u Docker Engineu:
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 dockerZa više informacija pogledajte dokumentaciju и .
Dokerske tajne
Povjerljivi podaci moraju se čuvati kao tajna. Odgovarajuću uslugu možete pokrenuti pomoću naredbe 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 nginxZa detalje pogledajte .
Docker konfiguracijska datoteka
Sljedeće postavke mogu se dodati konfiguracijskoj datoteci /etc/docker/daemon.json:
-
"icc":false— onemogućuje razmjenu podataka između spremnika kako bi se izbjeglo nepotrebno curenje informacija. -
log-level: "info"— bilježi sve zapisnike osim onih za otklanjanje pogrešaka. { "log-driver": "syslog", "log-opts": { "syslog-address": "udp://1.2.3.4:1111" } }— omogućuje daljinsko evidentiranje i prosljeđuje ih na navedenu adresu. Radi samo ako je syslog daemon pokrenut. TCP i UDP su prihvaćeni kao opcije. Također je moguće spojiti za svaki pojedini kontejner. U tu svrhu postavlja se posebna zastavica kada se Docker pokrene (
--log-opt syslog-address=ADDRESS).-
"userns-remap": "Your_User"— sprječava eskalaciju privilegija izoliranjem prostora imena za određenog korisnika.
Sigurnost transportnog sloja
Samo korisnici s pristupom vjerodajnicama TLS klijenta trebali bi se moći povezati s Docker demonom (ako je potreban udaljeni pristup).
Dodaci za autorizaciju
Odlučite koji korisnici smiju izvršavati koje naredbe i izradite odgovarajući dodatak za autorizaciju za Docker. Zatim pokrenite Docker demon i dodajte mu dodatak:
dockerd --authorization-plugin=PLUGIN_IDDa biste saznali više o stvaranju dodataka za autorizaciju, pogledajte .
Daemon opcije
Docker demon radi sa zadanim skupom parametara.
-
--live-restore— ovaj parametar pomaže smanjiti vrijeme prekida rada spremnika kada se sustav isključi ili ponovno pokrene. Lakše ih je zakrpati ili ažurirati s minimalnim zastojem; -
--userland-proxy=false— kada su ukočeni NAT-ovi dostupni ili korišteni, proxy u korisničkom prostoru postaje redundantna usluga, što samo povećava broj mogućih vektora napada; -
--no-new-privileges— sprječava spremnike da dobiju dodatne privilegije korištenjem suid ili sguid; -
--seccomp-profile /path/to/profile- ako imate svoj vlastiti seccomp profil, možete ga primijeniti pomoću ove oznake. Možete saznati više o Seccompu i Dockeru .
Konfiguracija spremnika i datoteke za izgradnju
Stvaranje korisnika
Provjerite je li stvoren korisnik za spremnik i pokrenite ga pod tim korisnikom (NEMOJTE pokretati spremnik kao root).
Daljinski pristup
Onemogućite daljinski pristup demonu. Ako vam još treba, zaštitite ga certifikatima.
Izolirajte prostor imena korisnika
Osobito je važno osigurati da je korisnički prostor imena u Dockeru izoliran, jer se prema zadanim postavkama dijeli s prostorom imena glavnog računala. U nekim slučajevima to se može koristiti za povećanje privilegija ili čak za bijeg izvan spremnika. Možete izolirati korisnički imenski prostor uređivanjem konfiguracijske datoteke (kao što je gore opisano u odjeljku Docker konfiguracijske datoteke). Dodatno spominjanje ovog pitanja ovdje je zbog njegove važnosti.
Provjera zdravlja
Healthcheck je moćan alat koji vam omogućuje provjeru integriteta spremnika. Konfigurira se u Dockerfileu prema uputama HEALTHCHECK. Provjere stanja omogućuju vam da provjerite radi li spremnik ispravno. U donjem primjeru provjera zdravlja vraća 0 ako poslužitelj radi i 1 ako ne radi:
HEALTHCHECK CMD curl --fail http://localhost || exit 1SELinux
Ako SELinux podržano od strane glavnog operativnog sustava, kreiranje ili uvoz SE pravilaLinux i pokrenite Docker u daemon načinu rada s omogućenim SE-omLinux:
docker daemon --selinux-enableU ovom slučaju, Docker spremnici mogu se pokrenuti sa sigurnosnim postavkama, na primjer:
docker run --interactive --tty --security-opt label=level:TopSecret centos /bin/bashMrežna sučelja
Prema zadanim postavkama, Docker sluša sva mrežna sučelja. Budući da se u većini slučajeva očekuje promet samo na jednom od njih, ovakav pristup nepotrebno povećava rizik od napada. Stoga, kada pokrećete spremnik, možete vezati njegove portove na određena sučelja na hostu:
docker run --detach --publish 10.2.3.4:49153:80 nginxPredmemorirane verzije slika
Prilikom preuzimanja slika provjerite odgovara li lokalna predmemorija sadržaju spremišta. U protivnom biste mogli dobiti zastarjelu verziju slike ili sliku koja sadrži ranjivosti.
Mrežni most
Zadani model mreže docker0, ranjiv je na napade kao što su ARP-spoofing i MAC-flooding. Kako biste riješili ovaj problem, izradite mrežni most prema svojim specifikacijama kao što je opisano .
Upozorenje za Docker utičnicu
Nikada ne prosljeđujte Docker utičnicu unutar spremnika. U suprotnom, spremnik će moći izvršavati Docker naredbe i stoga komunicirati i kontrolirati glavni operativni sustav. Ne radi to.
Konfiguriranje Docker Enterprisea
Docker Trust
Docker Trust vam omogućuje generiranje ključeva koji se mogu koristiti za provjeru kriptografskog integriteta slika. Docker Trust ključevi mogu se koristiti za potpisivanje Docker slika s privatnim ključevima, koji se provjeravaju javnim ključevima na Notary Serveru. Dodatne informacije - . Omogućavanje Docker Trusta u Enterprise Engineu detaljno je opisano u .
Skeniranje ranjivosti
Docker Enterprise ima ugrađeni skener ranjivosti koji vam omogućuje preuzimanje CVE baze podataka za izvanmrežno skeniranje ranjivosti u slikama. Redovito skeniranje slika pomaže u njihovoj većoj sigurnosti: korisnik odmah prima upozorenja o pronađenim ranjivostima. Za više informacija o tome kako se to može učiniti, pogledajte .
Bilješka. prev.: Tu su i Open Source skeneri za ranjivosti u Docker slikama, čiji se primjeri mogu naći na kraju materijala.
LDAP i UCP integracija
Univerzalna kontrolna ravnina može se integrirati s LDAP-om. Rezultat će biti pojednostavljeni sustav provjere autentičnosti koji izbjegava nepotrebno dupliciranje. Više o tome možete pročitati u članku .
Ostali materijali
Više informacija o najboljim sigurnosnim praksama Dockera možete pronaći na . Također preporučujemo preuzimanje .
Prevoditeljski bonus
Kao logičan dodatak ovom članku, objavljujemo popis 10 popularnih uslužnih programa otvorenog koda za Docker sigurnost. Posuđeno je od (autor Bill Doerrfeld iz Doerrfeld.io).
NB: Pročitajte više o mnogim ovdje spomenutim projektima u članku “".
- je skripta već spomenuta na samom početku članka koja provjerava usklađenost Docker spremnika s uobičajenim sigurnosnim praksama.

- — je vjerojatno najpopularniji uslužni program za statičku analizu ranjivosti u kontejneru. Koristi brojne CVE baze podataka o ranjivostima (uključujući tragače vodećih Linux-distribucije poput Red Hata, Debian, Ubuntu). Nudi API za programere i jednostavno proširenje funkcionalnosti (dodavanjem "drajvera"). Koristi se u popularnom registru slika javnih kontejnera (slično Docker Hubu) — Quay.io.
- je rješenje za osiguranje mrežne sigurnosti na razini kernela, temeljeno na BPF tehnologiji mrežnog filtriranja paketa.
- — uslužni program za analizu sadržaja slika na prisutnost sigurnosnih propusta na temelju CVE-a. Osim toga, omogućuje vam primjenu prilagođenih pravila (na temelju različitih podataka uključujući bijele/crne liste, sadržaj datoteka itd.) za procjenu sigurnosti spremnika.
- — cijeli ekosustav za stvaranje i održavanje sigurnosnih politika na različitim platformama. Nudi uslužni program za provjeru spremnika
oscap-docker. - — uslužni program za skeniranje Docker spremnika za ranjivosti, trojance, viruse i malware. CVE baze podataka uključuju provjere ovisnosti iz OWASP-a, baze podataka Red Hat Oval i spremišta eksploatacije baze podataka Exploit.
- je okvir za potpisivanje Docker slika, izvorno kreiran u Docker Inc (a zatim prebačen na razvoj u CNCF). Njegova upotreba omogućuje delegiranje uloga i raspodjelu odgovornosti među spremnicima, kao i provjeru kriptografskog integriteta slika.
- — API za metapodatke, dizajniran za upravljanje internim sigurnosnim politikama. Na primjer, omogućuje vam poboljšanje performansi sigurnosnih skenera spremnika. Shopify koristi ovaj API za upravljanje metapodacima na svojih 500 slika.
- — Kubernetes uslužni program koji prati ponašanje sustava: aktivnost u kontejnerima, na hostovima i na mreži. Omogućuje vam konfiguriranje kontinuiranih provjera infrastrukture, otkrivanje anomalija i upozorenja za sve sistemske pozive. Linux.
- - još jedan alat za statičku analizu slika Docker spremnika. Omogućuje vam da "pregledate" slikovne datoteke, prikupljate potrebne podatke, primjenjujete potrebna pravila itd.
Još jedna dobra zbirka praktičnih preporuka o tome kako Docker učiniti sigurnijim možete pronaći u Tvrtka Aqua Security. Mnogi njezini savjeti preklapaju se s onima koji su već spomenuti, ali postoje i drugi. Na primjer, autori predlažu organiziranje praćenja aktivnosti u spremnicima i ukazuju na što treba obratiti pozornost kada koristite Docker Swarm.
Za one koji žele detaljnije zaroniti u ovu temu, objavljena je prošle godine. knjiga "», čiji su fragmenti slobodno dostupni .
Konačno, za praktičan uvod u neke aspekte Docker sigurnosti: Seccomp profili i korištenje mogućnosti Linux-jezgre u kontejnerima - možete proći kroz odgovarajuće laboratorijski rad na * - pogledajte odjeljak "Sigurnost".

* O samom ovom resursu mi prije dvije godine, odnosno u studenom 2018. dogodila mu se vrlo zanimljiva (sigurnosno gledano) priča. Ukratko, stručnjaci tvrtke CyberArk Software Ltd. uspio hakirati: postići mogućnost izvršavanja naredbi izvan spremnika, tj. na glavnom sustavu. Savršena ilustracija sigurnosnog problema u Dockeru, zar ne? Pročitajte sve detalje o tome što se dogodilo .
PS od prevoditelja
Pročitajte i na našem blogu:
- «»;
- «»;
- «»;
- «»;
- «»;
- «".
Izvor: www.habr.com

