Безопасность контейнеров и облачной инфраструктуры
Контейнеры и облачная инфраструктура создают риски, которые традиционные подходы к безопасности приложений не покрывают. Docker-образ содержит уязвимую версию системной библиотеки, унаследованную от базового образа. Хранилище объектов открыто на чтение всем желающим, потому что разработчик настроил это «временно для теста». У сервисного аккаунта в облаке права администратора на весь проект, хотя он использовался только для одной задачи.
Эти ошибки конфигурации — первое, что ищут атакующие. Их не нужно «взламывать» в классическом смысле: достаточно найти открытый ресурс и воспользоваться им. Хорошая новость — их же первыми находят автоматические инструменты, если внедрить регулярное сканирование.
Лидер безопасности — сотрудник, который берёт на себя вопросы информационной безопасности в команде как дополнительную зону ответственности, — должен выстроить этот процесс. Задача руководителя — убедиться, что процесс работает, и знать, что именно проверять.
Почему это важно для бизнеса
Контейнеры скрывают уязвимости. Когда команда берёт стандартный базовый образ (Node, Python, Java), вместе с ним приходит целый дистрибутив Linux с сотнями пакетов. Любой из этих пакетов может содержать известные уязвимости. Компания не писала этот код — но отвечает за безопасность всего, что работает в её инфраструктуре.
Настройки облака по умолчанию не безопасны. Российские облачные провайдеры — Yandex Cloud, VK Cloud, Cloud.ru, Selectel — как и их зарубежные аналоги, оптимизируют настройки по умолчанию под скорость запуска, а не под безопасность. Разработчик, который разворачивает ресурс быстро и без глубокого знания политик доступа, почти наверняка оставит что-то открытым.
Маленькие команды не проверяют конфигурацию дважды. В стартапе никто не делает code review для Terraform-конфигурации. Изменения в инфраструктуре уходят сразу в продакшн. Автоматическое сканирование — единственная страховочная сетка.
Kubernetes добавляет сложность. Настройки Kubernetes по умолчанию разработаны для быстрого старта, а не для безопасной работы. Без явной настройки политик безопасности любой pod в кластере может взаимодействовать с любым другим, а контейнеры работают с правами root.
Интернет сканируется непреры вно. Автоматические боты обходят весь интернет и находят открытые базы данных, публичные хранилища объектов и незащищённые API за считаные часы после их появления. Ошибочно открытый ресурс будет обнаружен — вопрос только когда.
Безопасность контейнеров
Принципы построения безопасных образов
Команда должна следовать этим правилам при создании Docker-образов. Это не разовая акция, а стандарт, который лидер безопасности закрепляет как обязательный.
Минимальные базовые образы. Alpine Linux вместо полного Ubuntu/Debian — во много раз меньше пакетов, во много раз меньше потенциальных уязвимостей. Образы «distroless» от Google идут ещё дальше: в них только приложение и его зависимости, без shell, без пакетного менеджера — даже если атакующий проникнет в контейнер, у него не будет инструментов для дальнейших действий.
Фиксированные версии образов. Тег latest означает «что угодно в данный момент» — образ меняется без предупреждения. Для воспроизводимых и контролируемых сборок используются явные версии: python:3.12.3-alpine3.19, а не python:latest.
Запрет на запуск от имени root. Процессы в контейнере, работающие от имени root, при определённых конфигурациях могут получить доступ к хост-системе. Каждый образ должен создавать непривилегированного пользователя и запускать приложение от его имени.
Многоэтапные сборки. Инструменты сборки (компиляторы, тестовые зависимости) не должны попадать в продакшн-образ. Многоэтапные сборки оставляют в финальном образе только то, что нужно для работы приложения.
Секреты не в образах. Пароли, API-ключи и сертификаты не должны быть встроены в Dockerfile или образ. Они передаются через переменные окружения или механизмы управления секретами (Пассворк, Vault) в момент запуска контейнер а.
Сканирование образов на уязвимости
Выстроить сканирование — одна из первых задач лидера безопасности в области контейнерной безопасности.
Что должно происходить: каждый Docker-образ, прежде чем попасть в продакшн, проверяется на известные уязвимости. Если найдены критические — деплой блокируется. Если найдены важные (high) — создаётся задача с конкретным дедлайном.
Инструменты:
Trivy (open-source, Apache 2.0) — стандартный инструмент для сканирования контейнерных образов. Проверяет пакеты ОС, зависимости языков программирования и конфигурационные файлы. Легко встраивается в любой CI/CD пайплайн. Для небольших команд без выделенной ИБ-функции — оптимальный выбор.
Luntry — российская платформа безопасности контейнеров. Сканирование образов, анализ времени выполнения (runtime security), контроль политик для Kubernetes. Подходит компаниям с требованиями к российским средствам защиты информации.
PT Container Security (Positive Technologies) — российское решение корпоративного класса. Глубокий анализ образов, обнаружение угроз в runtime, интеграция с российскими SIEM-системами. Сертифицировано ФСТЭК России.
Для большинства компаний начать стоит с Trivy в CI/CD — это бесплатно и решает основную задачу. При наличии требований к сертифицированным СЗИ или необходимости глубокого runtime-мониторинга — рассматривать Luntry или PT Container Security.
Как должен выглядеть процесс:
- Разработчик отправляет код на сборку
- CI/CD система собирает Docker-образ
- Автоматически запускается сканирование
- Если найдены уязвимости критического уровня — сборка падает, деплой не происходит
- Разработчик получает отчёт: что найдено, в каком пакете, есть ли исправленная версия
- После устранения — повторная сборка и повторное сканирование
Сканирование нужно запускать не только при сборке, но и по расписанию для уже развёрнутых образов: новые уязвимости появляются в известных пакетах постоянно, даже если код приложения не менялся.
Реестр образов
Тянуть образы напрямую с Docker Hub без проверки — это риск. Нужен приватный реестр с контролем доступа.
Что должен обеспечивать реестр:
- Автоматическое сканирование при загрузке образа
- Контроль доступа: только CI/CD-сервисные аккаунты могут загружать образы, разработчики — только скачивать
- Неизменяемые теги: нельзя перезаписать существующий тег (защита от подмены образа)
- Журнал всех операций загрузки и скачивания
- Политики хранения: автоматическое удаление устаревших неподписанных образов
Для российской инфраструктуры: реестр разворачивается на собственных серверах (Harbor, Nexus) или используется как сервис в рамках Yandex Cloud (Yandex Container Registry), VK Cloud или других провайдеров.
Подписание образов
После атак на цепоч ку поставок программного обеспечения (supply chain attacks) стал актуален вопрос: откуда в продакшн попал этот образ и был ли он изменён после сборки?
Подписание образов (с помощью Cosign или аналогичных инструментов) решает три задачи:
- Образ не был изменён после сборки
- Он был создан именно вашим CI/CD-пайплайном, а не подброшен извне
- В продакшн можно развернуть только подписанные образы
Лидер безопасности настраивает подписание как часть CI/CD и политику в кластере Kubernetes или реестре, которая блокирует запуск неподписанных образов.
Мониторинг времени выполнения
Сканирование образов перехватывает известные уязвимости. Но что происходит, когда контейнер уже запущен?
Инструменты runtime security отслеживают поведение запущенных контейнеров и сигнализируют об аномалиях:
- В контейнере запустилась shell-сессия (атакующий получил интерактивный доступ)
- Процесс пытается прочитать системные файлы, к которым не должен иметь доступа
- Контейнер устанавливает соединение с нетипичными внешними адресами
- Запустился процесс, похожий на майнер криптовалюты
- Попытка повышения привилегий
Для российских компаний с требованиями к средствам защиты — Luntry или PT Container Security с их runtime-возможностями. Для компаний без жёстких требований к сертификации — open-source Falco (Apache 2.0), де-факто стандарт в этой области.
Безопасность Kubernetes
Если приложение работает в Kubernetes — Deckhouse, Штурвал, Nova, Yandex Managed Kubernetes, VK Cloud Kubernetes или другой платформе — нужна отдельная настройка безопасности кластера.