Забележка. превод: Темата за сигурността на Docker е може би една от вечните в съвременния IT свят. Ето защо, без допълнително обяснение, представяме превод на следващата селекция от подходящи препоръки. Ако вече сте се интересували от този въпрос, много от тях ще ви бъдат познати. Допълнихме самата колекция със списък с полезни помощни програми и няколко ресурса за по-нататъшно проучване на проблема.

Предлагам на вашето внимание ръководство за осигуряване на сигурност на Docker. Обратната връзка е добре дошла, тъй като това е по-скоро колекция от извадки от различни ресурси и не всички от тях са прегледани задълбочено. Препоръките са разделени на три категории:
- Необходими мерки в рамките на хост операционната система при работа с Docker;
- Инструкции, свързани с конфигурационния файл за изграждане и създаване на контейнери;
- Инструменти за сигурност, които могат да се интегрират със специфични функции на Docker Enterprise.
Ръководството се основава на различни ресурси, много от които са изброени по-долу. Не е изчерпателен, но обхваща всички основи. Допълнителна информация може да бъде намерена в описанието на CIS тестовете (с връзка в края на това ръководство), както и в документацията на Docker.
Docker Security Benchmark
автоматично проверява вашия Docker спрямо най-често срещаните най-добри практики. Скриптът е добър евристичен тест за сигурност, но не трябва да се разглежда като инструмент за цялостен анализ.
Хост ОС
Очевидно Docker контейнер не може да бъде защитен, освен ако самата хост система не е защитена. Следователно е необходимо да се следват най-добрите практики за сигурност на операционната система. Освен това би било разумно да се извърши анализ на уязвимостта в допълнение към следните препоръки.
Правила за одит
Създавайте и използвайте правила за проверка за използване на файлове, свързани с Docker auditctl. Например, можете да добавите -w /usr/bin/dockerd -k docker к /etc/audit.rules и рестартирайте услугата за одит.
Режим FIPS
Активирането на режим FIPS принуждава криптографските инструменти да преминат към изброените в FIPS алгоритми (Американски - прибл. превод), като по този начин отговаря на федералните и индустриалните разпоредби и изисквания. Ако хост ОС поддържа режим FIPS, можете да го активирате, като изпълните следните команди:
sed -i 's/GRUB_CMDLINE_LINUX="/GRUB_CMDLINE_LINUX="fips=1 /g' /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg && rebootТрябва също да активирате FIPS в 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За повече информация вижте документацията и .
Докерски тайни
Поверителните данни трябва да се пазят като тайна. Можете да стартирате съответната услуга с помощта на командата за създаване на докер услуга:
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За подробности вж .
Конфигурационен файл на Docker
Следните настройки могат да бъдат добавени към конфигурационния файл /etc/docker/daemon.json:
-
"icc":false— забранява обмена на данни между контейнерите, за да се избегне ненужно изтичане на информация. -
log-level: "info"— улавя всички регистрационни файлове с изключение на тези за отстраняване на грешки. { "log-driver": "syslog", "log-opts": { "syslog-address": "udp://1.2.3.4:1111" } }— позволява отдалечено регистриране и ги препраща към посочения адрес. Работи само ако демонът на системния журнал работи. TCP и UDP се приемат като опции. Възможно е и свързване за всеки отделен контейнер. За тази цел се задава специален флаг при стартиране на Docker (
--log-opt syslog-address=ADDRESS).-
"userns-remap": "Your_User"— предотвратява ескалацията на привилегии чрез изолиране на пространството от имена за конкретен потребител.
Сигурност на транспортния слой
Само потребители с достъп до TLS клиентски идентификационни данни трябва да могат да се свързват с Docker daemon (ако се изисква отдалечен достъп).
Плъгини за оторизация
Решете на кои потребители е разрешено да изпълняват кои команди и създайте подходящ плъгин за оторизация за Docker. След това стартирайте демона Docker и добавете плъгина към него:
dockerd --authorization-plugin=PLUGIN_IDЗа да научите повече за създаването на добавки за оторизация, вижте .
Опции на демон
Демонът Docker работи с набор от параметри по подразбиране.
-
--live-restore— този параметър помага за намаляване на времето за престой на контейнера, когато системата се изключи или рестартира. Става по-лесно да ги коригирате или актуализирате с минимално време на престой; -
--userland-proxy=false— когато са налични или използвани фиксиращи NAT, проксито в потребителското пространство се превръща в излишна услуга, което само увеличава броя на възможните вектори на атака; -
--no-new-privileges— не позволява на контейнерите да получат допълнителни привилегии с помощта на suid или sguid; -
--seccomp-profile /path/to/profile- ако имате свой собствен seccomp профил, можете да го приложите, като използвате този флаг. Можете да научите повече за Seccomp и Docker .
Конфигурация на контейнер и компилиран файл
Създаване на потребител
Уверете се, че е създаден потребител за контейнера и го стартирайте под този потребител (НЕ стартирайте контейнера като root).
Отдалечен достъп
Деактивирайте отдалечения достъп до демона. Ако все още ви трябва, защитете го със сертификати.
Изолирайте потребителското пространство от имена
Особено важно е да се гарантира, че потребителското пространство от имена в Docker е изолирано, тъй като по подразбиране то се споделя с пространството от имена на хоста. В някои случаи това може да се използва за ескалиране на привилегии или дори за излизане извън контейнера. Можете да изолирате потребителското пространство от имена, като редактирате конфигурационния файл (както е описано по-горе в раздела за конфигурационен файл на Docker). Допълнителното споменаване на този въпрос тук се дължи на неговата важност.
Преглед на здравето
Healthcheck е мощен инструмент, който ви позволява да проверите целостта на контейнер. Той се конфигурира в Dockerfile с помощта на инструкциите HEALTHCHECK. Проверките на здравето ви позволяват да се уверите, че контейнерът работи правилно. В примера по-долу проверката на здравето връща 0, ако сървърът работи и 1, ако не работи:
HEALTHCHECK CMD curl --fail http://localhost || exit 1SELinux
Ако ЮИLinux поддържано от хост операционната система, създаване или импортиране на SE политикаLinux и стартирайте Docker в демоничен режим с активиран SELinux:
docker daemon --selinux-enableВ този случай Docker контейнерите могат да бъдат стартирани с настройки за сигурност, например:
docker run --interactive --tty --security-opt label=level:TopSecret centos /bin/bashМрежови интерфейси
По подразбиране Docker слуша всички мрежови интерфейси. Тъй като в повечето случаи се очаква трафик само на един от тях, този подход ненужно увеличава риска от атака. Следователно, когато стартирате контейнер, можете да свържете неговите портове към конкретни интерфейси на хоста:
docker run --detach --publish 10.2.3.4:49153:80 nginxКеширани версии на изображения
Когато изтегляте изображения, уверете се, че локалният кеш съответства на съдържанието на хранилището. В противен случай може да се окажете с остаряла версия на изображението или изображение, което съдържа уязвимости.
Мрежов мост
Мрежов модел по подразбиране docker0, е уязвим на атаки като ARP-spoofing и MAC-flooding. За да разрешите този проблем, създайте мрежов мост според вашите спецификации, както е описано .
Предупреждение за докер сокет
Никога не препращайте Docker сокет вътре в контейнер. В противен случай контейнерът ще може да изпълнява Docker команди и следователно да комуникира и да контролира операционната система на хоста. Не прави това.
Конфигуриране на Docker Enterprise
Докер тръст
Docker Trust ви позволява да генерирате ключове, които могат да се използват за проверка на криптографската цялост на изображенията. Ключовете за доверие на Docker могат да се използват за подписване на изображения на Docker с лични ключове, които се проверяват от публични ключове на нотариалния сървър. Допълнителна информация - . Активирането на Docker Trust в Enterprise Engine е описано подробно в .
Сканиране на уязвимости
Docker Enterprise има вграден скенер за уязвимости, който ви позволява да изтеглите CVE база данни за офлайн сканиране на уязвимости в изображения. Редовното сканиране на изображенията ги прави по-сигурни: потребителят незабавно получава предупреждения за открити уязвимости. За повече информация как може да стане това вижте .
Забележка. превод: Има и скенери с отворен код за уязвимости в изображенията на Docker, примери за които можете да намерите в края на материала.
LDAP и UCP интеграция
Universal Control Plane може да бъде интегриран с LDAP. Резултатът ще бъде опростена система за удостоверяване, която избягва ненужното дублиране. Можете да прочетете повече за това в статията .
Други материали
Повече информация за най-добрите практики за сигурност на Docker можете да намерите на . Препоръчваме също да изтеглите .
Бонус за преводач
Като логично допълнение към тази статия публикуваме списък на 10 популярни помощни програми с отворен код за сигурност на Docker. Заимствано е от (от Бил Доерфелд от Doerrfeld.io).
NB: Прочетете повече за много от проектите, споменати тук в статията „".
- е скрипт, вече споменат в самото начало на статията, който проверява контейнерите на Docker за съответствие с обичайните практики за сигурност.

