- Категории статьи:
- ОС хоста
- Правила аудита
- Режим FIPS
- Секреты Docker
- Файл конфигурации Docker
- TLS
- Плагины авторизации
- Параметры демона
- Конфигурации контейнера и файла сборки
- Создание пользователя
- Удаленный доступ
- Изолируйте пространство имен пользователя
- Healthchecks
- Сетевые интерфейсы
- Кэш версии образа
- В противном случае вы можете получить устаревшую кэшированную версию образа, содержащего уязвимости.
- Сокет Docker
- Настройки Enterprise версии
- Docker Trust
- Сканирование уязвимостей
- Интеграция LDAP с UCP
Категории статьи:
- Действия, которые необходимо предпринять в операционной системе хоста при взаимодействии с Docker
- Инструкции, специфичные для файла конфигурации сборки и создания контейнеров
- Функциональность безопасности, которая может интегрироваться со специфическими функциями Docker Enterprise.
ОС хоста
Очевидно, что Docker-контейнер не может быть защищен, если не защищена хостовая операционка .
Поэтому вы должны следовать нормальным рекомендациям по безопасности ОС, и было бы разумно выполнить некоторые проверки уязвимости в дополнение к реализации следующих предложений.
Правила аудита
Режим FIPS
sed -i 's/GRUB_CMDLINE_LINUX="/GRUB_CMDLINE_LINUX="fips=1 /g' /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg && reboot
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
.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"
}
}
Эта настройка позволяет удаленное логгирование и отправлять журналы по указанному адресу.
Работает только если запущен демон syslog.
TCP и UDP принимаются как опции.
Может также выполняться в зависимости от контейнера в качестве параметра при запуске Docker (–log-opt syslog-address = ADRESS)
“userns-remap”: “Your_User”
TLS
Плагины авторизации
dockerd --authorization-plugin=PLUGIN_ID
Параметры демона
Демон Docker работает с набором параметров по умолчанию
--live-restore
--userland-proxy=false
--no-new-privileges
--seccomp-profile /path/to/profile
Конфигурации контейнера и файла сборки
Создание пользователя
Убедитесь, что создан пользователь для вашего контейнера, и запустите контейнер от имени этого пользователя (НЕ запускайте контейнер от имени пользователя root).
Удаленный доступ
Не разрешайте удаленный доступ к демону, и если вам все равно это необходимо, обезопасьте этот доступ сертификатами.
Изолируйте пространство имен пользователя
Особенно важно убедиться, что пространство имен пользователя изолировано в Docker, поскольку по умолчанию оно используется совместно с пространством имен хоста.
В некоторых случаях этим можно злоупотреблять, чтобы получить повышение привилегий или даже выйти из контейнера.
Вы можете изолировать пространство имен пользователя, отредактировав файл конфигурации, как упомянуто в приведенном выше разделе «Файл конфигурации Docker».
Это упоминается здесь для того, чтобы подчеркнуть важность этого момента.
Healthchecks
Healthcheck – это мощный инструмент, который можно использовать для проверки целостности контейнера, и который можно настроить в вашем файле Docker.
Вы должны выполнить проверки работоспособности, чтобы убедиться, что ваш контейнер работает нормально.
Приведенный ниже пример проверки работоспособности, который завершается с 0, если сервер работает, и с 1, если он не работает.
HEALTHCHECK CMD curl --fail http://localhost || exit 1
docker daemon --selinux-enable
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 и переполнения MAC.
Чтобы решить эту проблему, создайте пользовательскую сеть типа Мост в соответствии со своими спецификациями, как описано здесь: https://docs.docker.com/network/bridge/ 5
Сокет Docker
Никогда не запускайте Docker-сокет внутри контейнера.
Это позволяет этому контейнеру выполнять команды Docker и, следовательно, связываться с хостовой ОС и управлять ею.
Так что не делай этого.
Настройки Enterprise версии
Docker Trust
Используйте инструмент Docker trust для генерации ключей, которые можно использовать для проверки криптографической целостности ваших образов.
Эти ключи Docker можно использовать для подписи образов Docker закрытыми ключами, что можно проверить с помощью открытых ключей на Notary сервере.
Дополнительная информация по адресу https://docs.docker.com/engine/security/trust/content_trust/
Чтобы сосредоточиться на включении Docker Trust в Enterprise Engine, перейдите к этому разделу https://docs.docker.com/engine/security/trust/content_trust/#enabling-dct-within-the-docker-enterprise-engine.
Сканирование уязвимостей
Docker Enterprise имеет встроенную функцию сканирования уязвимостей, которая включает в себя возможность загрузки базы данных CVE для запуска автономных сканирований vuln образов Docker.
Сканирование образов на регулярной основе поможет сделать их более безопасными, предупреждая вас об уязвимостях, которыми они обладают.
Подробнее о том, как это сделать, можно узнать здесь: https://docs.docker.com/ee/dtr/user/manage-images/scan-images-for-vulnerabilities/