Rambler's Top100
Статьи
Михаил КОНДРАШИН  23 июля 2019

Контейнерная виртуализация: преимущества и проблемы безопасности

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

Хотя контейнеры и технологии контейнеризации были известны достаточно давно, настоящую популярность они получили после появления в 2013 г. платформы Docker, связанного с ней активного сообщества пользователей и старта инициативы OCI (Open Container Initiative). Помимо ряда явных преимуществ, у контейнеров есть недостатки и уязвимости, которыми могут воспользоваться в своих целях киберпреступники. Поэтому разговор пойдет не только о самих контейнерах, но и о возможных путях их защиты от хакеров.

Преимущества контейнеров

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

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

К другим преимуществам технологии контейнеризации стоит отнести активное сообщество. Вследствие популярности этого направления практически любая проблема, с которой столкнулся разработчик, либо уже решена кем-то другим и описана на форумах, либо быстро найдет свое решение. По той же причине в Сети хватает публичных библиотек-репозиториев с контейнерами, а над совершенствованием экосистемы контейнерной виртуализации и инструментами для разработки и управления ими трудится огромное количество специалистов со всего мира. Причем многие решения касаются автоматизации процессов, которые позволяют построить цепочки непрерывной интеграции, развертывания и доставки (Continuous Integration, Continuous Delivery/Deployment, CI/CD) практически без участия пользователей.

Недостатки контейнеров и угрозы безопасности

Среди основных недостатков контейнеров следует назвать повышенную сложность управления большим их числом в системе (которого легко достичь из-за малого веса самих контейнеров). Для решения этой задачи часто применяются дополнительные инструменты, например Kubernetes. Также в рамках одной системы можно использовать только контейнеры, построенные для конкретной архитектуры, например для ОС Windows, поскольку все они задействуют ядро самой системы, а не гостевые ОС, как в виртуальных машинах. При этом для ресурсоемких приложений будет эффективней использовать не контейнеры или те же виртуальные машины, а традиционный сервер с прямым доступом к его ресурсам.

К явным угрозам безопасности можно отнести публичные репозитории, которые помогают развивать технологии контейнеризации. Команда исследователей Cisco Talos в мае нынешнего года обнаружила, что на портале Docker Hub уже три года контейнеры Alpine Linux распространялись с пустым паролем суперпользования, а дальнейшие исследования Kenna Security подтвердили, что эта же проблема касается примерно 20% всех контейнеров на том же ресурсе. Кроме того, взлом публичного реестра образов и добавление злоумышленниками собственных библиотек позволят заразить все серверы, в кэше которых хранится этот образ, поскольку по умолчанию серверы таких реестров являются доверенными ресурсами.

С уже упоминавшегося выше Docker Hub в июне 2018 года было удалено 17 таких контейнеров, но количество их загрузок за это время перевалило за 1 млн. Более того, в конце апреля 2019 года репозиторий был взломан и в руки хакеров попали данные свыше 190 тыс. пользователей, что показывает неослабевающий интерес злоумышленников к этой сфере. А в конце мая 2019 года прошла очередная волна распространения контейнеров с криптомайнером, использующим API Docker. Осенью 2018 года из каталога PyPi также были удалены зараженные контейнеры, причем вредоносный код в них мог даже подменять адреса Bitcoin-кошельков жертв на нужные хакерам.

Рекомендации по кибербезопасности

Современный непрерывный процесс разработки и развертывания приложений, т.е. тот самый CI/CD, явно нуждается в переходе от обеспечения безопасности «по факту» к внедрению инструментов безопасности в сам процесс разработки. По данным Gartner, в этом году уже в более чем 70% корпоративных процессов разработки будут внедряться инструменты для автоматизированной оценки уязвимостей и настроек различных компонентов и пакетов из внешних open source- и коммерческих источников.

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

В целом же для защиты контейнеров и процесса разработки приложений компаниям необходимо принять следующие меры:
  • обеспечить проверку безопасности на всех стадиях разработки, от кодирования до контейнеризации приложения;
  • максимально автоматизировать эту процедуру проверки;
  • распределить уровни доступа к механизмам проверки безопасности в зависимости от конкретной роли каждого участника разработки;
  • обеспечить поддержку Docker Registry V2 API для сканирования образов контейнеров в реестрах.
Только с принятием таких мер можно будет снизить количество выявленных атак и проблем с безопасностью, которые неизбежно появляются из-за интереса киберпреступников к любому новому и популярному инструменту для разработки ПО.

Михаил Кондрашин, технический директор Trend Micro в России и СНГ
Поделиться:
Заметили неточность или опечатку в тексте? Выделите её мышкой и нажмите: Ctrl + Enter. Спасибо!