Sigurnost za Docker kontejnere

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.

Sigurnost za Docker kontejnere

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:

  1. Neophodni koraci unutar operativnog sustava hosta pri radu s Dockerom;
  2. Upute koje se odnose na datoteku konfiguracije izrade i kreiranje kontejnera;
  3. 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

Docker Bench for Security 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 Federal Information Processing Standards — 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 && reboot

Takođ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 docker

Za dodatne informacije pogledajte dokumentaciju Docker i Red Hat.

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 nginx

Detalje pogledajte u dokumentaciju.

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_ID

Za više informacija o izradi autorizacijskih dodataka pogledajte u dokumentaciju.

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 ovdje.

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 1

SELinux

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-enable

U tom slučaju, Docker kontejneri se mogu pokretati s postavkama sigurnosti, na primjer:

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

Mrež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 nginx

Keš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 ovdje.

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 — ovdje. Uključivanje Docker Trust u Enterprise Engine detaljno je opisano u ovom odjeljku dokumentacije.

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 ovdje.

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 Integrate with an LDAP directory.

Dodatni materijali

Dodatne informacije o najboljim praksama u osiguravanju sigurnosti Docker-a mogu se pronaći na docs.docker.com. Također preporučujemo preuzimanje Center for Internet Security testovi za Docker.

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 drugog članka (autorstvo Bill Doerrfeld sa Doerrfeld.io).

NB: O mnogim od ovdje spomenutih projekata također čitajte u članku „33+ alata za sigurnost Kubernetes-a».

  1. Docker Bench for Security — skripta koja je već spomenuta na samom početku članka, koja provjerava Docker kontejnere na usklađenost sa uobičajenim praksama osiguravanja sigurnosti.

    Sigurnost za Docker kontejnere

  2. Clair — 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.
  3. Cilium — rješenje za osiguranje mrežne sigurnosti na razini jezgre, temeljeno na tehnologiji filtriranja mrežnih paketa BPF.
  4. Anchore — 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.
  5. OpenSCAP Workbench — cijeli ekosustav za kreiranje i održavanje politika sigurnosti na različitim platformama. Za provjeru kontejnera nudi alat oscap-docker.
  6. Dagda — 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.
  7. Notary — 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.
  8. Grafaes — 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.
  9. Sysdig Falco — 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.
  10. Banyanops Collector — 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 ovom članku 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 „Docker Security: Quick Reference»”, čiji su dijelovi slobodno dostupni ovdje.

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 resursu Play with Docker* — vidi odjeljak „Sigurnost”.

Sigurnost za Docker kontejnere

* O samom ovom resursu mi govorili 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 ovdje.

P.S. od prevodioca

Pročitajte i na našem blogu:

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster