В современной инфраструктуре, основанной на контейнерах и пакетах 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