Сигурност за Docker контейнери

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

Сигурност за Docker контейнери

Предлагам на вашето внимание ръководство за осигуряване на сигурност на Docker. Обратната връзка е добре дошла, тъй като това е по-скоро колекция от извадки от различни ресурси и не всички от тях са прегледани задълбочено. Препоръките са разделени на три категории:

  1. Необходими мерки в рамките на хост операционната система при работа с Docker;
  2. Инструкции, свързани с конфигурационния файл за изграждане и създаване на контейнери;
  3. Инструменти за сигурност, които могат да се интегрират със специфични функции на 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 1

SELinux

Ако ЮИ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. Резултатът ще бъде опростена система за удостоверяване, която избягва ненужното дублиране. Можете да прочетете повече за това в статията Интегриране с LDAP директория.

Други материали

Повече информация за най-добрите практики за сигурност на Docker можете да намерите на docs.docker.com. Препоръчваме също да изтеглите Център за тестове за интернет сигурност за Docker.

Бонус за преводач

Като логично допълнение към тази статия публикуваме списък на 10 популярни помощни програми с отворен код за сигурност на Docker. Заимствано е от друга статия (от Бил Доерфелд от Doerrfeld.io).

NB: Прочетете повече за много от проектите, споменати тук в статията „33+ инструмента за сигурност на Kubernetes".

  1. Докер пейка за сигурност е скрипт, вече споменат в самото начало на статията, който проверява контейнерите на Docker за съответствие с обичайните практики за сигурност.

    Сигурност за Docker контейнери

  2. Clair — е може би най-популярната програма за статичен анализ на уязвимости в контейнер. Тя използва множество бази данни за CVE уязвимости (включително тракери на водещи Linux-дистрибуции като Red Hat, Debian, Ubuntu). Предлага API за разработчици и лесно разширяване на функционалността (чрез добавяне на „драйвери“). Използва се в популярния публичен регистър за изображения на контейнери (подобен на Docker Hub) — Quay.io.
  3. цилиума е решение за осигуряване на мрежова сигурност на ниво ядро, базирано на BPF мрежова технология за филтриране на пакети.
  4. Котва — помощна програма за анализиране на съдържанието на изображения за наличие на уязвимости в сигурността въз основа на CVE. В допълнение, той ви позволява да прилагате персонализирани политики (въз основа на различни данни, включително бели/черни списъци, съдържание на файлове и т.н.), за да оцените сигурността на контейнерите.
  5. OpenSCAP Workbench — цяла екосистема за създаване и поддържане на политики за сигурност на различни платформи. Предлага помощна програма за проверка на контейнери oscap-docker.
  6. Дагда — помощна програма за сканиране на Docker контейнери за уязвимости, троянски коне, вируси и зловреден софтуер. Базите данни CVE включват проверки на зависимост от OWASP, базата данни Red Hat Oval и хранилището за експлоатация на базата данни на Exploit.
  7. нотариус е рамка за подписване на изображения на Docker, първоначално създадена в Docker Inc (и след това прехвърлена за разработка на CNCF). Използването му ви позволява да делегирате роли и да разпределяте отговорности между контейнерите, както и да проверявате криптографската цялост на изображенията.
  8. Графаес — API за метаданни, предназначен за управление на политики за вътрешна сигурност. Като пример, той ви позволява да подобрите производителността на скенерите за сигурност на контейнери. Shopify използва този API за управление на метаданни в своите 500 XNUMX изображения.
  9. Sysdig Falco — помощна програма на Kubernetes, която следи поведението на системата: активност в контейнери, на хостове и в мрежата. Тя ви позволява да конфигурирате непрекъснати проверки на инфраструктурата, откриване на аномалии и предупреждения за всякакви системни извиквания. Linux.
  10. Колекционер на банянопс - друг инструмент за статичен анализ на изображения на Docker контейнер. Позволява ви да „разглеждате“ файлове с изображения, събирайки необходимите данни, прилагайки необходимите политики и т.н.

Още една добра колекция от практически препоръки за това как да направите Docker по-сигурен можете да намерите в тази статия Фирма Аква Секюрити. Много от нейните съвети се припокриват с вече споменатите по-горе, но има и други. Например, авторите предлагат да се организира мониторинг на активността в контейнери и да се посочи на какво да се обърне внимание, когато се използва Docker Swarm.

За тези, които искат да се потопят в тази тема по-подробно, тя беше публикувана миналата година. Книга "Сигурност на Docker: Бърза справка», фрагменти от които са свободно достъпни тук.

И накрая, за практическо въведение в някои аспекти на сигурността на Docker: Seccomp профили и използването на възможности Linux-ядра в контейнери - можете да преминете през съответните лабораторна работа по ресурс Играйте с Docker* - вижте раздела "Сигурност".

Сигурност за Docker контейнери

* За самия този ресурс ние каза преди две години и през ноември 2018 г. му се случи една много интересна (от гледна точка на сигурността) история. Накратко, специалистите от CyberArk Software Ltd. успя да го хакне: да постигне възможност за изпълнение на команди извън контейнери, т.е. на хост системата. Перфектна илюстрация на проблема със сигурността в Docker, нали? Прочетете всички подробности за случилото се тук.

PS от преводача

Прочетете също в нашия блог:

Източник: www.habr.com

Купете надежден хостинг за сайтове с DDoS защита, VPS VDS сървъри 🔥 Купете надежден уеб хостинг със защита от DDoS атаки, VPS VDS сървъри | ProHoster