Op. prev.: Tema varnosti Dockerja je verjetno ena izmed večnih v sodobnem svetu IT. Zato brez dodatnih razlag predstavljamo prevod nove zbirke ustreznih priporočil. Če ste se že zanimali za to vprašanje, vam bo veliko teh točk znanih. Zbirko smo dopolnili s seznamom koristnih orodij in nekaj viri za nadaljnje raziskovanje teme.

Predlagam pozornost vodilu za zagotavljanje varnosti Dockerja. Povratne informacije so dobrodošle, saj gre bolj za zbirko odlomkov z različnih virov, in ne vsi so bili temeljito pregledani. Priporočila so razdeljena v tri kategorije:
- Potrebni ukrepi znotraj operacijskega sistema gostitelja pri delu z Dockerjem;
- Navodila, povezana s konfiguracijsko datoteko gradnje in ustvarjanjem kontejnerjev;
- Orodja za varnost, ki se lahko integrirajo s specifičnimi funkcijami Docker Enterprise.
Osnova za to vodilo so različni viri, mnogi od njih so navedeni spodaj. Ne moremo ga obravnavati kot izčrpnega, vendar pokriva vse osnove. Dodatne informacije lahko najdete v opisu za testiranje CIS (povezava je navedena na koncu tega vodila), pa tudi v dokumentaciji za Docker.
Docker Security Benchmark
samodejno preverja vaš Docker glede skladnosti z najpogostejšimi najboljšimi praksami. Skript služi kot dober heuristični varnostni test, vendar ga ne smete obravnavati kot orodje za celovito analizo.
OS gostitelja
Očitno je, da Docker kontejner ne more biti zaščiten, če sama gostiteljska sistem ni zaščiten. Zato je potrebno slediti najboljšim praksam na področju zagotavljanja varnosti operacijskih sistemov. Poleg tega bi bilo smiselno izvesti analizo ranljivosti poleg naslednjih priporočil.
Pravila revizije
Ustvarjajte in uporabljajte pravila revizije za datoteke, povezane z Dockerjem, s pomočjo auditctl. Na primer, lahko dodate -w /usr/bin/dockerd -k docker k /etc/audit.rules in ponovno zaženete storitev revizije.
FIPS način
Vklop FIPS načina prisili kriptografska orodja, da preklopijo na algoritme, vključene v FIPS (ameriški — op. prev.), ki s tem ustreza zveznim in panogam predpisom ter zahtevam. Če gostiteljska OS podpira FIPS način, ga lahko omogočite z naslednjimi ukazi:
sed -i 's\/GRUB_CMDLINE_LINUX="\/GRUB_CMDLINE_LINUX="fips=1 \/g' \/etc\/default\/grub\ngrub2-mkconfig -o \/boot\/grub2\/grub.cfg && rebootPrav tako je potrebno omogočiti FIPS v 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 glejte dokumentacijo in .
Docker Secrets
Zaupni podatki morajo biti shranjeni kot skrivnosti. Ustrezno storitev lahko zaženete s pomočjo ukaza 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 nginxPogledajte detalje u .
Konfiguracijska datoteka Dockerja
Naslednje nastavitve lahko dodate v konfiguracijsko datoteko /etc/docker/daemon.json:
-
"icc":false— onemogoči izmenjavo podatkov med kontejnerji, da bi se izognili nepotrebnemu uhajanju informacij. -
log-level: "info"— zajema vse dnevniške zapise razen tistih za odpravljanje težav. { "log-driver": "syslog", "log-opts": { "syslog-address": "udp:\/\/1.2.3.4:1111" } }— omogoča oddaljeno beleženje dnevnikov, ki jih pošlje na določen naslov. Deluje samo, če je daemon syslog zagnan. Možne so TCP in UDP možnosti. Prav tako je mogoče nastaviti za vsak posamezni kontejner. Za to se ob zagonu Dockerja postavi poseben zastavica (
--log-opt syslog-address=ADDRESS).-
"userns-remap": "Your_User"— preprečuje dvig privilegijev (privilege escalation) z izolacijo prostora imen za določenega uporabnika.
Varnost transportne ravni
Dostop do daemona Dockerja (če je oddaljen dostop potreben) naj ima samo uporabnike z dostopom do TLS-klientskih poverilnic.
Plugini za avtorizacijo
Določite, katerim uporabnikom so dovoljene katere ukaze, in ustvarite ustrezen plugin avtorizacije za Docker. Nato zaženite daemon Docker in v njega dodajte plugin:
dockerd --authorization-plugin=PLUGIN_IDZa več informacij o ustvarjanju avtorizacijskih pluginov glejte v .
Parametri daemona
Daemon Dockerja deluje s naborom privzetih parametrov.
-
--live-restore— ta parameter pomaga zmanjšati čas nedelovanja kontejnerjev med izklopom ali ponovnim zagonom sistema. Enostavneje jih je popraviti ali posodobiti z minimalnim nedelovanjem; -
--userland-proxy=false— когда используются hairpin NAT, прокси в пользовательском пространстве становятся избыточной службой, увеличивая количество возможных векторов атаки; -
--no-new-privileges— предотвращает получение дополнительных привилегий контейнерами с помощью suid или sguid; -
--seccomp-profile /path/to/profile— если у вас есть собственный профиль seccomp, можно применить его с помощью этого флага. Узнать больше о Seccomp и Docker можно .
Конфигурация контейнеров и файлов сборки
Создание пользователя
Убедитесь, что для контейнера создан пользователь и запускайте его под этим пользователем (НЕ запускайте контейнер под рутом).
Удаленный доступ
Запретите удаленный доступ к демону. Если он все же необходим, защитите его сертификатами.
Изолируйте пространство имен пользователя
Особенно важно удостовериться, что пространство имен пользователя в Docker изолировано, так как по умолчанию оно используется совместно с пространством имен хоста. В некоторых случаях это может быть использовано для повышения привилегий или даже выхода за пределы контейнера. Изолировать пользовательское пространство имен можно, изменив файл конфигурации (как описано выше в разделе «Файл конфигурации Docker»). Дополнительное упоминание этой проблемы здесь вызвано её важностью.
Healthcheck’и
Healthcheck (проверка работоспособности) — мощный инструмент, позволяющий проверять целостность контейнера. Настраивается он в Dockerfile с помощью инструкции HEALTHCHECK. Healthcheck’и позволяют убедиться, что контейнер работает должным образом. В приведенном ниже примере проверка работоспособности завершится 0, если сервер работает, и 1, если он «упал»:
HEALTHCHECK CMD curl --fail http://localhost || exit 1SELinux
Если SELinux поддерживается операционной системой хоста, создайте или импортируйте политику SELinux и запускайте Docker в режиме демона с включенным SELinux:
docker daemon --selinux-enableВ этом случае Docker-контейнеры можно запускать с параметрами безопасности, например:
docker run --interactive --tty --security-opt label=level:TopSecret centos /bin/bashСетевые интерфейсы
Privzeto Docker posluša vse omrežne vmesnike. Ker se v večini primerov pričakuje promet le na enem izmed njih, ta pristop neupravičeno povečuje tveganje za napade. Zato lahko ob zagonu kontejnerja povežete njegove porte s specifičnimi vmesniki na gostitelju:
docker run --detach --publish 10.2.3.4:49153:80 nginxPredpomnjene različice slik
Ob prenosu slik se prepričajte, da lokalni predpomnilnik ustreza vsebini repozitorija. V nasprotnem primeru lahko pridobite zastarelo različico slike ali sliko z ranljivostmi.
Omrežni most
Privzeti omrežni model, docker0, je ranljiv za napade, kot so ARP-spoofing in MAC-flooding. Da bi to težavo odpravili, ustvarite omrežni most v skladu s svojimi specifikacijami, kot je opisano .
Opozorilo o Dockerjevem vtiču
Nikoli ne preusmerjajte Dockerjevega vtiča v kontejner. V nasprotnem primeru bo kontejner pridobil možnost izvajanja Dockerjevih ukazov in se tako povezovati z operacijskim sistemom gostitelja ter ga nadzorovati. tega ne počnite.
Konfiguracija Docker Enterprise
Docker Trust
Docker Trust omogoča generiranje ključev, s katerimi je mogoče preverjati kriptografsko celovitost slik. Ključi Docker Trust se lahko uporabljajo za podpisovanje Docker slik s zasebnimi ključi, ki se preverjajo javnimi ključi na Notary Server. Dodatne informacije — . Vključitev Docker Trust v Enterprise Engine je podrobno opisana v .
Pregledovanje ranljivosti
Docker Enterprise vsebuje vgrajen skener ranljivosti, ki omogoča nalaganje osnove CVE za offline pregledenje ranljivosti v slikah. Redno pregledovanje slik pomaga povečati njihovo varnost: uporabnik takoj prejme opozorila o najdenih ranljivostih. Več o tem, kako to storiti, glej: .
Op. prev.: Obstajajo tudi Open Source skenerji ranljivosti v Docker slikah, primeri katerih so navedeni na koncu gradiva.
Integracija LDAP in UCP
Universal Control Plane je mogoče integrirati z LDAP. To bo pripeljalo do poenostavljenega sistema avtentikacije, ki bo omogočil izogibanje nepotrebnemu podvajanju. Več o tem si lahko preberete v članku .
Druge vsebine
Dodatne informacije o najboljših praksah za zagotavljanje varnosti Dockerja najdete na . Prav tako priporočamo prenos .
Bonus od prevoditelja
Kao logičan dodatak ovom članku objavljujemo listu od 10 popularnih Open Source alata za osiguranje sigurnosti u Dockeru. Preuzet je iz (autorstvom Billa Doerrfelda iz Doerrfeld.io).
NB: Saznajte više o mnogim projektima spomenutim ovdje u članku „».
- — već spomenuti na samom početku članka skript koji provjerava Docker kontejnere na usklađenost sa uobičajenim praksama sigurnosnog osiguranja.

