15.6. Проверка уязвимостей в контейнерах
15.6.1. Сканер уязвимостей OpenSCAP
В состав операционной системы МСВСфера входит инструмент для автоматизированного управления уязвимостями OpenSCAP, который в том числе может использоваться и для выявления уязвимостей в образах Docker-контейнеров.
Предварительные требования:
Необходимо установить пакет
openscap-utils
, в состав которого входит утилитаoscap-docker
, используемая для проверки образов контейнеров:$ sudo dnf install openscap-utils
Пользователю, который будет выполнять проверку, необходимо предоставить права на запуск команды
oscap-docker
от имени привилегированного пользователя поскольку для проверки утилита выполняет операциюchroot
в файловой системе образа контейнера.Для этого создайте файл
/etc/sudoers.d/oscap-docker
(заменитеtestuser
на имя реального пользователя перед запуском команды):$ cat << EOF | sudo tee -a /etc/sudoers.d/oscap-docker testuser ALL=/bin/oscap-docker EOF $ sudo chmod 640 /etc/sudoers.d/oscap-docker
Вам потребуется OVAL-файл с описанием уязвимостей для операционной системы, которую вы используете внутри контейнера. Для некоторых отечественных дистрибутивов OVAL-файлы предоставляет ФСТЭК на основе своей базы данных уязвимостей (БДУ), их вы можете найти на странице загрузки программы ScanOVAL для Linux в виде Deb или RPM-пакетов.
Для извлечения файлов из RPM-пакета вы можете использовать следующую команду:
$ rpm2cpio PATH_TO_RPM_FILE | cpio -idmv
Для извлечения файлов из Deb-пакета используйте следующий набор команд:
# получение списка файлов в Deb-пакете. Интересующий вас файл будет иметь имя # data.tar.xz или data.tar.gz $ ar -t PATH_TO_DEB_FILE debian-binary control.tar.gz data.tar.xz # извлечение файла data.tar.xz из Deb-пакета $ ar -x PATH_TO_DEB_FILE data.tar.xz # извлечение всех файлов из архива data.tar.xz. Если в скачанном вами Deb- # пакете находится файл data.tar.gz, то используйте аргумент "z" вместо "J": # $ tar -xzvf data.tar.gz $ tar -xJvf data.tar.xz
Также многие производители операционных систем самостоятельно предоставляют OVAL-файлы для своих продуктов. Например, OVAL-файлы для МСВСфера ОС 9 доступны по адресу repo1.msvsphere-os.ru/msvsphere/9/security/oval/. Обратитесь к документации или технической поддержке производителя ОС, используемой вами в контейнере, для получения необходимой информации.
После завершения предварительной настройки вы можете запустить проверку образа следующим образом:
$ sudo oscap-docker image b30a739d04aa oval eval --results results.xml \
--report report.html msvsphere-9.en.oval.xml
Creating a temporary container for the image...
Docker container 0365b199c28d289de69156fa83d7e8009d5cef236e325957125421e2458f907e ready to be scanned.
Definition oval:ru.msvsphere-os.infsa:def:20250377: false
Definition oval:ru.msvsphere-os.infsa:def:20250334: false
...
Definition oval:ru.msvsphere-os.infba:def:20245691: true
Definition oval:ru.msvsphere-os.infba:def:20243840: false
Evaluation done.
Temporary container 0365b199c28d289de69156fa83d7e8009d5cef236e325957125421e2458f907e cleaned
Cleaning temporary extracted container...
Где:
b30a739d04aa
— идентификатор образа контейнера для проверки, вы можете получить список образов в вашей системе с помощью командыdocker image ls
:$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE inferit/msvsphere 9.5 92b2dfaaa72e 12 days ago 212MB inferit/msvsphere 9.3 b30a739d04aa 15 months ago 152MB
--results results.xml
— путь к файлу, в который необходимо сохранить отчёт о сканировании в XML формате;--report report.html
— путь к файлу, в который необходимо сохранить отчёт о сканировании в HTML формате;msvsphere-9.en.oval.xml
— путь к OVAL-файлу для тестируемой операционной системы.
Откройте сгенерированный файл report.html
с помощью браузера.