- — е може би най-популярната програма за статичен анализ на уязвимости в контейнер. Тя използва множество бази данни за CVE уязвимости (включително тракери на водещи Linux-дистрибуции като Red Hat, Debian, Ubuntu). Предлага API за разработчици и лесно разширяване на функционалността (чрез добавяне на „драйвери“). Използва се в популярния публичен регистър за изображения на контейнери (подобен на Docker Hub) — Quay.io.
- е решение за осигуряване на мрежова сигурност на ниво ядро, базирано на BPF мрежова технология за филтриране на пакети.
- — помощна програма за анализиране на съдържанието на изображения за наличие на уязвимости в сигурността въз основа на CVE. В допълнение, той ви позволява да прилагате персонализирани политики (въз основа на различни данни, включително бели/черни списъци, съдържание на файлове и т.н.), за да оцените сигурността на контейнерите.
- — цяла екосистема за създаване и поддържане на политики за сигурност на различни платформи. Предлага помощна програма за проверка на контейнери
oscap-docker. - — помощна програма за сканиране на Docker контейнери за уязвимости, троянски коне, вируси и зловреден софтуер. Базите данни CVE включват проверки на зависимост от OWASP, базата данни Red Hat Oval и хранилището за експлоатация на базата данни на Exploit.
- е рамка за подписване на изображения на Docker, първоначално създадена в Docker Inc (и след това прехвърлена за разработка на CNCF). Използването му ви позволява да делегирате роли и да разпределяте отговорности между контейнерите, както и да проверявате криптографската цялост на изображенията.
- — API за метаданни, предназначен за управление на политики за вътрешна сигурност. Като пример, той ви позволява да подобрите производителността на скенерите за сигурност на контейнери. Shopify използва този API за управление на метаданни в своите 500 XNUMX изображения.
- — помощна програма на Kubernetes, която следи поведението на системата: активност в контейнери, на хостове и в мрежата. Тя ви позволява да конфигурирате непрекъснати проверки на инфраструктурата, откриване на аномалии и предупреждения за всякакви системни извиквания. Linux.
- - друг инструмент за статичен анализ на изображения на Docker контейнер. Позволява ви да „разглеждате“ файлове с изображения, събирайки необходимите данни, прилагайки необходимите политики и т.н.
Още една добра колекция от практически препоръки за това как да направите Docker по-сигурен можете да намерите в Фирма Аква Секюрити. Много от нейните съвети се припокриват с вече споменатите по-горе, но има и други. Например, авторите предлагат да се организира мониторинг на активността в контейнери и да се посочи на какво да се обърне внимание, когато се използва Docker Swarm.
За тези, които искат да се потопят в тази тема по-подробно, тя беше публикувана миналата година. Книга "», фрагменти от които са свободно достъпни .
И накрая, за практическо въведение в някои аспекти на сигурността на Docker: Seccomp профили и използването на възможности Linux-ядра в контейнери - можете да преминете през съответните лабораторна работа по * - вижте раздела "Сигурност".

* За самия този ресурс ние преди две години и през ноември 2018 г. му се случи една много интересна (от гледна точка на сигурността) история. Накратко, специалистите от CyberArk Software Ltd. успя да го хакне: да постигне възможност за изпълнение на команди извън контейнери, т.е. на хост системата. Перфектна илюстрация на проблема със сигурността в Docker, нали? Прочетете всички подробности за случилото се .
PS от преводача
Прочетете също в нашия блог:
- «»;
- «»;
- «»;
- «»;
- «»;
- «".
Източник: www.habr.com

