Docker: исправление уязвимостей образов с помощью Trivy и Copa
Образы контейнеров Docker часто содержат уязвимости безопасности, унаследованные от базовых пакетов операционной системы. Вместо того чтобы пересобирать образы с нуля, вы можете использовать Trivy для сканирования уязвимостей и Copa для их прямого исправления. В этом руководстве показано, как выявлять и устранять уязвимости контейнеров в системах Ubuntu, Debian, RHEL, CentOS и Fedora с помощью этих двух мощных открытых инструментов.
В этом руководстве вы узнаете:
- Как установить сканер уязвимостей Trivy на Ubuntu/Debian
- Как установить инструмент для патчирования контейнеров Copa
- Как сканировать образы Docker на наличие уязвимостей ОС
- Как автоматически исправлять уязвимости контейнера
- Как проверить, что исправленные изображения не содержат уязвимостей
Краткое содержание статьи: Сканируйте Docker-образы на наличие уязвимостей с помощью Trivy и автоматически исправляйте их с помощью Copa.
| Шаг | Команда/Действие |
|---|---|
| 1. Сканировать изображение | |
| 2. Экспортировать JSON-отчет | |
| 3. Запустить BuildKit | |
| 4. Изображение патча | |
Шаг 1: Установите сканер уязвимостей Trivy
Trivy — это открытый сканер уязвимостей, разработанный компанией Aqua Security. Он обнаруживает уязвимости в пакетах ОС, зависимостях приложений и образах контейнеров.
Ubuntu/Debian
-
Установите зависимости: Сначала установите пакеты wget и gnupg, необходимые для добавления репозитория:
$ sudo apt-get install wget gnupg -y Добавьте GPG-ключ Trivy: Скачайте и добавьте ключ подписи репозитория Trivy:
$ wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | gpg --dearmor | sudo tee /usr/share/keyrings/trivy.gpg > /dev/nullДобавьте репозиторий Trivy: добавьте официальный репозиторий Trivy в свой список источников:
$ echo "deb [signed-by=/usr/share/keyrings/trivy.gpg] https://aquasecurity.github.io/trivy-repo/deb generic main" | sudo tee -a /etc/apt/sources.list.d/trivy.listУстановите Trivy: обновите список пакетов и установите Trivy:
$ sudo apt-get update $ sudo apt-get install trivy -y
RHEL/CentOS/Fedora
Добавьте репозиторий Trivy: создайте файл репозитория Trivy:
# sudo tee /etc/yum.repos.d/trivy.repo << 'EOF' [trivy] name=Trivy repository baseurl=https://aquasecurity.github.io/trivy-repo/rpm/releases/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://aquasecurity.github.io/trivy-repo/rpm/public.key EOFУстановите Trivy: Используйте dnf или yum для установки:
# sudo dnf install trivy -y
Проверьте установку, проверив версию:
$ trivy --versionШаг 2: Установите утилиту Copa Patching
Copa (Copacetic) — это проект CNCF в стадии песочницы, который напрямую исправляет образы контейнеров без необходимости полной пересборки. Он использует отчёты об уязвимостях от сканеров, таких как Trivy, для применения обновлений безопасности. Copa распространяется как один исполняемый файл, который работает на всех дистрибутивах Linux.
Скачать бинарный файл Copa: Получите предварительно скомпилированный бинарный файл на официальной странице релизов Copa на GitHub:
$ wget https://github.com/project-copacetic/copacetic/releases/download/v0.9.0/copa_0.9.0_linux_amd64.tar.gzРаспакуйте архив: Разархивируйте загруженный tar-файл:
$ tar -xzf copa_0.9.0_linux_amd64.tar.gz-
Установите Copa: Переместите бинарный файл в ваш системный путь:
$ sudo mv copa /usr/local/bin/ Проверка установки: Подтвердите, что Copa установлена правильно:
$ copa --version
Шаг 3: Сканирование образа контейнера на наличие уязвимостей
Прежде чем применять патчи, необходимо выявить уязвимости в вашем образе контейнера. В следующих шагах используется linuxconfig/instantprivacy в качестве примера — замените его на имя вашего собственного образа.
Загрузите образ контейнера: Скачайте образ, который хотите просканировать:
$ sudo docker pull linuxconfig/instantprivacyСканирование на наличие уязвимостей: Запустите Trivy, чтобы проверить наличие уязвимостей на уровне ОС. Флаг
--ignore-unfixedисключает уязвимости, для которых нет доступных исправлений:$ sudo trivy image --vuln-type os --ignore-unfixed linuxconfig/instantprivacyЭкспорт отчета в формате JSON: Copa требует результаты сканирования в формате JSON:
$ trivy image --vuln-type os --ignore-unfixed -f json -o instantprivacy.json linuxconfig/instantprivacy
Шаг 4: Обновление образа контейнера с помощью Copa
Copa использует BuildKit для применения исправлений к образам контейнеров.
Запустить контейнер BuildKit: Запустите BuildKit как контейнер с привилегиями:
$ sudo docker run --detach --rm --privileged \ -p 127.0.0.1:8888:8888/tcp \ --name buildkitd \ --entrypoint buildkitd \ moby/buildkit:v0.11.4 \ --addr tcp://0.0.0.0:8888-
Проверьте, запущен ли BuildKit: Убедитесь, что контейнер запустился успешно:
$ sudo docker ps Обновите образ контейнера: Используйте Copa для применения исправлений безопасности. Флаг
-tуказывает тег для обновленного образа:$ sudo copa patch \ -i docker.io/linuxconfig/instantprivacy \ -r instantprivacy.json \ -t patched \ -a tcp://0.0.0.0:8888Copa загружает обновления безопасности и создает новый слой образа с примененными исправлениями. Обновленный образ будет помечен как
linuxconfig/instantprivacy:patched.
Шаг 5: Проверка исправленного изображения
Просканируйте исправленное изображение: Убедитесь, что все уязвимости устранены:
$ sudo trivy image --vuln-type os --ignore-unfixed linuxconfig/instantprivacy:patchedПроверьте исправленное изображение: Убедитесь, что исправленное изображение работает правильно:
$ sudo docker run --name=instantprivacy -d -p 8118:8118 linuxconfig/instantprivacy:patched $ export http_proxy="http://localhost:8118" $ curl api.ipify.org 45.84.107.174Очистка: Остановите контейнер BuildKit после завершения:
$ sudo docker stop buildkitd
Заключение
Вы успешно просканировали образ контейнера Docker на наличие уязвимостей с помощью Trivy и автоматически устранили их с помощью Copa. Этот подход быстрее, чем полная перестройка образов, и добавляет лишь один слой исправления, сохраняя структуру исходного образа. Для производственных сред интегрируйте эти инструменты в вашу CI/CD-пайплайн, чтобы автоматически сканировать и исправлять образы контейнеров перед развертыванием. Для получения дополнительной информации обратитесь к официальной документации Trivy и веб-сайту проекта Copa.
Часто задаваемые вопросы
- Какие типы уязвимостей может исправить Copa? Copa исправляет только уязвимости на уровне пакетов ОС (например, пакеты Debian, Ubuntu, Alpine или RHEL). Она не может исправлять зависимости на уровне приложений, такие как npm-пакеты, модули Python pip или модули Go. Для этого необходимо пересобрать приложение с обновлёнными зависимостями.
- Почему мне нужен BuildKit для запуска Copa? Copa использует возможности diff и merge BuildKit для создания нового слоя образа, содержащего только исправленные файлы. BuildKit работает как контейнер с привилегиями и обрабатывает низкоуровневую манипуляцию образами. Без BuildKit Copa не сможет применять патчи к файловой системе контейнера.
- Могу ли я патчить изображения из приватных реестров? Да, Copa поддерживает приватные реестры. Необходимо авторизоваться с помощью
docker loginперед запуском команды патча. Copa использует ваши учетные данные Docker для получения базового изображения и, при необходимости, отправки патченого результата. - Что произойдет, если Copa не сможет исправить все уязвимости? Некоторые уязвимости могут еще не иметь доступных исправлений. Флаг
--ignore-unfixedв Trivy исключает их из отчета. Copa исправит все, для чего есть доступные патчи. Запустите Trivy снова без--ignore-unfixed, чтобы увидеть все уязвимости, включая те, которые ожидают исправления. - Как обновить Copa до последней версии? Скачайте последнюю версию с страницы релизов Copa на GitHub и замените бинарный файл в
/usr/local/bin/. Проверьте текущую версию с помощьюcopa --version.





