Представьте: вы скачали готовый образ с Docker Hub, запустили контейнер, и вдруг ваш сервер становится частью ботнета. Как этого избежать?
Рассказываем 3 простых способа сканирования образов
1.Trivy - сканер для ленивых (но эффективный)

Почему его любят:
-
Работает из коробки (не надо ничего настраивать)
-
Проверяет не только пакеты, но и конфиги (например, утечки паролей)
-
Можно запустить одной командой
Как использовать:
# Установка (Linux/macOS)curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin
# Сканирование образа
trivy image ваш-образ:тег
Пример вывода:
python:3.9 (debian 11.6)
========================
Total: 42 (CRITICAL: 5, HIGH: 12)
libssl1.1 — уязвимость (CVE-2022-4304)
Нужно обновить базовый образ!
2.Docker Scout - встроенный сканер от Docker
Плюсы:
-
Интегрирован прямо в Docker Desktop (не нужны отдельные инструменты)
-
Показывает «уровень здоровья» образа
Как включить:
-
Обновите Docker Desktop
-
В CLI выполните:
docker scout quickview ваш-образ:тег
Что увидите:
-
Список уязвимостей с критичностью.
-
Советы по исправлению (например, «используй образ с alpine вместо debian»)
3. GitHub Dependabot - автоматический мониторинг
Для тех, кто хранит Dockerfile в GitHub:
-
Добавьте файл .github/dependabot.yml:
yaml
version: 2
updates:
- package-ecosystem: "docker"
directory: "/"
schedule:
interval: "daily"
Теперь GitHub будет:
-
Автоматически проверять образы в ваших репозиториях
-
Присылать PR с обновлениями, если найдёт уязвимости
Рассказываем о 3 правилах безопасности:
-
Не используйте latest теги, а фиксируйте версии (python: 3:9:18)
-
Удаляйте ненужные пакеты: чем меньше софта в образе, тем меньше дыр
-
Регулярно обновляйте базовые образы, старый alpine: 3.12 сегодня опасен!
Теперь вы знаете, как сканировать образы на уязвимости, но что делать с результатами? Как минимизировать риски? Сейчас разберём продвинутые лайфхаки для параноиков (в хорошем смысле)!
Что делать, если сканер нашёл уязвимости?
Вариант для ленивых: просто обновите базовый образ
Проблема: 90% уязвимостей - это старые пакеты в базовом образе (debian:old, alpine:3.12)
Решение:
dockerfile
# Было (опасно!)
FROM python:3.9
# Стало (безопаснее)
FROM python:3.9.18-bookworm # или alpine:3.19
Почему работает:
-
Новые версии образов содержат исправления для известных CVE.
Вариант для перфекционистов: «собери свой» минимальный образ
Проблема: Официальные образы часто содержат лишние пакеты (например, curl в продакшн-образе, зачем?).
Решение:
dockerfile
# Многослойный билд + только нужные пакеты
FROM python:3.9-slim as builder
# Устанавливаем только необходимые зависимости
RUN pip install --no-cache-dir Flask gunicorn
# Финальный образ (минимум софта)
FROM gcr.io/distroless/python3-debian11
COPY --from=builder /usr/local/lib/python3.9 /usr/local/lib/python3.9
CMD ["app.py"]
Плюсы:
-
Distroless или scratch - образы без shell и лишних пакетов
-
Даже если уязвимость есть, эксплуатировать её сложнее
Вариант для параноиков: подпись образов (cosign + Sigstore)
Проблема: В Docker Hub можно выложить образ с малварью под видом легального.
Решение:
-
Генерируем ключ:
cosign generate-key-pair
-
Подписываем образ:
cosign sign --key cosign.key ваш-образ:тег
-
Проверяем перед запуском:
cosign verify --key cosign.pub ваш-образ:тег
Зачем это нужно:
-
Гарантия, что образ не подменили при загрузке.
-
Используется в Kubernetes для admission control.
Продвинутые инструменты: что еще попробовать?
|
Инструмент |
Для чего |
Команда/Пример |
|
Grype |
Сканирование локальных образов |
grip ваш-образ |
|
Clair |
Мониторинг уязвимостей в CI/CD |
Интеграция с GitLab |
|
Anchore |
Политики безопасности (например, запрет образов с критичными CVE) |
anchor-cli evaluate check ваш-образ |
Главное правило безопасности - «Лучше потратить 10 минут на сканирование, чем 10 часов на восстановление после взлома».
Что делать прямо сейчас:
-
Просканируйте свои продакшн-образы:
bash
trivy image --severity CRITICAL ваш-образ:тег
-
Настройте автоматическое сканирование в CI (например, через GitHub Actions).
А вы проверяете свои образы? Если да, то каким инструментом пользуетесь? Делитесь в комментах! :-)
Автор: Up4Soft
