Автор: Максим Ксенофонтов, эксперт по защите контейнерных сред и оркестраторов, “Лаборатория Касперского”
В центре нашего внимания – безопасная разработка и защита инфраструктуры, связанной с контейнерной средой и системами оркестрации. Под контейнерами мы будем понимать стандартные образы формата OCI или Docker, предназначенные для изолированного выполнения приложений в рамках Container Runtime Interface (CRI).
DevSecOps вырос из DevOps как ответ на необходимость встроенной безопасности в разработку. Со временем вопросы защиты инфраструктуры и эксплуатации оформились в самостоятельное направление – SecOps, где знание программирования уже не критично.
Зато в DevSecOps без этого никуда. Здесь требуются специалисты, которые одинаково хорошо ориентируются в коде, CI/CD-конвейерах, контейнерах, сетях, СУБД и системах контроля версий. Такой набор компетенций редко встречается у классических офицеров ИБ – чаще с задачами справляются профильные DevOps- или DevSecOps-инженеры. Помочь удержать все в фокусе призваны инструменты автоматизации: SAST и DAST решают задачи анализа кода, SCM-решения следят за цепочкой поставок, а платформы контейнерной безопасности берут на себя контроль уже развернутой инфраструктуры.
У контейнеров есть свой жизненный цикл. Он состоит из трех этапов, для каждого из которых есть свои риски и свои способы защиты:
Реестры – это централизованное хранилище образов, и их компрометация может привести к заражению всей инфраструктуры. Они бывают приватные (например, Harbor, Nexus, JFrog и т. д.) и публичные (Docker Hub, GitHub Container Registry и пр.). У каждой категории – свой набор рисков:
Вот некоторые базовые практические рекомендации, которые помогут снизить эти риски:
Следование этим рекомендациям поможет снизить риски на первом этапе жизненного цикла контейнеров. Но применять их стоит только после комплексного аудита, постепенно и осознанно, чтобы не нарушить выстроенные процессы разработки.
Рис. 1. Пример опасного образа в реестре в Kaspersky Container Security
CI/CD-конвейер автоматизирует сборку и доставку: здесь компилируется код, формируются образы, запускается развертывание в CRI и выполняются основные проверки безопасности. Однако стоит помнить: полноправный владелец этого процесса – DevOps-инженер. Он может обойти любую неуспешную проверку безопасности просто дописав в строке запуска сканирования "ignore_errors: true" или "|| true".
Это значит, что если безопасность целиком завязана на CI/CD, она становится ненадежной. Оптимальный подход – двухуровневый контроль: первичные проверки безопасности можно проводить в CI/CD, но результаты этих проверок необходимо хранить снаружи или делать дополнительную проверку.
Такой подход реализован, например, в Kaspersky Container Security: сканирование запускается в CI/CD, но результаты сохраняются вне конвейера – в Kaspersky Container Security. Перед развертыванием в оркестраторе KCS повторно проверяет образ на соответствие политикам, что снижает риски обхода.
Для CI/CD-конвейера можно выделить следующие основные риски:
Для закрытия данных рисков можно реализовать следующие меры:
Рис. 2. Пример сканирования образа в CI/CD-конвейере. Источник: Kaspersky Container Security
Если на этапах сборки и развертывания мы имеем дело со статичными образами, то в рантайме появляются уже "живые" сущности – контейнеры и поды. Их нужно защищать так же, как и обычные хосты, включая мониторинг в реальном времени. Контейнер, пусть даже минимальный, ведет себя как полноценная виртуальная машина: у него есть сеть, файловая система, память, CPU и консоль. Внутрь можно установить как системное, так и прикладное ПО – и все это нуждается в контроле.
Контейнеры несут два типа рисков:
В связи с этим меры защиты также делятся на два сценария:
Для первого сценария можно предложить следующие конкретные меры:
Это только базовые меры по контролю запуска пода, так как полный перечень мер довольно обширен, он сильно зависит от особенностей используемой инфраструктуры. Поэтому лучшим решением будет предварительное проведение аудита с дальнейшей консультацией по рекомендуемым мерам контроля и защиты.
Для защиты запущенных подов можно реализовать следующие меры защиты:
Защита рантайма и запущенных подов является более сложной задачей в техническом и организационном плане, поэтому и доступных для использования систем автоматизации значительно меньше. Для реализации части мер можно использовать, например, Falco. Защита сети может быть закрыта CNI-системами. Но для реализации всех мер защиты в одном решении лучшей практикой будет использование специализированных систем, например Kaspersky Container Security.
Контейнеризация и оркестрация – относительно новые области ИТ, со своими рисками и требованиями к безопасности. На старте экосистему защищали в основном Open Source-инструменты, созданные самими разработчиками. Со временем появились зрелые коммерческие продукты, такие как Aqua Security, Palo Alto Prisma Cloud и Kaspersky Container Security.
Вендорские решения предлагают комплексный подход: встроенные лучшие практики, регулярные обновления, техподдержку и развитие функциональности. Это снижает нагрузку на команду и повышает отдачу от инвестиций в ИБ. С учетом санкционных рисков Open Source-подходы становятся все менее жизнеспособны, а отечественные решения с продуманным интерфейсом позволяют эффективно работать даже без глубокой технической подготовки.