🕒 3 мин.
В этой статье описаны инструменты для сканирования образов 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 к этому сокету, чтобы он мог сканировать локальные образы.
По желанию, вы можете просканировать любой другой образ.
Вывод имеет формат таблицы с найденными уязвимостями и общей статистикой. Пример вывода не могу показать, так как он очень большой.
В моём случае было найденно:
- в
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 и trivy.
docker scan- Это не самостоятельный сканер, а обёртка, которая отправляет информацию об образе в облачный сервис Snyk.
- Требует интернет и авторизации в Docker Hub.
trivy- Это инструмент с открытым кодом, который работает локально.
- База уязвимостей загружается на компьютер (
~/.cache/trivy/db). - Анализирует образ полностью автономно, без отправки данных в облако.
Чем меньше образ, тем в нём меньше уязвимостей:
python:3.11-slim— основан на Debian и имеет больше уязвимостей;python:3.11-alpine— основан на Alpine и имеет меньше уязвимостей.
Если понравилась статья, подпишись на мой канал в VK или Telegram.