Napomena za prijevod.: Tema sigurnosti Dockera jedna je od vječito aktualnih u modernom IT svijetu. Bez dodatnih objašnjenja predstavljamo prijevod još jedne zbirke odgovarajućih preporuka. Ako ste se već zanimali za ovo pitanje, mnoge od njih će vam biti poznate. Zbirku smo nadopunili popisom korisnih alata i nekoliko resursa za daljnje proučavanje teme.

Predlažem vam vodič za osiguranje sigurnosti Dockera. Povratna informacija je dobrodošla, jer je ovo više zbirka odlomaka s različitih izvora, i nisu svi bili podvrgnuti temeljitoj provjeri. Preporuke su podijeljene u tri kategorije:
- Neophodni koraci unutar operativnog sustava hosta pri radu s Dockerom;
- Upute koje se odnose na datoteku konfiguracije izrade i kreiranje kontejnera;
- Alati za sigurnost koji se mogu integrirati s specifičnim funkcijama Docker Enterprise.
Osnova za vodič su različiti resursi, od kojih su mnogi navedeni u nastavku. Ne može se smatrati iscrpnim, no pokriva sve osnove. Dodatne informacije možete pronaći u opisu CIS testova (veza navedena na kraju ovog vodiča), kao i u dokumentaciji Docker-a.
Docker Security Benchmark
automatski provjerava vaš Docker na usklađenost s najprihvaćenijim najboljim praksama. Skripta predstavlja dobar heuristički test sigurnosti, no ne bi se trebala smatrati alatom za sveobuhvatnu analizu.
OS hosta
Očigledno je da Docker kontejner ne može biti zaštićen ako sama host sustav nije zaštićen. Stoga je potrebno pridržavati se najboljih praksi u području osiguravanja sigurnosti operativnih sustava. Osim toga, bilo bi razborito provesti analizu ranjivosti uz sljedeće preporuke.
Pravila audita
Izradite i koristite pravila audita za datoteke povezane s Dockerom pomoću auditctl. Na primjer, možete dodati -w /usr/bin/dockerd -k docker za /etc/audit.rules i ponovno pokrenuti uslugu audita.
FIPS način
Uključivanje FIPS načina prisiljava kriptografske alate na prijelaz na algoritme uvrštene u FIPS (američke — napomena prev.), u skladu s federalnim i industrijskim standardima i zahtjevima. Ako host operativni sustav podržava FIPS način, može se aktivirati izvođenjem sljedećih naredbi:
sed -i 's\/GRUB_CMDLINE_LINUX="\/GRUB_CMDLINE_LINUX="fips=1 \/g' \/etc\/default\/grub\ngrub2-mkconfig -o \/boot\/grub2\/grub.cfg && rebootTakođer je potrebno uključiti FIPS u 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 dockerZa dodatne informacije pogledajte dokumentaciju i .
Docker Secrets
Povjerljivi podaci trebaju biti pohranjeni kao tajne. 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 nginxDetalje pogledajte u .
Konfiguracijska datoteka Dockera
Sljedeće postavke mogu se dodati u konfiguracijsku datoteku /etc/docker/daemon.json:
-
"icc":false— onemogućuje razmjenu podataka između kontejnera kako bi se izbjeglo nepotrebno propuštanje informacija. -
log-level: "info"— hvata sve logove osim debug logova. { "log-driver": "syslog", "log-opts": { "syslog-address": "udp:\/\/1.2.3.4:1111" } }— povezuje udaljeno vođenje evidencije, šalje ih na navedenu adresu. Radi samo ako je daemon syslog pokrenut. Kao opcije podržani su TCP i UDP. Također je moguće povezivanje za svaki pojedini kontejner. Za to se postavlja posebna oznaka pri pokretanju Dockera (
--log-opt syslog-address=ADDRESS).-
"userns-remap": "Your_User"— sprječava eskalaciju privilegija izolirajući prostor imena za određenog korisnika.
Sigurnost razine transporta
Mogućnost povezivanja s Docker daemonom (ako je udaljeni pristup potreban) trebala bi biti samo za korisnike s pristupom TLS klijentskim podacima.
Dodatni dodaci za autorizaciju
Odredite kojim korisnicima su koje naredbe dopuštene i izradite odgovarajući dodatak za autorizaciju za Docker. Zatim pokrenite Docker daemon i dodajte dodatak:
dockerd --authorization-plugin=PLUGIN_IDZa više informacija o izradi autorizacijskih dodataka pogledajte u .
Parametri daemona
Docker daemon radi s nizom zadatih parametara.
-
--live-restore— ova opcija pomaže smanjiti vrijeme zastoja kontejnera prilikom isključivanja ili ponovnog pokretanja sustava. Postaje lakše ažurirati ih s minimalnim vremenom zastoja; -
--userland-proxy=false— kada su hairpin NAT-ovi dostupni ili korišteni, proxy u korisničkom prostoru postaje suvišna usluga koja samo povećava broj mogućih vektora napada; -
--no-new-privileges— sprječava dodjelu dodatnih privilegija kontejnerima putem suid ili sguid; -
--seccomp-profile /path/to/profile— ako imate vlastiti seccomp profil, možete ga primijeniti pomoću ove oznake. Saznajte više o Seccomp-u i Docker-u .
Konfiguracija kontejnera i datoteka za izgradnju
Kreiranje korisnika
Provjerite da je za kontejner kreiran korisnik i pokrenite ga pod tim korisnikom (NE pokrećite kontejner kao root).
Udaljeni pristup
Onemogućite udaljeni pristup demonu. Ako je nužan, zaštitite ga certifikatima.
Izolirajte prostor imena korisnika
Posebno je važno osigurati da je prostor imena korisnika u Docker-u izoliran, budući da se po defaultu koristi zajednički s prostorom imena domaćina. U nekim slučajevima, ovo se može iskoristiti za povećanje privilegija ili čak za izlazak izvan kontejnera. Izolacija korisničkog prostora imena može se postići uređivanjem konfiguracijske datoteke (kako je opisano gore u odjeljku "Konfiguracijska datoteka Docker-a"). Dodatna napomena o ovom problemu ovdje je uzrokovana njegovom važnosti.
Healthcheck-ovi
Healthcheck (provjera ispravnosti) — moćan alat koji omogućuje provjeru integriteta kontejnera. Konfigurira se u Dockerfile-u pomoću upute HEALTHCHECK. Healthcheck-ovi osiguravaju da kontejner ispravno radi. U donjem primjeru, provjera ispravnosti završava s 0 ako server radi, i 1 ako "pada":
HEALTHCHECK CMD curl --fail http://localhost || exit 1SELinux
Ako SELinux podržava operacijski sustav domaćina, kreirajte ili uvezite SELinux politiku i pokrenite Docker u načinu rada demona sa uključenim SELinux-om:
docker daemon --selinux-enableU tom slučaju, Docker kontejneri se mogu pokretati s postavkama sigurnosti, na primjer:
docker run --interactive --tty --security-opt label=level:TopSecret centos /bin/bashMrežni sučelja
Prema zadanim postavkama, Docker sluša sve mrežne sučelje. Budući da se u većini slučajeva očekuje promet samo na jednom od njih, ovakav pristup neopravdano povećava rizik od napada. Stoga, kada pokrećete kontejner, možete povezati njegove portove s određenim sučeljima na hostu:
docker run --detach --publish 10.2.3.4:49153:80 nginxKeširane verzije slika
Kada preuzimate slike, provjerite da li lokalna keš verzija odgovara sadržaju repozitorija. U suprotnom, možete dobiti zastarjelu verziju slike ili sliku koja sadrži ranjivosti.
Mrežni most
Zadani mrežni model, docker0, ranjiv je na napade tipa ARP-spoofing i MAC-flooding. Da biste riješili ovaj problem, stvorite mrežni most prema vlastitim specifikacijama, kao što je opisano .
Upozorenje o Docker socketu
Nikada ne propuštajte Docker socket unutar kontejnera. Inače, kontejner će imati mogućnost izvršavanja Docker naredbi i, posljedično, povezivanja s operativnim sustavom hosta i kontroliranja istog. Nemojte to raditi.
Konfiguracija Docker Enterprise
Docker Trust
Docker Trust omogućuje generiranje ključeva koji se koriste za provjeru kriptografske cjelovitosti slika. Docker Trust ključevi mogu se koristiti za potpisivanje Docker slika privatnim ključevima, koje provjerava javni ključevi na Notary Serveru. Dodatne informacije — . Uključivanje Docker Trust u Enterprise Engine detaljno je opisano u .
Skeniranje ranjivosti
Docker Enterprise ima ugrađeni skener ranjivosti, koji omogućuje preuzimanje baze CVE za offline skeniranje ranjivosti u slikama. Redovito skeniranje slika pomaže u njihovom većem osiguranju: korisnik odmah dobiva upozorenja o pronađenim ranjivostima. Više informacija o tome kako to učiniti, vidite .
Napomena za prijevod.: Postoje i Open Source skeneri ranjivosti u Docker slikama, čiji primjeri se nalaze na kraju materijala.
Integracija LDAP i UCP
Universal Control Plane može se integrirati s LDAP-om. Rezultat će biti pojednostavljen sustav autentifikacije, koji omogućuje izbjegavanje nepotrebnog dupliciranja. Više o tome možete pročitati u članku .
Dodatni materijali
Dodatne informacije o najboljim praksama u osiguravanju sigurnosti Docker-a mogu se pronaći na . Također preporučujemo preuzimanje .
Bonus od prevoditelja
Kao logičan dodatak ovom članku objavljujemo popis od 10 popularnih Open Source alata za osiguranje sigurnosti u Dockeru. Preuzet je iz (autorstvo Bill Doerrfeld sa Doerrfeld.io).
NB: O mnogim od ovdje spomenutih projekata također čitajte u članku „».
- — skripta koja je već spomenuta na samom početku članka, koja provjerava Docker kontejnere na usklađenost sa uobičajenim praksama osiguravanja sigurnosti.

