Документация / Руководство пользователя / Автоматика разбора
Автовалидатор
Валидатор разбирает уязвимости по правилам без участия инженера: отклоняет ложные срабатывания, верифицирует подтверждённые классы находок, принимает риск, ставит теги и добавляет в группы. Правила снимают с инженера повторяющийся разбор и сокращают время до верификации.
Где: "Валидатор". Нужны платная лицензия ("Недоступно для бесплатных лицензий" на бесплатной) и право "Правила автоматизации": "Просмотр" - смотреть правила и настройки, "Изменение" - менять.
Как работает
- Правило - это условия, область действия и действие. Уязвимость, которая подходит под все условия правила и входит в его область, получает действие правила.
- Валидатор - фоновый цикл: проход по уязвимостям, пауза "Частота запуска (в секундах)", снова проход.
- При включённом "Валидировать уязвимости на импорте" правила применяются и к уязвимостям каждого импорта сразу после его разбора.
- Предпросмотр затронутых уязвимостей учитывает только уязвимости в статусе "Не обработано".
- Правила могут пересекаться. Порядок их применения показан на экране настроек валидатора: "Правила применяются в следующем порядке:".
Что остаётся на уязвимости после правила:
- статус с отметкой автоматики - фильтры "Подтверждено автоматически", "Отклонено автоматически", "Автоматически подтверждено правилом", "Автоматически отклонено правилом";
- запись в блоке "Затронуто" карточки: "{действие} с помощью {правило}";
- теги и группы из правила.
Об окончании работы валидатора сообщают уведомления "Уведомление о завершении валидации" (Уведомления).
Настройки
| Поле | Что задаёт | По умолчанию |
|---|---|---|
| "Включить валидатор" | Запуск фонового цикла | выключено |
| "Частота запуска (в секундах)" | Пауза между проходами, не меньше 40 | - |
| "Валидировать уязвимости на импорте" | Применять правила к уязвимостям импорта сразу после разбора | включено |
При включении интерфейс показывает, сколько активных правил у валидатора: "Валидатор содержит {N} активных правил".
Правило
| Поле | Что задаёт | По умолчанию |
|---|---|---|
| "Активно" | Правило участвует в проходах | выключено |
| "Изменить статус" | Действие: "Отклонить", "Верифицировать", "Нет", "Временно принять риск", "Постоянно принять риск". "Нет" - статус не меняется, только теги и группы | "Отклонить" |
| "Добавить теги к проверенным уязвимостям" | Теги, которые получит уязвимость | - |
| "Сгруппировать проверенные уязвимости" | Имена групп, в которые попадёт уязвимость (Группы уязвимостей) | - |
| Условия | Какие уязвимости отбирает правило | - |
| Область действия | Продукты или ассеты, к которым применяется правило | - |
Условия
Условие - это поле уязвимости, операция и значение. Условия правила объединяются через "И". Для "ИЛИ" создайте несколько правил.
| Поле условия | Поле в API | Операции |
|---|---|---|
| "Название" | Finding__name |
"Содержит значение", "Соответствует регулярному выражению" |
| "Описание" | Finding__description |
то же |
| "Путь к файлу" | Finding__file_path |
то же |
| "Уязвимый URL" | Finding__vulnerable_url |
то же |
| "Зависимость" | Finding__dependency |
то же |
| "Ветка" | Finding__branch |
то же |
| "Тег образа" | Finding__docker_image_tag |
то же |
| "Своё поле" | Finding__custom_field |
то же |
| Репозиторий, Docker-образ, домен, хост, облачный аккаунт | Finding__repository, Finding__docker_image, Finding__domain, Finding__host, Finding__cloud_account |
то же |
| "Строка" | Finding__line |
"Равно", только целое число |
| "Критичность" | Finding__severity |
"Равно": 0 "Инфо", 1 "Низкая", 2 "Средняя", 3 "Высокая", 4 "Критичная" |
| "Сканер" | Scanner__name |
"Содержит некоторые из сканеров" - список имён |
| "Тип сканера" | Scanner__scanner_type |
"Содержит некоторые из типов сканеров" - список кодов 0-6 |
| "Тег" | Tag__name |
"Содержит тег" - точное имя тега |
| "Источник импорта" | External_system__dojo_finding_id |
"Из источника": "Внутренний" - уязвимости Core, "Внешний" - из DefectDojo |
Как работают операции:
| Операция | Как сравнивает |
|---|---|
| "Содержит значение" | Подстрока без учёта регистра |
| "Соответствует регулярному выражению" | Регулярное выражение PostgreSQL, с учётом регистра. Для поиска без учёта регистра добавьте (?i) в начало |
| "Равно" | Точное совпадение числа |
| "НЕ" | Инвертирует условие: отбираются уязвимости, которые под него не подходят |
Ограничения:
- для "Строка" и "Критичность" значение - только целое число, регулярное выражение запрещено;
- регулярное выражение проверяется в PostgreSQL при сохранении; ошибка -
The regular expression you entered does not work with PostgreSQL database.
Примеры условий:
| Задача | Условия | Действие |
|---|---|---|
| Отклонять находки в тестах | "Путь к файлу" соответствует (^|/)(test|tests|spec)/ |
"Отклонить", тег test-code |
| Сразу брать в работу критичные секреты | "Тип сканера" - Секреты; "Критичность" равно 4 | "Верифицировать" |
| Собирать уязвимости одной библиотеки в группу | "Зависимость" содержит log4j |
"Нет", группа log4j |
Область действия
Область задаёт, к каким продуктам или ассетам применяется правило. Та же область используется в правилах дедупликатора и CVSS, расписаниях, уведомлениях и quality gate.
| Поле | Что задаёт |
|---|---|
| "Тип области видимости" | "Продукты" или "Ассеты" |
| "Глобально" | Все текущие и будущие продукты или ассеты. Включать и выключать может только роль с "Может управлять всеми продуктами" |
| "Применить к {продуктам или ассетам} с тегами" | Только в глобальной области: сужает её до продуктов или ассетов с одним из тегов |
| Выбранные продукты | Для области "Продукты" без "Глобально": хотя бы один продукт |
| Выбранные ассеты или "Типы ассетов" | Для области "Ассеты" без "Глобально": конкретные ассеты либо продукты плюс типы ассетов |
Как область отбирает уязвимости:
- "Продукты" - все уязвимости выбранных продуктов;
- "Ассеты" - уязвимости, у которых поле ассета равно значению выбранного ассета в том же продукте.
Если область правила шире ваших прав, правило открывается только для чтения: "Редактирование правила недоступно".
Предпросмотр
Форма правила показывает "Уязвимости, которые будут затронуты ({N})". Если правило составлено с ошибкой - "недопустимое правило". При включении правила интерфейс напоминает: "Правило затрагивает {N}".
Сообщение "Запрос затронутых уязвимостей выполняется слишком долго" значит, что правило будет тяжёлым и в работе. Сузьте условия или область.
Через API:
| Запрос | Что возвращает |
|---|---|
GET / |
Уязвимости под сохранённое правило |
GET / |
Уязвимости под черновик правила |
GET / |
Уязвимости, которые правило уже обработало |
В одном запросе - один параметр правила, иначе 400 Select only one automation rule.
Создание правила
- Откройте "Валидатор" и нажмите "Создать правило". Можно начать из карточки уязвимости кнопкой "Создать правило валидатора".
- Выберите действие в "Изменить статус", при необходимости заполните теги и группы.
- Добавьте условия.
- Задайте область действия.
- Проверьте предпросмотр: число и состав уязвимостей.
- Включите "Активно" и сохраните.
- Если валидатор выключен, включите его в настройках ("Включить валидатор").
Проверка: через один цикл откройте в меню правила "Затронутые уязвимости" или "Просмотр уязвимостей, обработанных правилом".
Список правил
Колонки: "Действие", "Теги", "Группы", "Активно", "Охват". Поиск - по значениям условий. Фильтры - по активности, действию, полю условия, тегам.
Выделенные правила можно включить, выключить или удалить. Меню правила: просмотр, изменение, "Затронутые уязвимости", удаление.
Экспорт и импорт правил
Правила валидатора, дедупликатора и CVSS переносятся между установками JSON-файлом: отладьте правила на тестовом стенде и загрузите в рабочий.
Экспорт:
curl -sS "https://core.example.ru/api/v1/auto-validator/rules/export/?is_active=true" \
-H "Authorization: Token <токен>" -o validator-rules.json
Экспорт учитывает фильтры списка и не содержит номеров правил.
Импорт в интерфейсе:
- "Валидатор" → "Импорт правил".
- В поле "Файл" загрузите JSON. Пустой файл - "В файле не найдено правил".
- Проверьте область правил в "Разрешить для продуктов:".
- Нажмите "Сохранить {N} правил".
Импорт доступен только роли с "Может управлять всеми продуктами": иначе "Вам необходим доступ ко всем продуктам, чтобы импортировать правила", в API - 403. Правило без selection_scope становится глобальным для продуктов. Файл загружается целиком: при ошибке в одном правиле не сохраняется ни одно.
Формат файла:
[
{
"action_choices": 0,
"is_active": true,
"tags": ["test-code"],
"groups": [],
"instructions": [
{"field": "Finding__file_path", "value": "(^|/)(test|tests|spec)/", "negate": false, "regex": true}
],
"issues_auto_create_on_verify": null,
"selection_scope": {
"target": 0,
"is_global": true,
"products": [],
"assets": [],
"asset_types": [],
"filter_tags": []
}
}
]
| Поле | Значение |
|---|---|
action_choices |
0 "Отклонить", 1 "Верифицировать", 2 "Нет", 3 "Временно принять риск", 4 "Постоянно принять риск" |
instructions[].field |
Поле условия из таблицы Условия |
instructions[].value |
Строка. Для "Сканер" и "Тип сканера" - JSON-массив строкой, например "[\"Gitleaks Scan\"]", "[1]" |
instructions[].negate, regex |
"НЕ" и регулярное выражение |
selection_scope.target |
0 "Продукты", 1 "Ассеты" |
selection_scope.products, assets |
Номера продуктов и ассетов |
selection_scope.asset_types |
Типы ассетов: 0 репозиторий, 1 образ, 2 домен, 3 хост, 4 облачный аккаунт |
Служебные поля id и targets_count, которые есть в выгрузке внутри selection_scope, при импорте игнорируются.
Номера продуктов и ассетов
Область с выбранными продуктами или ассетами хранит их номера. На другой установке номера другие: перед импортом замените их или используйте глобальную область с тегами.
API
| Метод и путь | Назначение |
|---|---|
GET, POST /api/v1/settings/auto-validator/ |
Настройки: is_active, launch_frequency, validation_on_import |
GET, POST /api/v1/auto-validator/rules/ |
Правила |
PATCH, DELETE /api/v1/auto-validator/rules/{id}/ |
Изменение и удаление правила |
POST /api/v1/auto-validator/rules/bulk/activate/, /bulk/deactivate/, /bulk/delete/ |
Массовые действия по фильтру ?id__in=1,2. Всегда передавайте фильтр: без него действие применяется ко всем правилам, которые вы можете менять |
GET /api/v1/auto-validator/rules/export/ |
Выгрузка правил |
POST /api/v1/auto-validator/rules/import/ |
Загрузка правил |