Анализ уязвимостей в Docker-изображении
На этом этапе мы научимся анализировать уязвимости в Docker-изображении с помощью Trivy. Trivy - это комплексный и универсальный сканер безопасности. Он может обнаруживать уязвимости в пакетах операционной системы (Alpine, RHEL, CentOS, Debian, Ubuntu и др.) и зависимостях приложений (Bundler, Composer, npm, yarn и др.). Кроме того, Trivy поддерживает различные цели сканирования, такие как контейнерные изображения, файловые системы и Git-репозитории.
Сначала давайте скачаем уязвимое Docker-изображение, которое мы будем использовать для анализа. Мы будем использовать изображение library/ubuntu:18.04
, о котором известно, что оно имеет некоторые уязвимости.
docker pull library/ubuntu:18.04
Вы должны увидеть вывод, указывающий на то, что изображение скачивается.
18.04: Pulling from library/ubuntu
...
Status: Downloaded newer image for ubuntu:18.04
docker.io/library/ubuntu:18.04
Теперь, когда у нас есть изображение, нам нужно установить Trivy. Поскольку Trivy не предустановлен в среде LabEx, мы скачаем и установим его. Мы скачаем последний релиз с официального GitHub-репозитория.
wget https://github.com/aquasecurity/trivy/releases/download/v0.50.1/trivy_0.50.1_Linux-64bit.deb
Эта команда скачивает Debian-пакет Trivy. Вы должны увидеть вывод, похожий на следующий:
--2023-10-27 08:00:00-- https://github.com/aquasecurity/trivy/releases/download/v0.50.1/trivy_0.50.1_Linux-64bit.deb
Resolving github.com (github.com)... 140.82.113.4
Connecting to github.com (github.com)|140.82.113.4|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/140000000/...?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=... [following]
--2023-10-27 08:00:00-- https://objects.githubusercontent.com/github-production-release-asset-2e65be/140000000/...
Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.110.133, ...
Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.108.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 50000000 (48M) [application/octet-stream]
Saving to: ‘trivy_0.50.1_Linux-64bit.deb’
trivy_0.50.1_Linux-64bit.deb 100%[=================================================>] 47.68M --.-MB/s in 0.5s
2023-10-27 08:00:01 (95.3 MB/s) - ‘trivy_0.50.1_Linux-64bit.deb’ saved [50000000/50000000]
Теперь установите скачанный пакет с помощью dpkg
.
sudo dpkg -i trivy_0.50.1_Linux-64bit.deb
Вы должны увидеть вывод, указывающий на процесс установки.
Selecting previously unselected package trivy.
(Reading database ... 100000 files and directories currently installed.)
Preparing to unpack trivy_0.50.1_Linux-64bit.deb ...
Unpacking trivy (0.50.1) ...
Setting up trivy (0.50.1) ...
После установки Trivy мы можем теперь сканировать Docker-изображение library/ubuntu:18.04
на наличие уязвимостей.
trivy image library/ubuntu:18.04
Trivy начнет сканировать изображение. Это может занять несколько моментов, так как он загружает базы данных уязвимостей и анализирует слои изображения. Вы увидите вывод, показывающий прогресс, а затем подробный отчет о найденных уязвимостях.
2023-10-27T08:00:05.000+0000 INFO Need to update DB
2023-10-27T08:00:05.000+0000 INFO Downloading DB...
...
2023-10-27T08:00:10.000+0000 INFO Detected OS: ubuntu
2023-10-27T08:00:10.000+0000 INFO Detecting Ubuntu vulnerabilities...
...
library/ubuntu:18.04 (ubuntu 18.04)
===================================
Total: 100 (UNKNOWN: 0, LOW: 50, MEDIUM: 30, HIGH: 15, CRITICAL: 5)
┌───────────────────────────────────────────────────┬─────────────────────────────────┬──────────┬───────────────────┬───────────────────────────────────────────────────────────┐
│ Library/Package │ Vulnerability │ Severity │ Installed Version │ Fixed Version │
├───────────────────────────────────────────────────┼─────────────────────────────────┼──────────┼───────────────────┼───────────────────────────────────────────────────────────┤
│ apt │ CVE-YYYY-XXXX │ HIGH │ 1.6.12 │ 1.6.14 │
│ ... │ ... │ ... │ ... │ ... │
└───────────────────────────────────────────────────┴─────────────────────────────────┴──────────┴───────────────────┴───────────────────────────────────────────────────────────┘
Вывод содержит сводку о найденных уязвимостях, категорированных по уровню серьезности (UNKNOWN, LOW, MEDIUM, HIGH, CRITICAL). Затем он перечисляет каждую уязвимость с деталями, такими как затронутый пакет, идентификатор уязвимости (например, CVE-YYYY-XXXX), уровень серьезности, установленная версия пакета и исправленная версия, если она доступна. Этот отчет помогает вам понять безопасность вашего Docker-изображения и определить области, которые требуют устранения.