Отчёт OpenScap о проверке образа контейнера
Исходя из приведённого в качестве примера отчёта следует что:
было обработано 335 бюллетеней безопасности из OVAL-файла (ячейка «#Definitions»);
было обнаружено 26 срабатываний (ячейка «#x»);
для 309 бюллетеней срабатываний не обнаружено (ячейка «#✓»);
тестировалась операционная система МСВСфера 9.3 Сервер (ячейки «Operating system» и «Operating System Version»);
таблица с результатами проверки по каждому из бюллетеней находится в конц отчёта, в начале располагаются бюллетени, для которых были обнаружены срабатывания;
для каждого бюллетеня в таблице:
в колонке «Title» указано название бюллетеня;
в колонке «Reference ID» указаны ссылки на страницу бюллетеня в базе данных уязвимостей, а та же ссылки на информацию о конкретных уязвимостях (CVE), которые были исправлены в этом обновлении.
15.6.2. Сканер уязвимостей Trivy
Trivy — ещё один сканер уязвимостей с открытым исходным кодом, включённый в состав дистрибутива МСВСфера ОС. Как и OpenSCAP, он может выполнять функцию поиска уязвимостей в образах контейнеров, но, в отличии от OpenScap, использует свою собственную базу данных об уязвимостях для работы.
Для установки Trivy выполните следующую команду:
$ sudo dnf install trivy
Для сканирования образа контейнера выполните команду trivy image
, передав
ей в качестве аргумента идентификатор образа или путь к нему в формате
репозиторий:тег
:
$ trivy image 80c04158e975
Результат работы команды:

Результат работы команды trivy
В результате выполнения Trivy выдаст таблицу со списком всех обнаруженных
уязвимостей. Формат вывода результатов можно настроить с помощью аргумента
--format
, для просмотра списка поддерживаемых форматов и других опций
выполните команду trivy image --help
.
По умолчанию Trivy самостоятельно скачивает актуальную базу данных уязвимостей с внешнего ресурса, соответственно, для работы сканера в таком режиме требуется доступ к сети Интернет.
В случае необходимости использования в изолированной среде вы можете скачать базу данных вручную на компьютере, подключённом к сети:
$ trivy --cache-dir DB_DIR_PATH image --download-db-only
Замените DB_DIR_PATH
на путь к каталогу, в котором необходимо сохранить базу
данных.
После этого скопируйте каталог с базой данных на целевой компьютер и запускайте Trivy, используя следующий набор аргументов:
$ trivy image --cache-dir DB_DIR_PATH --skip-db-update
15.6.3. Автоматическая проверка образов контейнеров на наличие уязвимостей
В сертифицированной версии операционной системы МСВСфера реализована функция автоматической проверки образов контейнеров на уязвимости во время следующих операций:
скачивание образа контейнера из реестра (
docker pull
);запуск контейнера из образа (
docker run
);сборка образа контейнера (
docker build
);импорт образа контейнера (
docker import
).
Для активации этой функции после установки и настройки службы docker
из
пакета docker-ce
установите сканер docker-revisor
:
$ sudo dnf install docker-revisor
Какая-либо дополнительная настройка со стороны docker
не требуется — сервис
модифицирован таким образом, что автоматически вызывает функцию проверки образа
в случае обнаружения в системе исполняемого файла /usr/bin/docker-revisor
.
Сканер docker-revisor
представляет собой обёртку над описанными ранее в этой
главе сканерами OpenSCAP и Trivy. Настройка сканера осуществляется путём
редактирования конфигурационного файла /etc/docker-revisor.yaml
. Ниже
приведена конфигурация по умолчанию с описаним доступных опций:
---
# блок "scanners" позволяет включить (yes) или отключить (no) использование
# внешних сканеров программой
scanners:
# включить/выключить проверку с помощью Trivy
trivy: yes
# включить/выключить проверку с помощью OpenSCAP
openscap: yes
# trivy:
# # по умолчанию Trivy скачивает/обновляет свою базу данных уязвимостей
# # автоматически для каждого пользователя. Опция "offline_db_path" позволяет
# # задать путь к заранее скачанной базе данных, а также отключает
# # автоматическое обновление базы данных перед сканированием образа.
# # Таким образом становится возможным использование сканера Trivy в
# # защищённых окружениях без доступа к сети Интернет.
# # Для скачивания/обновления базы данных выполните следующую команду на
# # компьютере, подключённом к сети:
# # $ docker-revisor trivy-sync-db
# # Программа docker-revisor сохранит актуальную базу данных в каталоге,
# # указанном в "offline_db_path". Далее, вам необходимо будет скопировать
# # базу данных на компьютер, который будет осуществлять проверку образов
# # контейнеров, с помощью внешнего накопителя или внутренней локальной сети.
# offline_db_path: /var/lib/docker-revisor/trivy/
# Список путей к OVAL-файлам для сканируемых операционных систем. Системный
# администратор должен самостоятельно скачать их, прежде чем программа сможет
# использовать эти данные для сканирования.
oval: []
# Пример конфигурации OVAL для ОС МСВСфера 9
# oval:
# # название операционной системы, как правило это значение поля ID
# # из файла /etc/os-release
# - os_name: msvsphere
# # версия операционной системы, как правило это значение поля VERSION_ID
# # из файла /etc/os-release. Проверка выполняется по наличию заданной
# # подстроки в начале значения, соответственно, "9" будет подходить как
# # для версий "9.x", так и для версии "9".
# os_version: '9'
# # редакция операционной системы. Как правило вам не потребуется указывать
# # это поле, однако, у операционной системы МСВСфера есть несколько
# # редакций с разными значениями в поле CPE_NAME.
# edition: baseos
# # путь к OVAL-файлу для заданной операционной системы
# path: /var/lib/docker-revisor/oval/msvsphere-9.en.oval.xml
Процедура получения OVAL-файлов для целевой операционной системы описана ранее
в этой главе в разделе «15.6.1. Сканер уязвимостей OpenSCAP».
Вам необходимо самостоятельно скачать их, поместить в доступный для чтения
всеми пользователями Docker каталог, допустим, /var/lib/docker-revisor/oval
и внести соответствующие изменения в конфигурационный файл.
На этом процедуру настройки можно считать завершённой, проверка образа на
наличие уязвимостей будет выполняться автоматически. В случае обнаружения
уязвимостей программа docker
выведет пользователю соответствующее сообщение
и заблокирует скачивание или запуск такого образа или контейнера:
$ docker run -it --rm inferit/msvsphere:9.3
docker: Error response from daemon: sha256:b30a739d04aaffcb5ba2770e17bc2c90220544d289ab0604721 \
3128ac5b5b078 image vulnerability scan failed:
Trivy scan skipped: OS is not supported
OpenScap scan completed:
oval:ru.msvsphere-os.infsa:def:20249541:
title: INFSA-2024:9541: Expat security update
CVEs:
CVE-2024-50602 [moderate] https://nvd.nist.gov/vuln/detail/CVE-2024-50602
...
oval:ru.msvsphere-os.infba:def:20245691:
title: INFBA-2024:5691: ca-certificates security update
CVEs:
CVE-2023-37920 [low] https://nvd.nist.gov/vuln/detail/CVE-2023-37920
Total CVEs found: 46.