Trivy: Комплексный сканер уязвимостей для Docker, Linux и CI/CD
В современной инфраструктуре, основанной на контейнерах и пакетах Linux, вопрос безопасности становится одним из приоритетных. Доверие к образам из публичных репозиториев или к пакетам в дистрибутивах может быть обманчивым: значительная часть образов на Docker Hub содержит критические уязвимости, а устаревшие пакеты Linux могут скрывать десятки известных CVE.
Trivy — это мощный и простой в использовании сканер уязвимостей, разработанный компанией Aqua Security. Он позволяет быстро и эффективно проверять Docker-образы, работающие контейнеры, файловые системы Linux, а также папки с исходным кодом на наличие известных уязвимостей. Trivy не требует сложной настройки, предоставляет детальную информацию о проблемах (включая версии пакетов и ссылки на исправления) и может быть легко интегрирован в процессы разработки и развертывания.
Установка Trivy
Установка Trivy выполняется всего одной командой:
Linux/macOS (через curl)
curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin
Или через пакетный менеджер
sudo apt install trivy # Debian/Ubuntu (есть в репозиториях)
sudo pacman -S trivy # Arch Linux
sudo dnf install trivy # Fedora/RHEL 9+
Преимущества Trivy
- Нулевая настройка: Запуск сканирования не требует предварительной конфигурации.
- Широкий спектр проверок: Сканирует Docker-образы, конфигурации Kubernetes, пакеты операционных систем (APT, RPM, APK), а также зависимости популярных языков (npm, pip, Go modules и другие).
- Актуальная база данных уязвимостей: При каждом запуске Trivy автоматически загружает свежие данные об уязвимостях.
- Высокая производительность: Работает быстро, что делает его идеальным для интеграции в CI/CD конвейеры.
Недостатки Trivy
- Первоначальная загрузка базы: При первом запуске требуется скачать базу данных уязвимостей (около 100 МБ).
- Зависимость от интернета: Для обновления базы данных требуется доступ к сети (хотя предусмотрен и офлайн-режим).
- Возможные ложные срабатывания: Как и любой сканер, Trivy может иногда выдавать ложные положительные результаты (false positives).
Примеры использования Trivy
Trivy позволяет проверять различные объекты инфраструктуры. Ниже приведены наиболее распространённые сценарии использования.
1. Сканирование Docker-образов
Это один из наиболее частых сценариев, позволяющий выявлять уязвимости до развертывания контейнера.
Проверка образа из публичного репозитория:
trivy image nginx:latest
Проверка локально собранного образа:
docker build -t myapp .
trivy image myapp
Сканирование с фильтрацией только по критическим уязвимостям:
trivy image --severity CRITICAL myapp
2. Сканирование файловой системы
Используется для проверки установленных пакетов на живых серверах или для анализа конкретных директорий.
Проверка установленных пакетов в Ubuntu/Debian:
trivy fs --security-checks vuln /
Проверка определенной папки с зависимостями Python:
trivy fs ./venv/lib/python3.9/site-packages/
3. Сканирование запущенных контейнеров
Позволяет оперативно выявлять уязвимости в уже работающих контейнерах.
docker ps -q | xargs -I {} trivy image --input /var/lib/docker/image/overlay2/repositories.json
Пример вывода Trivy
Ниже представлен сокращенный пример отчета Trivy после сканирования Docker-образа nginx:latest.
nginx:latest (debian 11.7)
===========================
Total: 56 (UNKNOWN: 0, LOW: 32, MEDIUM: 15, HIGH: 7, CRITICAL: 2)
+-------------------+------------------+----------+-----------------------+--------------------------------+
| LIBRARY | VULNERABILITY ID | SEVERITY | INSTALLED VERSION | FIXED VERSION |
+-------------------+------------------+----------+-----------------------+--------------------------------+
| libgnutls30 | CVE-2023-0361 | HIGH | 3.7.1-5 | 3.7.1-5+deb11u3 |
| openssl | CVE-2022-4304 | MEDIUM | 1.1.1n-0+deb11u4 | 1.1.1n-0+deb11u5 |
+-------------------+------------------+----------+-----------------------+--------------------------------+
Интеграция с CI/CD: Автоматизация проверок
Одной из ключевых особенностей Trivy является возможность его интеграции в конвейеры CI/CD для автоматической проверки безопасности. Параметр --exit-code позволяет задать код выхода, отличный от нуля, если найдены уязвимости определенного уровня или выше.
trivy image --exit-code 1 --severity HIGH,CRITICAL myapp
В этом случае, если Trivy обнаружит уязвимости уровня HIGH или CRITICAL, процесс завершится с ошибкой (exit code 1), что приведет к провалу этапа CI/CD. Это гарантирует, что образы с неприемлемыми уязвимостями не будут развернуты в production, пока проблемы не будут устранены.
Заключение
Trivy представляет собой незаменимый инструмент для любого специалиста по DevOps, системного администратора или разработчика, стремящегося обеспечить безопасность своих контейнерных приложений и инфраструктуры Linux. Его простота использования, высокая скорость работы и возможность интеграции в автоматизированные процессы делают его мощным средством для раннего выявления и устранения уязвимостей, предотвращая потенциальные инциденты безопасности.
Официальный репозиторий проекта на GitHub: https://github.com/aquasecurity/trivy