Связаться по:
vkarabedyants Telegram Viber
+7 (499) 404-28-83

Блог о системном администрировании серверов и сайтов

Установка, настройка программного обеспечения Linux, Windows операционных систем

Проблемы безопасности Docker контейнеров

Проблемы безопасности Docker контейнеров
5 (100%) 1 vote[s]

Злоупотребление ресурсами

Суть проблемы

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

Что делать

Обратите внимание, что система создает новые контейнеры без каких-либо ограничений на использование ресурсов. Нам нужно изменить все ровно наоборот. Следуем таким правилам:

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

Примеры использования

Создадим контрольные группы, который по умолчанию доступны в настройках ОС Linux. Они помогают запретить контейнерам выполнять определенные действия с использованием ядра. Такие ограничения существенно экономят ресурсы:

Следующая команда поможет изменит используемый объем памяти с 3 на 2 ГБ. Для тестирования, задействуем «stress»:

Вы увидите сообщение «FAILED». Также у «syslog» появится следующее:

Используем «docker stats», чтобы проанализировать объем занимаемой памяти и работу установленных ограничений:

Проблема безопасности Docker: уязвимости в образах контейнеров

Суть проблемы

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

Что делать

Во-первых, архитектура такого решения построения контейнеров полностью оправдана. Но, во-вторых, нельзя игнорировать тот факт, что все всегда нужно проверять:

  • Как обычно, обновляйте все инструменты до последней версии, регулярно пересобирая образы. Не забывайте про развертывание на тестовом сервере.
  • Не нужно вносить изменения в контейнер, который стабильно работает. Просто проведите повторную сборку образа. Docker позволяет делать это быстро.
  • Качественное и лицензионное ПО регулярно обновляется самостоятельно. А вот за всем остальным придется следить самостоятельно и вручную вносить изменения.
  • Старайтесь подключить систему автоматического обновления без прерывания рабочих процессов.
  • Отделяйте данные пользователя и контейнера друг от друга.
  • Не перегружайте контейнер излишним количеством ПО. Это усложняет процесс обновления и сборки образа. Всегда дробите большие контейнеры на маленькие.
  • Не забывайте про сканирование образов. В идеале, автоматизируйте этот процесс с задействованием системы оповещения.

Примеры использования

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

Для начала, зарегистрируем аккаунт и перейдем в настройки, где установим свой пароль, который будет использовать для репозиториев. Сразу создадим один из таких, нажав на «+»:

Обратите внимание, что можно создать не только пустой репозиторий. Заходим в нашу учетную запись через строку, чтобы закачать образ:

Кликнув по ID можно узнать итог сканирования.

Проблема безопасности Docker: учетные данные и секреты

Суть проблемы

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

Что делать

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

Примеры использования

Пример того, как можно перехватить переменные окружения:

Удивлены? А теперь представьте, что для этого не нужны root-права:

Вы можете использовать готовые решения для хранения секретов. Мы приведем пример с использованием Docker Swarm:

Протестируем работу. Создаем любой документ с условным секретом:

Создаем секретный ресурс:

Создаем Docker Swarm сервис, который наделен правами доступа к ресурсу:

Заходим в контейнер nginx. Если все правильно, то у вас откроется доступ к секрету:

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

Мониторинг безопасности во время выполнения

Суть проблемы

Рассмотрим такой случай, когда вы соблюдали все нормы безопасности, а образ был скомпрометирован непосредственно во время выполнения.

Что делать

  • Статические методы противодействия уже бесполезны. Но можно попробовать отследить источник с помощью сканеров. Но помните, что злоумышленники могут использовать не определяемый 0-day.
  • Помимо статических методов защиты, организуйте динамические.
  • Для анализа атаки очень пригодятся логи системы.

Примеры использования

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

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

Устанавливаем Falco, применив автоматический скрипт. Однако, для production целей можно развернуть его и в виртуальной машине:

Активируем оболочку в nginx:

Вы увидите в самом конце файла такое содержимое:

Обратите внимание, что Sysdig Falco не может вносить какие-либо изменения в работу контейнеров. Также не забудьте ознакомиться с расширенными возможностями ПО.

Итог

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

Получить квалифицированную помощь или консультацию по любому вопросу безопасности серверной инфраструктуры можно обратившись на [email protected] Напишите нам, и мы поможем!

Оставить комментарий

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.