10 лучших практик обеспечения безопасности Docker

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

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

1. Регулярно обновляйте Docker и хост

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

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

2. Настройте квоты ресурсов

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

Не настроив квоты ресурсов, вы предоставляете контейнеру доступ ко всем ресурсам оперативной памяти и процессора хоста. Поскольку это значение установлено по умолчанию, рекомендуется ограничить объем ресурсов, которые может использовать контейнер, чтобы не нарушить работу других служб.

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

3. Используйте пользователей без рута

Docker позволяет запускать контейнер в привилегированном режиме. Хотя это может быть более быстрым способом обойти некоторые протоколы безопасности, вы всегда должны воздерживаться от использования этой практики.

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

Придерживаться исключительно не root-пользователей очень просто, поскольку это настройки Docker по умолчанию. Чтобы изменить конфигурацию по умолчанию, необходимо добавить флаг --privileged в команду docker run. Однако это представляет значительную угрозу безопасности и не должно использоваться.

4. Ограничение возможностей

Контейнеры имеют ограниченный набор возможностей Linux. Например, они могут позволить пользователю запускать контейнер с root-подобной эффективностью, но без полных привилегий root.

Ограниченные возможности Docker - это настройки безопасности по умолчанию, и они одинаковы для каждого контейнера. Поэтому рекомендуется изменить эти возможности, включив в них только то, что необходимо. Администратор управляет ими с помощью опций --cap-add и --cap-drop.

Самый безопасный способ настройки возможностей контейнера - удалить все (с помощью опции --cap-drop=ALL), а затем добавить необходимые.

5. Запретить новые привилегии

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

Чтобы запретить контейнерным процессам получать новые привилегии, используйте флаг --security-opt со значением no-new-privileges:true. Добавление флага в команду docker run перезаписывает любые правила, установленные с помощью опций --cap-add и --cap-drop.

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

6. Используйте надежные образы

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

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

Лучше всего заглянуть в Docker Hub и посмотреть, сможете ли вы найти там нужный образ. Это крупнейшая в мире библиотека и сообщество Docker с более чем 100 000 образов контейнеров.

Сканировать образы следует регулярно, а не только при загрузке из онлайн-реестра. Даже локальные образы, которые давно не использовались, следует сканировать перед созданием контейнера.

7. Облегчите образы и контейнеры

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

8. Безопасные реестры

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

Для хранения образов на уровне предприятия следует использовать Docker Trusted Registry (DTR). Вы можете установить реестр за брандмауэром, чтобы предотвратить возможные нарушения.

9. Не раскрывайте сокет демона Docker.

Docker взаимодействует с сокетом домена UNIX под названием /var/run/docker.sock. Это основная точка входа в API Docker. Любой, кто имеет доступ к сокету демона Docker, также имеет неограниченный доступ root.

Разрешение пользователю писать в /var/run/docker.sock или открытие сокета для контейнера представляет собой большой риск для безопасности остальной системы. По сути, это дает ему привилегии root.

Монтирование сокета Docker внутри контейнера не ограничивает его привилегированным доступом внутри контейнера. Это позволяет контейнеру полностью контролировать хост и все остальные контейнеры. Поэтому такая практика не рекомендуется.

10. Мониторинг API и сетевой активности

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

Недавно администраторы безопасности обнаружили новый тип атак, использующих неправильно настроенные API Docker. Хакеры пользуются плохими настройками API и сетевой безопасности, используют их для развертывания образа и запуска вредоносного контейнера на хост-системе.

Помимо безопасной настройки сетей и API, вам также необходимо отслеживать действия, чтобы выявить потенциальные аномалии.

Заключение

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

Понравилась статья? Поделиться с друзьями:
Добавить комментарий