- — vjerojatno najpopularniji alat za statičku analizu ranjivosti u kontejneru. Koristi razne baze ranjivosti CVE (uključujući prateće baze najvažnijih Linux distribucija poput Red Hat, Debian, Ubuntu). Nudi API za programere i jednostavnu mogućnost za proširenje funkcionalnosti (putem dodatka „drivera“). Koristi se u popularnom javnom registru slika kontejnera (analog Docker Hub) — Quay.io.
- — rješenje za osiguranje mrežne sigurnosti na razini jezgre, temeljeno na tehnologiji filtriranja mrežnih paketa BPF.
- — alat za analizu sadržaja slika na prisutnost ranjivosti za sigurnost prema bazi CVE. Osim toga, omogućuje primjenu korisničkih politika (na osnovi različitih podataka uključujući bijele/crne liste, sadržaj datoteka itd.) za ocjenu sigurnosti kontejnera.
- — cijeli ekosustav za kreiranje i održavanje politika sigurnosti na različitim platformama. Za provjeru kontejnera nudi alat
oscap-docker. - — alat za skeniranje Docker kontejnera na prisutnost ranjivosti, trojanaca, virusa i malwarea. U baze CVE uključene su provjere temeljen na ovisnostima iz OWASP, Red Hat Oval baza, repozitorij eksploitacija Exploit Database.
- — okvir za potpisivanje Docker slika, prvotno razvijen u Docker Inc (a zatim prenesen na razvoj u CNCF). Njegova upotreba omogućuje delegiranje uloga i raspodjelu odgovornosti po kontejnerima, kao i verifikaciju kriptografske cjelovitosti slika.
- — API za metapodatke, namijenjen za upravljanje unutarnjim politikama sigurnosti. Kao primjer, omogućuje poboljšanje rada skenerima sigurnosti kontejnera. Shopify koristi ovaj API za upravljanje metapodacima svojih 500 tisuća slika.
- — alat za Kubernetes koji prati ponašanje sustava: aktivnost u kontejnerima, na hostovima, u mreži. Omogućuje postavljanje kontinuiranih provjera u infrastrukturi, otkrivanje anomalija i slanje upozorenja za bilo koje sistemske pozive Linuxa.
- — još jedan alat za statičku analizu slika Docker kontejnera. Omogućuje „pogled” u datoteke slike, prikupljanje potrebnih podataka, primjenu potrebnih politika i slično.
Još jedan dobar skup praktičnih preporuka o tome kako učiniti Docker sigurnijim nalazi se u tvrtki Aqua Security. Mnogi od njihovih savjeta preklapaju se s već prethodno spomenutima, ali postoji i drugih. Na primjer, autori predlažu organiziranje praćenja aktivnosti u kontejnerima i ukazuju na što obratiti pažnju prilikom korištenja Docker Swarm.
Za one koji žele dublje uroniti u ovu temu, prošle godine objavljena je knjiga „»”, čiji su dijelovi slobodno dostupni .
Na kraju, za praktično upoznavanje s nekim aspektima sigurnosti Dockera: Seccomp profilima i korištenjem capabilities Linux jezgre u kontejnerima — možete proći odgovarajuće laboratorijske radove na * — vidi odjeljak „Sigurnost”.

* O samom ovom resursu mi pisali smo prije dvije godine, a u studenom 2018. dogodila se vrlo zanimljiva (s gledišta sigurnosti) priča. Ukratko, stručnjaci iz CyberArk Software Ltd. uspjeli su ga hakirati: postigli su mogućnost izvršavanja naredbi izvan kontejnera, tj. na host sustavu. Prekrasna ilustracija sigurnosnog problema u Dockeru, zar ne? O svim detaljima događaja čitajte .
P.S. od prevodioca
Pročitajte i na našem blogu:
- «»;
- «»;
- «»;
- «»;
- «»;
- «».
Izvor: habr.com