- — verovatno najpopularniji alat za statičku analizu ranjivosti u kontejneru. Koristi brojne baze podataka o ranjivostima CVE (uključujući omotane verzije vodećih Linux distribucija kao što su Red Hat, Debian, Ubuntu). Nudi API za programere i jednostavnu mogućnost proširenja funkcionalnosti (dodavanjem „drajvera“). Koristi se u popularnom javnom registru slika kontejnera (analog Docker Hub) – Quay.io.
- — rešenje za osiguranje mrežne sigurnosti na nivou jezgra, zasnovano na tehnologiji filtriranja mrežnih paketa BPF.
- — alat za analizu sadržaja slika na prisustvo ranjivosti u sigurnosti na osnovu CVE baze. Takođe omogućava primenu korisničkih pravila (na osnovu različitih podataka uključujući bele/crne liste, sadržaj datoteka itd.) za procenu sigurnosti kontejnera.
- — čitava ekosistem za kreiranje i održavanje bezbednosnih politika na različitim platformama. Za proveru kontejnera nudi alat
oscap-docker. - — alat za skeniranje Docker kontejnera na prisustvo ranjivosti, trojanaca, virusa i malware-a. Uključuje proveru zavisnosti iz OWASP, Red Hat Oval bazu i eksploitski repozitorijum Exploit Database.
- — okvir za potpisivanje Docker slika, prvobitno razvijen u Docker Inc (a zatim prebačen na razvoj u CNCF). Njegova upotreba omogućava delegiranje uloga i raspodelu odgovornosti po kontejnerima, kao i verifikaciju kriptografske celovitosti slika.
- — API za metapodatke, namenjen upravljanju unutrašnjim bezbednosnim politikama. Na primer, omogućava poboljšanje rada skenera sigurnosti kontejnera. Shopify koristi ovaj API za upravljanje metapodacima za svojih 500 hiljada slika.
- — orodje za Kubernetes, ki spremlja delovanje sistema: aktivnost v kontejnerjih, na gostiteljih, v omrežju. Omogoča nastavitev neprekinjenih preverjanj v infrastrukturi, odkrivanje anomalij in pošiljanje opozoril za vsak sistemski klic Linux.
- — še eno orodje za statično analizo slik Docker-kontejnerjev. Omogoča »vpogled« v datoteke slike, zbiranje potrebnih podatkov, uporabo potrebnih politik itd.
Še eno dobro izbiro praktičnih priporočil o tem, kako narediti Docker varnejši, lahko najdete v podjetju Aqua Security. Mnogi njeni nasveti se prekrivajo z že omenjenimi zgoraj, vendar so tudi drugi. Na primer, avtorji predlagajo organizacijo spremljanja aktivnosti v kontejnerjih in opozarjajo, na kaj biti pozoren pri uporabi Docker Swarm.
Za tiste, ki želijo še podrobneje raziskati to temo, je lani izšla knjiga „», katerih deli so prosto dostopni. .
Nazadnje, za praktično seznanitev z nekaterimi vidiki varnosti Docker: profili Seccomp in uporaba capabilities jedra Linux v kontejnerjih — lahko opravite ustrezne laboratorijske vaje na * — glej razdelek „Security“.

* O samem tem viru smo pred dvema letoma, in novembra 2018 se je zgodila zelo zanimiva (z vidika varnosti) zgodba. Na kratko, strokovnjakom iz CyberArk Software Ltd. je uspelo zlomiti ta vir: pridobili so možnost izvajanja ukazov zunaj kontejnerjev, tj. na gostiteljski sistem. Odlična ilustracija varnostnega problema v Docker, kajne? O vseh podrobnostih dogodka preberite .
P.S. od prevajalca
Preberite tudi na našem blogu:
- «»;
- «»;
- «»;
- «»;
- «»;
- «».
Izvor: habr.com

