Поиск по сайту:

Как автоматизировать аудит безопасности Docker с помощью Docker Bench for Security


Docker удобен, но также может быть угрозой безопасности. Важно защитить Docker Engine от возможных угроз, особенно если вы используете хост Docker в производственной среде.

Docker Bench for Security — это автоматизированный скрипт, который может помочь вам найти проблемы с вашей конфигурацией. Сценарий Bench сканирует ваш хост, чтобы найти слабые места в настройке Docker Engine. Он предоставляется самим Docker как инструмент аудита безопасности с открытым исходным кодом.

Запуск скрипта

Самый простой способ использовать Docker Bench — загрузить скрипт и запустить его напрямую. Вы можете проверить его на GitHub, если вас беспокоит его содержимое.
Используйте Git для клонирования репозитория Bench. Выполните скрипт, используя вашу оболочку. Docker Bench следует запускать с помощью sudo, так как он включает проверки, требующие root-доступа.

git clone https://github.com/docker/docker-bench-security.git
cd docker-bench-security
sudo sh docker-bench-security.sh

Вы увидите результаты аудита, отображаемые в вашем терминале. Сканирование займет несколько секунд. Это может занять минуту или больше, если у вас много запущенных контейнеров.

Понимание отчета

Конфигурация хоста

Эта группа тестов фокусируется на слабых местах в аудите безопасности вашего хоста. Проводятся проверки правильности аудита каталогов Docker, использования выделенного раздела для контейнеров и установки обновленной версии Docker.

Конфигурация демона

Тесты, ориентированные на демона, проверяют, не открывается ли сокет Docker через незащищенное соединение. Сетевой трафик между контейнерами в сети bridge по умолчанию должен быть ограничен, а небезопасные реестры удалены.

В этом разделе также выполняется поиск неподходящих привилегий для контейнеров. Контейнеры не должны получать новые привилегии. Это может позволить злоумышленнику перерасти контейнер.

Следующий раздел, файлы конфигурации демона Docker, имеет аналогичную направленность. Это гарантирует, что каталог установки Docker и сокет Unix имеют соответствующие разрешения и владельца. Файловая система Docker должна принадлежать root:root с ограничительными разрешениями 644.

Образы контейнеров

Docker Bench выполняет базовую проверку Dockerfiles на наличие известных образов. Он будет искать выделенных пользователей контейнера, наличие инструкций HEALTHCHECK и использование Content Trust для проверки целостности данных.

В этом тестовом разделе также будут появляться предупреждения, которые напоминают вам об основных шагах по усилению защиты изображения. Используйте доверенные базовые образы, применяйте новые исправления безопасности и избегайте установки ненужных пакетов. Эти меры помогают устранить уязвимости внутри контейнеров.

Среда выполнения контейнера

Тесты Container Runtime проверяют работающие контейнеры. Этот раздел содержит более 30 тестов, начиная от доступности SELinux и AppArmor и заканчивая использованием соответствующих монтирований файловой системы и сетевых параметров.

Вы потеряете очки, если будете использовать привилегированные контейнеры или монтировать сокет Docker в контейнер. Контейнеры не должны иметь возможности получать дополнительные привилегии или мешать хост-системе.

Bench также ищет серверы SSH, работающие внутри контейнеров. Это нежелательно, так как следует избегать прямого доступа к контейнеру. Предпочтительно использовать docker exec с хоста для взаимодействия с контейнерами.

Дополнительные тесты рассматривают использование ограничений ЦП и памяти. Неограниченный контейнер может потреблять чрезмерные ресурсы и в конечном итоге вызывать нехватку памяти на узле. Сетевые проверки помечают неиспользуемые порты, а также запросы на сопоставление привилегированных портов с контейнерами.

Докер Рой

Docker Bench включает дополнительный раздел для пользователей Docker Swarm. Он фокусируется на пометке незащищенных секретов и сертификатов, которые не ротируются должным образом. Это также требует правильной настройки сети, включая использование зашифрованных оверлейных сетей.

Раздел Swarm выдаст предупреждение, если режим Swarm включен, но фактически не используется. Если вы не планируете использовать Swarm, отключите его, запустив docker swarm leave --force.

Решение общих проблем

Большинство хостов Docker будут выдавать несколько предупреждений, если вы не предприняли активных шагов для их защиты. Вот некоторые меры, которые вы можете предпринять для решения некоторых из наиболее распространенных отчетов Docker Bench.

Включение аудита для файлов Docker

