Найти в Дзене
Linux | Network | DevOps

Container security начинается не в проде, а в Dockerfile

В этой статье описаны инструменты для сканирования образов Docker на уязвимости: docker scan и trivy. Но основное внимание уделено именно trivy. Выявлять уязвимости в Docker-образах можно с помощью команды docker scan. Это инструмент от Docker, который интегрирован с Snyk (система анализа уязвимостей). Данная система: Устанавливается этот инструмент как дополнительный плагин Docker: $ sudo apt install docker-scan-plugin Но для работы требует авторизацию в Docker Hub и использование двух-факторной авторизации. Поэтому мы будем использовать другой инструмент. Можно использовать альтернативу — инструмент trivy. Его можно установить на хост с помощью apt, но я буду запускать официальный контейнер trivy из Docker Hub. Про trivy можете почитать здесь — https://github.com/aquasecurity/trivy. Если вкратце то это сканер уязвимостей и misconfigurations (неправильной конфигурации, которая может привести к взлому). Trivy умеет сканировать не только Docker контейнеры, а также Kubernetes, образы в
Оглавление

В этой статье описаны инструменты для сканирования образов Docker на уязвимости: docker scan и trivy. Но основное внимание уделено именно trivy.

docker scan

Выявлять уязвимости в Docker-образах можно с помощью команды

docker scan. Это инструмент от Docker, который интегрирован с Snyk (система анализа уязвимостей). Данная система:

  • Сканирует образ на наличие CVE (уязвимостей);
  • Показывает уровень опасности;
  • Предлагает пути исправления;
  • Работает как с локальными образами, так и с образами из Docker Hub.

Устанавливается этот инструмент как дополнительный плагин Docker:

$ sudo apt install docker-scan-plugin

Но для работы требует авторизацию в Docker Hub и использование двух-факторной авторизации. Поэтому мы будем использовать другой инструмент.

trivy

Можно использовать альтернативу — инструмент trivy. Его можно установить на хост с помощью apt, но я буду запускать официальный контейнер trivy из Docker Hub.

Про trivy можете почитать здесь — https://github.com/aquasecurity/trivy. Если вкратце то это сканер уязвимостей и misconfigurations (неправильной конфигурации, которая может привести к взлому). Trivy умеет сканировать не только Docker контейнеры, а также Kubernetes, образы виртуальных машин, репозитории кода и другое. Официальный сайт — https://trivy.dev/.

У меня есть 4 файла: из статьей Docker Compose — установка и базовое использование и Продвинутые инструкции в Dockerfile:

$ ls -l

итого 16

-rw-r--r-- 1 alex alex 1220 янв 29 17:35 app.py

-rw-r--r-- 1 alex alex 1401 янв 29 17:05 docker-compose.yml

-rw-r--r-- 1 alex alex 438 янв 29 17:35 Dockerfile

-rw-r--r-- 1 alex alex 48 янв 15 12:44 requirements.txt

И с помощью Dockerfile у меня создался образ docker_compose-web:latest

$ docker images | grep web

WARNING: This output is designed for human readability. For machine-readable output, please use --format.

docker_compose-web:latest a9f3c3ba5e9e 224MB 55MB

Вот так с помощью trivy мы можем просканировать этот образ:

$ docker run --rm -v /var/run/docker.sock:/var/run/docker.sock aquasec/trivy \

image docker_compose-web:latest

  • /var/run/docker.sock — Это сокет, через который Docker общается с Docker демоном (движком). Он находится на хосте и даёт доступ к Docker API. Когда мы пишем docker ps, отправляется запрос через этот сокет. Таким образом мы даём доступ контейнеру Trivy к этому сокету, чтобы он мог сканировать локальные образы./var/run/docker.sock

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

Вывод имеет формат таблицы с найденными уязвимостями и общей

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

В моём случае было найдено:

  • вdocker_compose-web:latest (debian 13.3)— 136 всего уязвимостей, из них 3 критических:;
  • Total: 103 (UNKNOWN: 0, LOW: 51, MEDIUM: 41, HIGH: 8, CRITICAL: 3)
  • вPython (python-pkg)— 5 уязвимостей, из них 3 с высоким уровнем опасности:.
  • Total: 5 (UNKNOWN: 0, LOW: 1, MEDIUM: 1, HIGH: 3, CRITICAL: 0)

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

openssl — CVE-2025-15467. Которая уже исправлена в более свежей версии (

3.5.4-1~deb13u2). Возможно, если я обновлю образ, то эта уязвимость пропадёт.

Сравнение docker scan и trivy

  • docker scan

Это не самостоятельный сканер, а обёртка, которая отправляет информацию об образе в облачный сервис Snyk.

Требует интернет и авторизации в Docker Hub.

  • trivy

Это инструмент с открытым кодом, который работает локально).

База уязвимостей загружается на компьютер (~/.cache/trivy/dbАнализирует образ полностью автономно, без отправки данных в облако.

Чем меньше образ, тем в нём меньше уязвимостей:

python:3.11-slim — основан на Debian и имеет больше уязвимостей;

python:3.11-alpine — основан на Alpine и имеет меньше уязвимостей.