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

Аватар пользователя Pavel Virtuozzo
Автор: Емельянов Павел, Virtuozzo
(0)
()
Опубликовано в:

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

Контейнер операционной системы представляет собой своего рода «легкую» виртуальную машину. Ее «легкость» заключается в том, что вместо гипервизора используется виртуализация ядра операционной системы (эта технология раньше тоже называлась контейнерной виртуализацией – но сегодня данный термин скорее относится к запаковке приложений), предназначенную для запуска произвольного ПО. Благодаря использованию единого ядра для хостовой и гостевых ОС, такая система требует значительно меньше памяти, чем стандартная виртуальная машина, и может поддерживать намного больше нагрузок на одном и том же железе.

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

Увеличение Attack Surface

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

Поэтому опасения о защищенности контейнеров имеют под собой реальную почву, ведь уязвимости в программном коде Linux – это не такая уж редкость. Однако сегодня ведется и частично закончена работа нескольких инициативных групп, которые готовы повысить защищенность контейнеров. Основные усилия направлены на замену окружения, в котором запускается контейнер, с виртуализации ядра ОС на тем или иным образом «облегчённый» гипервизор, использующийся для виртуальных машин. Вот наиболее интересные из них:

  • ClearLinux – инициатива компании Intel по созданию собственного дистрибутива, рассчитанного, во-первых, на работу именно в рамках виртуальной экосистемы intel architecture, а, во-вторых, на работу с контейнерами Docker. Ключевым в данном подходе является способ настройки т.н. “слоёв” - отдельных компонентов файловой системы, из которых Docker собирает корневую директорию контейнера – для эффективной работы с гипервизором. Кроме того, данное ПО отличается целым рядом дополнительных оптимизаций, среди которых – повышение производительности, управляемости, скорости загрузки – при запуске на оборудовании Intel.
  • Unikernel – набор решений, позволяющих существенно уменьшить накладные расходы виртуализации, связанные с присутствием ядра ОС в госте. Сами  по себе Unikernels представляют собой специальные образы виртуальных машин, основанные на облегчённых ядрах ОС (не только на базе Linux) с регламентированным адресным пространством – проверенные, поддерживаемые и готовые для коммерческого использования с определёнными приложениями. Однако следует понимать, что подготовка образа контейнера под unikernel включает в себя и подготовку соответствующего приложению «ядра».
  • Паравиртуализация – использование подготовленных модифицированных версий ядра операционных систем, специально созданных для работы в виртуальной машине.  В настоящее время паравиртуализации «подвергаются» всё больше и больше компонент ядра ОС.
  • Гибридные или прокси ядра – специалисты компании Aporeto претендуют на создание своей концепции защиты в облаке. Согласно данной методике, большая часть функций сетевого стека и стека ввода-вывода ядра остаётся в хосте, что положительно сказывается на их производительности. Остальные же ядерные компоненты, такие как интерфейс системных вызовов или абстрактный слой работы с файлами, передаются гостевому ядру. Поскольку большее количество уязвимостей последних лет было найдено именно в этих компонентах, сам хост и весь пул «легких» виртуальных машин становятся менее подверженными атакам.

Из разработок, не связанных с переходом на гипервизор, но помогающих повысить уровень безопасности «легких» ВМ, можно упомянуть ReadyKernel. Это собственная разработка компании Virtuozzo, которая делает возможным применение обновлений безопасности без остановки ОС и перезагрузки сервисов. Она позволяет загружать апдейты ядра Linux сразу по мере их выпуска, не дожидаясь конца рабочего дня или выходных, сводя к минимуму время от обнаружения уязвимости ядра до установки «заплатки».

Оцените материал:
Total votes: 106
 
Комментарии в Facebook
 

Вы сообщаете об ошибке в следующем тексте:
Нажмите кнопку «Сообщить об ошибке», чтобы отправить сообщение. Вы также можете добавить комментарий.