Как формируется проверка#

Чтобы найти уязвимости, сканеру нужны две вещи: состав ПО сборки (что в ней установлено) и база определений OVAL (какие версии пакетов уязвимы). Дальше он сверяет одно с другим по уровням критичности.

Откуда берётся состав ПО#

Состав ПО сканер ищет по цепочке, останавливаясь на первом успешном источнике:

  1. Готовый файл состава ПО в формате CycloneDX внутри сборки.

  2. Сборочный манифест приложения или среды.

  3. Для установленного приложения, если ни того ни другого нет, состав формируется на месте средствами AFT.

Флаг --full-pull разрешает, при отсутствии готовых данных в удалённом репозитории, выкачать сборку целиком и поискать состав в ней. Если состав получить не удалось, сканер сообщает об этом технической ошибкой (код возврата 2). Подробнее про сам формат состава - в разделе Состав ПО (aft-sbom).

База определений OVAL#

База определений OVAL описывает, какие версии пакетов уязвимы. По умолчанию она берётся из системного каталога (/usr/share/oval/db/astra/1.8_x86-64/) и переопределяется флагом --oval-dir. Имена файлов определений должны содержать уровень критичности: critical, high, medium или low.

Каталог по умолчанию задаётся и переменной окружения AFT_OVAL_DIR. Это удобно, когда база лежит не на своём обычном месте: значение переменной подставляется во все запуски, а флаг --oval-dir при необходимости перекрывает её для конкретного запуска.

Саму базу определений поставляет пакет oval-definitions-astra. Без неё сканеру не с чем сверять состав ПО.

Уровни и фильтры#

  • --severity=<уровни> - какие уровни проверять (critical, high, medium, low). По умолчанию проверяются все четыре.

  • --ignore-cve=<список> - исключить конкретные уязвимости.

  • --ignore-package=<список> - исключить конкретные пакеты.

Флаги исключения можно повторять и перечислять значения через запятую. Исключённые элементы не попадают в подсчёт и в сводку, но фиксируются в отчёте отдельно - чтобы было видно, что именно отброшено.

Порог срабатывания#

Флаг --fail-on=<уровень> задаёт минимальный уровень, при котором сканер завершается с кодом 1 (по умолчанию critical). Уязвимости ниже порога попадают в отчёт, но не делают запуск неуспешным. Это позволяет встроить сканер в конвейер сборки и блокировать только тот уровень, который для проекта критичен.