Утилита openscap-podman#

Сервис openscap-podman - это служба сканирования образов контейнеров на наличие уязвимостей с помощью OpenSCAP (инструментарий Security Content Automation Protocol) и Podman. Представляет собой юнит systemd, который может быть установлен в систему из одноименного пакета RPM.

ID просканированных образов контейнеров с временными метками последнего сканирования хранятся в /var/lib/openscap-podman/images-ts.log.

Конфигурационный файл сервиса - /etc/openscap-podman/engine.conf (подробнее см. в «Файл /etc/openscap-podman/engine.conf»). Особое внимание следует уделять следующим полям данного файла:

  • oval_path - задает абсолютный путь к файлу OVAL (Open Vulnerability and Assessment Language - формат файлов, используемых для сканирования системы), из которого будут браться тесты для проверки образов контейнеров. Путь по умолчанию соответствует пути, в который распаковывается файл OVAL из пакета sberlinux-oval.

  • oscap_podman_bin - путь до файла скрипта podman-scanner, который непосредственно монтирует файловую систему образа и проверяет его на соответствие OVAL. Данный bash-скрипт также может быть вызван отдельно - подробнее см. в Примерах использования ниже.

  • check_interval - интервал в минутах для совершения вызова podman images (подробнее см. в «Утилита podman images»), которая выводит список существующих контейнеров для пользователя с административными полномочиями (например, root) и позволяет сравнить временные метки с images-ts.log. При этом после последнего сканирования должно пройти большее количество дней, чем указано в поле time_diff. Образы сканируются и происходит обновление images-ts.log.

Запись событий в журнал аудита происходит при выявлении любой уязвимости, с типом UNKNOWN и индексом 2150. При этом в поле сообщения msg включена информация:

  • severity - уровень уязвимости, например, Критический, Высокий, Средний и т.д.;

  • vul_type - наименование/тип уязвимости;

  • cve - идентификационный номер уязвимости из базы данных CVE (Common Vulnerabilities and Exposures) для данного срабатывания;

  • cwe - идентификационный номер дефекта CWE (Common Weakness Enumeration);

  • description - описание уязвимости;

  • os_name - название ОС, например, SberLinux; подтягивается из тега с системной информацией в xml-отчете oscap после сканирования, унаследованного из файла, содержащего информацию о версии ОС, например, /etc/sberlinux-release;

  • os_release - релиз ОС, например, 9.3 (Shkhara); источник информации аналогичен os_name;

  • architecture - архитектура, для контейнеров в SberLinux OS - x86_64, в иных случаях - по аналогии с os_name;

  • primary_host_name - ID образа контейнера.

Пример записи в аудит:

type=UNKNOWN[2150] msg=audit(1706520298.888:179116): pid=2441251 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:unconfined_service_t:s0 msq='severity="Средний" vul_type="Уязвимость реализации протоколов ТLS и SSH утилиты командной строки cURL, позволяющая нарушителю получить несанкционированный доступ к защищаемой информации" cve="CVE-2022-27782" cwe="CWE-287" description="Уязвимость реализации протоколов TLS и SSH утилиты командной строки cURL связана с недостатками процедуры аутентификации при использовании ранее созданного соединения в пуле соединений. Эксплуатация уязвимости может позволить нарушителю, действующему удаленно, получить несанкционированный доступ к защищаемой информации" os_name="SberLinux" os_version="9.0 (Shkhara)" architecture="x86_64" primary_host_name="25d4db7cd88e23e61d2aadadf6cf6864b054083abfb16ffd72fbe530dd385305" exe="usr/bin/python3.9" hostname=localhost.localdomain addr=localhost terminal=? res=success' UID="root" AUID="unset"

Примеры использования#

  • Для установки openscap-podman введите команду:

    dnf install openscap-podman
    

    Подробнее про dnf см. в «Утилита dnf».

  • Для запуска openscap-podman введите команду:

    systemctl start openscap-podman.service
    

    Подробнее про systemctl см. в «Утилита systemctl».

  • Для запуска сканирования образа контейнера вручную используйте команду:

    podman-scanner [--oscap=<OSCAP_BINARY>] IMAGE_NAME OSCAP_ARGUMENT [OSCAP_ARGUMENT...]
    

    Где:

    • podman-scanner - исполняемый файл /usr/sbin/podman-scanner со скриптом для проверки образа;

    • --oscap=<OSCAP_BINARY> - указание пути к исполняемому файлу OSCAP (OpenSCAP), который используется для анализа образов контейнеров;

    • IMAGE_NAME - имя образа контейнера;

    • OSCAP_ARGUMENT... - прочие аргументы, которые необходимо передать для настройки сканирования.

      По умолчанию в выводе будет содержаться код:

    • 0 - сканирование не выявило уязвимостей указанного типа;

    • 50 - в образе обнаружились уязвимости Критического или Высокого уровня;

    • другое числовое значение - во время исполнения произошла другая ошибка.