Docker рекомендует использовать аудит ключевых каталогов Docker на системном уровне. Аудит регистрирует любые операции, влияющие на отслеживаемые файлы и каталоги. Это позволяет отслеживать потенциально разрушительные изменения.

Убедитесь, что у вас установлен auditd. Отредактируйте /etc/audit/audit.rules и добавьте следующие строки в конец файла:

-w /etc/default/docker -p wa
-w /etc/docker -p wa
-w /etc/docker/daemon.json -p wa
-w /lib/systemd/system/docker.service -p wa
-w /lib/systemd/system/docker.socket -p wa
-w /usr/bin/docker -p wa
-w /usr/bin/docker-containerd -p wa
-w /usr/bin/docker-runc -p wa
-w /var/lib/docker -p wa

Инструкция -p wa означает, что auditd будет регистрировать записи и изменения атрибутов, влияющие на файлы. Если ваши выходные данные Docker Bench предполагают, что вы используете аудит для дополнительных каталогов, добавьте их также в список. Каталоги Docker могут меняться со временем.

Вам потребуется перезапустить auditd, чтобы изменения вступили в силу:

sudo systemctl restart auditd

Усиление демона

Docker Bench обычно находит проблемы с конфигурацией вашего демона. Добавление следующего в /etc/docker/daemon.json отключит несколько предупреждений демона.

{
    "icc": false,
    "live-restore": true,
    "no-new-privileges": true,
    "userland-proxy": false,
    "userns-remap": "default"
}

  • icc:  это предотвращает взаимодействие контейнеров друг с другом через сеть bridge по умолчанию. Контейнеры будут связываться друг с другом только в том случае, если они явно связаны друг с другом с помощью --link.
  • восстановление в реальном времени : этот параметр позволяет контейнерам продолжать работу, даже если демон останавливается. Это рекомендуется в производственных средах, где вы хотите свести к минимуму время простоя.
  • без новых привилегий. Это не позволяет контейнерам повышать свои привилегии с помощью таких команд, как setuid и setgid.
  • userland-proxy: отключение означает, что iptables используется для маршрутизации трафика порта хоста в контейнеры. Без него используется прокси-процесс пользовательской среды Docker, что увеличивает поверхность атаки вашего демона.
  • userns-remap:  это позволяет использовать пространства имен пользователей, поэтому root в контейнере сопоставляется с менее привилегированным пользователем хоста. Это снижает риск того, что скомпрометированный контейнер сможет выполнять команды root на вашем хосте. Использование default сообщит Docker о необходимости настроить для этой цели специальную учетную запись пользователя.

Настройка вывода отчета

Docker Bench поддерживает несколько флагов, которые можно использовать для настройки вывода:

  • -b: отключить цвета. Полезно, если вы запускаете скрипт в среде непрерывной интеграции, которая не поддерживает полный вывод ANSI.
  • -p:  не включать предлагаемые меры по исправлению. Полезно, если вы хотите сосредоточиться на предупреждениях и уменьшить шум в выходных данных.
  • -l report.txt: записывать вывод в report.txt, а не в терминал.
  • -c check_5.1,check_5.2: выполнять проверки только 5.1 и 5.2. Список тестов доступен на GitHub.
  • -e check_5.1,check_5.2: исключить проверки 5.1 и 5.2.

Вы можете комбинировать флаги вместе, чтобы создать нужный вам отчет. Если целый раздел проверок к вам не относится, рассмотрите возможность создания псевдонима оболочки, чтобы вы могли быстро запускать Docker Bench с последовательностью примененных флагов.

Заключение

Использование сценария Docker Bench for Security поможет вам найти и устранить слабые места в системе безопасности вашего хоста Docker. Устранение любых предупреждений, которые он выдает, поможет укрепить ваш хост и улучшить вашу безопасность.

Помните, что Docker Bench не является исчерпывающим тестом. Есть и другие аспекты обеспечения безопасности Docker, которые также нельзя упускать из виду.

Скомпрометированный контейнер может дать злоумышленникам плацдарм в ваших системах, даже если у вас есть надежная защита на уровне хоста. Вы можете снизить этот риск, используя Docker Bench вместе с активными сканерами уязвимостей контейнеров, такими как Trivy и Clair. Это поможет вам выявить проблемы внутри ваших контейнеров, например устаревшие зависимости, которые можно использовать.

Хотя целью всегда является хороший результат, следует также отметить, что Docker Bench предназначен для рабочих нагрузок. Не все проверки относятся к локальной установке Docker разработчика. Запустите сценарий, прочитайте предупреждения и оцените, какие из них относятся к вашей среде.