Применимо к редакции: МСВСфера 9 (ФСТЭК)

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 о проверке образа контейнера

Отчёт 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

В результате выполнения 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.