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

Как укрепить образы Docker для максимальной безопасности


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

Что такое усиление изображения?

«Усиление» изображения означает анализ его текущего состояния безопасности и последующее внесение улучшений для решения любых проблем. Выбор готового базового образа, такого как ubuntu:latest, может показаться простым, но использование его как есть может подвергнуть вас скрытым угрозам. Это немного похоже на подготовку нового «голого» сервера из установочного образа Ubuntu, а затем никогда его не обновляющего.

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

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

Сканирование вашего изображения

Первый шаг — проанализировать выбранное вами базовое изображение. Пока вы не запустите проверку безопасности, вы не сможете узнать, безопасно ли использовать ваше изображение.

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

Anchore — один из таких механизмов сканирования контейнеров. Он использует архитектуру клиент/сервер, но может быть запущен в вашем терминале для однократного сканирования. Trivy — аналогичный вариант, который использует собственную базу данных уязвимостей и представляет проблемы в красиво отформатированной таблице. Другой альтернативой является Docker Scan, интеграция с механизмом сканирования Snyk, который включен в последние версии Docker CLI.

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

Просмотрите свой анализ

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

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

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

Реализуйте свои уровни смягчения последствий

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

FROM insecure-base-image:latest
RUN apt update -y && apt install -y unpatched-package
docker build -t secure-base-image:latest .
docker push example.com/secure-base-image:latest

Теперь измените Dockerfile вашего приложения, чтобы он ссылался на защищенную версию образа:

--- FROM insecure-base-image:latest
+++ FROM secure-base-image:latest

Конечно, ваши шаги по закалке будут больше связаны с реальным миром. Вам потребуется обновить все устаревшие пакеты, исправить все проблемы с конфигурационными файлами и применить меры, необходимые для полного устранения CVE. Одновременно убедитесь, что ваши изменения не приводят к конфликту версий, который нарушает стек зависимостей вашего программного обеспечения. Протестируйте свое приложение с защищенным образом, чтобы убедиться, что все работает должным образом.

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

Устранение уязвимостей, которые сканирование не может найти

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

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

Усиление образа включает в себя осведомленность о точках входа угроз, представленных Dockerfiles, а не просто использование инструмента сканирования. Регулярные ручные проверки вашего файла Dockerfile помогут вам снизить подверженность атакам на цепочку поставок и другим незаметным слабостям.

Использование предварительно усиленных изображений

Есть несколько готовых изображений, если вы не хотите создавать свои собственные. Самый высококлассный набор исходит от Центра интернет-безопасности (CIS) и включает, среди прочего, варианты Debian, Ubuntu, CentOS, RHEL, SUSE, NGINX, PostgreSQL и Windows Server. Каждый образ готов к развертыванию в популярных облачных провайдерах.

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

Больше для размышлений

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

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

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

Заключение

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

Закалка — непрерывный процесс; закаленный образ не останется таким навсегда. Вам необходимо регулярно сканировать и перестраивать образы, чтобы быть уверенными в том, что ваши рабочие нагрузки работают с последними пакетами и исправлениями.

Лучше всего с самого начала включить усиление в конвейер сборки образа. Сканирование базовых образов и выходных данных вашей сборки в вашей системе CI даст вам представление об изменяющемся состоянии безопасности и позволит вам просматривать новые уязвимости по мере их появления. Раннее обнаружение «слабых» мест позволяет быстро восстановить резервную копию изображения, уменьшая подверженность угрозам.