Контроль целостности — совокупность механизмов проверки контейнеров для обеспечения безопасности и их соответствия заданной конфигурации.

В Deckhouse Virtualization Platform (DVP) реализован контроль целостности системных контейнеров и контейнеров пользовательских приложений. Он работает:

  • при запуске контейнеров;
  • во время работы контейнеров.

Контроль целостности системных контейнеров

Контроль целостности системных контейнеров включает:

  • проверку подписи при загрузке образов и старте контейнеров;
  • обеспечение неизменяемости контейнеров при запуске и во время работы.

Контроль целостности системных контейнеров в DVP

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

Проверка подписи выполняется для системных контейнеров, запускаемых в пространствах имен d8-* и kube-system.

Подписывание образов системных контейнеров DVP работает на базе модуля delivery-kit по принципу прикреплённой подписи (attached signature). Подпись добавляется в манифест образа в аннотации io.deckhouse.delivery-kit.signature.

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

Обеспечение неизменяемости системных контейнеров

Неизменяемость системных контейнеров при запуске и во время работы достигается за счет следующих мер:

  • Использование в контейнерном рантайме (CRI) containerd v2 снапшоттера EROFS-snapshotter вместо OverlayFS. EROFS-snapshotter преобразует каждый слой OCI-образа в формат EROFS: слои становятся не директориями, а файлами, содержащими контент. Это позволяет сделать каждый слой неизменяемым (immutable): заменить что-либо в существующем контейнере уже не получится.
  • Отказ от подключения слоя upperdir с правами на чтение и запись (RW, read-and-write). При сборке образа создается стандартный слой где собраны общеупотребимые точки монтирования (/tmp, /etc/resolv.conf и т. д.). Этот слой доступен только для чтения (RO, read-only). Он подключается автоматически ко всем создаваемым из образа контейнерам.
  • Использование механизма контроля DM-Verity. DM-Verity — это компонент ядра Linux, который позволяет делать проверки «на лету», чтобы убедиться что данные на диске не были изменены за пределами контролируемого процесса. На этапе сборки Deckhouse Delivery Kit рассчитывает контрольную сумму DM-Verity для каждого слоя образа и добавляет ее в качестве аннотации слоя в манифесте OCI. Containerd при разворачивании образа включает контроль DM-Verity и сверяет полученную контрольную сумму с контрольной суммой из манифеста. При работе контейнера проверяется наличие метки DM-Verity на EROFS-слоях, а хеш для DM-Verity сверяется с тем, который указан в подписанном манифесте образа.

Контроль целостности контейнеров пользовательских приложений

В DVP реализован контроль целостности контейнеров пользовательских приложений при запуске и во время работы.

Контроль целостности контейнеров пользовательских приложений в DVP

Контроль целостности при запуске контейнеров пользовательских приложений

DVP обеспечивает контроль целостности контейнеров приложений на уровне CRI.

После скачивания образа приложения DVP проверяет его целостность, сверяя хеш-сумму SHA-256. Запуск контейнера возможен только при успешной проверке контрольной суммы.

Последовательность контроля целостности при запуске:

  1. Загрузка образа в локальное хранилище узла.
  2. Извлечение метаданных образа, включая хеш-сумму SHA-256.
  3. Верификация SHA-256 путем сравнения с эталонной.
  4. Если хеш совпадает, проверка пройдена. Если хеш не совпадает, образ не запускается.

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

Контроль целостности работающих контейнеров пользовательских приложений

Аудит событий безопасности в DVP включает в себя анализ событий ядра Linux и аудита событий Kubernetes API. Это позволяет отслеживать, что приложения в подах работают в неизменном виде, соответствуют ожидаемому состоянию и не были модифицированы.

Для аудита используются:

  • встроенные правила;
  • пользовательские правила, которые можно добавлять с использованием синтаксиса условий Falco.

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

Подробнее о настройках аудита безопасности — в разделе «Аудит событий безопасности».