Ручная перепроверка¶
Security Hub поддерживает два связанных механизма, закрывающих цикл «нашли уязвимость → исправили → находка автоматически закрылась»:
- Автоматическое закрытие при плановом сканировании — DomainScope и сканер конфигураций помечают каждую плановую загрузку как повторный проход по тому же периметру. Hub закрывает находки, которых сканер больше не видит.
- Ручной запуск — кнопки «Перепроверить» в интерфейсе, на уровне проекта или отдельной находки: обращаются к сканеру немедленно.
Когда что использовать¶
| Сценарий | Механизм |
|---|---|
| Повседневная работа | Автоматическое закрытие при плановом сканировании — включается один раз, дальше работает само |
| Выкатили исправление и нужно убедиться прямо сейчас | Кнопка «Перепроверить» в карточке находки |
| Прошли большие изменения по периметру | Кнопка «Перепроверить периметр» на странице проекта |
| Нужно перепроверить разбор находки моделью | Кнопка разбора языковой моделью в карточке находки |
Автоматическое закрытие при плановом сканировании¶
По умолчанию выключено
Возможность не работает, пока её не включат явно. Это сознательное решение: при неполном сканировании слепое закрытие отсутствующих находок приводит к массовому ложному закрытию.
Сканеры помечают периодическую загрузку как повторный проход по тому же периметру. Hub сравнивает свежий отчёт с тем, что уже открыто на этом продукте по тому же сканеру, и закрывает находки, которых в новом отчёте нет.
Три условия, все обязательны:
FEATURE_AUTO_VERIFY_FIXES=true— на всей установке;- признак
auto_verify_fixes_enabled— в настройках проекта; verify_fixes=trueпри загрузке — DomainScope и сканер конфигураций выставляют его сами при плановом повторном проходе.
Если хотя бы одно не выполнено, не закрывается ничего.
Плюс кворум. Даже при всех трёх условиях находка не закрывается с первого раза:
- внутри одной проверки отсутствие подтверждается несколькими попытками
(
AUTO_VERIFY_PROBE_RETRIES, по умолчанию 3) — любой ответ «на месте» или «неопределённо» немедленно оставляет находку открытой; - закрытие происходит после
AUTO_VERIFY_ABSENT_THRESHOLDпоследовательных проверок с результатом «отсутствует» (по умолчанию 3). Любое обнаружение сбрасывает счётчик.
Текущее значение счётчика хранится у каждой находки в поле
auto_verify_absent_streak.
Что Hub пишет в задачу при автозакрытии¶
Если у закрываемой находки есть связанная задача в трекере, Hub отражает закрытие через плагин-провайдера (см. Учёт задач):
- добавляет к задаче комментарий (по умолчанию):
Находка автоматически закрыта по результатам повторного сканирования: при свежем сканировании того же scope сканер больше не обнаружил эту уязвимость. Если уверены, что проблема остаётся актуальной — переоткройте задачу вручную.
- при заданном
auto_verify_close_transitionпереводит задачу в указанный статус. Настраивается в конфигурации провайдера для проекта:
auto_verify_close_comment: "Свой текст комментария..."
auto_verify_close_transition: "Resolved" # имя транзишена
Если оставить auto_verify_close_transition пустым — будет только комментарий, задача остаётся в текущем статусе и закрывается уже вручную ответственным.
Ручной запуск¶
После включения возможности в интерфейсе появляются две кнопки.
«Перепроверить периметр» — на странице проекта¶
Запускает все подключённые к проекту сканеры по всему заданному периметру. Полезно после крупного обновления инфраструктуры, миграции или когда нужно быстро убедиться, что приоритетные находки закрыты.
Кнопка видна пользователям с правом write на проект.
«Перепроверить через сканер» — на карточке находки¶
Доступна только для сетевых находок — тех, у которых известен узел или адрес. Запускает точечную перепроверку конкретной пары «узел и порт». Если уязвимости больше нет, находку закроет очередная проверка — с учётом кворума, описанного выше.
Кнопка видна пользователям с правом write на продукт.
«LLM-анализ» — на карточке находки¶
Уже существующая кнопка. Перезапускает LLM-классификатор с учётом текущего состояния находки и (опционально) sandbox-проверку. Не вызывает сканер, не меняет инфраструктурно ничего. Полезно когда:
- Изначальный вердикт LLM был «uncertain» и появилось дополнительное мнение.
- Изменился контекст находки (новые теги, обновлённое описание).
- Хотим повторно проверить найденный потенциальный false-positive перед закрытием.
Включение функции (Hub-сторона)¶
Установите три блока env-переменных Hub:
# Мастер-переключатель (без него endpoints возвращают 404)
FEATURE_MANUAL_RESCAN=true
# Auto-verify-fixes должен быть включён, чтобы цикл работал
FEATURE_AUTO_VERIFY_FIXES=true
# Адреса и API-ключи сканеров (см. ниже DomainScope/IaC-сторону)
DOMAINSCOPE_RESCAN_URL=http://<domainscope-service>:8087
DOMAINSCOPE_RESCAN_API_KEY=<любая случайная строка ≥ 32 символов>
IAC_SCANNER_RESCAN_URL=http://<iac-scanner-service>:8086
IAC_SCANNER_RESCAN_API_KEY=<любая случайная строка ≥ 32 символов>
# SSRF-защита: allowlist host'ов (comma-separated, без scheme/port), на которые
# Hub'у разрешено слать rescan-webhook. ОБЯЗАТЕЛЕН, если задан хотя бы один из
# *_RESCAN_URL выше — иначе Hub может быть направлен на произвольный destination
# при operator-misconfig. Перечислите host'ы из *_RESCAN_URL.
RESCAN_HOST_ALLOWLIST=<domainscope-service>,<iac-scanner-service>
# (optional) сетевой таймаут на вызов сканер-webhook'а
RESCAN_TIMEOUT_SECONDS=10
После выставления — перезапуск Hub backend (docker compose up -d backend или kubectl rollout restart deploy/hub-backend).
После перезапуска включите в UI каждого проекта, для которого хотите автозакрытие, флаг «Auto-verify fixes» в панели проекта.
Включение функции (сканер-сторона)¶
И DomainScope, и IaC-сканер запускают встроенный HTTP-сервер, принимающий обращения от Hub. Без RESCAN_API_KEY в окружении сервер не запускается — это сознательная защита: неаутентифицированных точек входа быть не должно.
DomainScope:
RESCAN_API_KEY=<тот же ключ, что в DOMAINSCOPE_RESCAN_API_KEY у Hub>
RESCAN_LISTEN_ADDR=:8087 # default :8087
# необязательно: принимать обращения только для конкретного проекта Hub
RESCAN_EXPECTED_PROJECT_ID=<uuid проекта в Hub>
В Compose/Helm не забыть expose-нуть порт 8087 внутри сети cluster'а так, чтобы Hub backend смог достучаться.
IaC-сканер:
RESCAN_API_KEY=<тот же ключ, что в IAC_SCANNER_RESCAN_API_KEY у Hub>
RESCAN_LISTEN_ADDR=:8086 # default :8086
Сканеру конфигураций нужна сервисная учётная запись Hub с правом list_products — она уже используется его штатным планировщиком.
Что увидит оператор¶
- В журнале действий Hub появятся записи
rescan_dispatched_project/rescan_dispatched_findingс указанием инициатора иjob_idсканера. - В аудит-логе закрытий —
auto_verify_fixedс указанием engine'а сканера и причины. - В связанной задаче трекера — комментарий с объяснением, что находка закрыта автоматически, и что делать, если вы с этим не согласны.
Отключение / отмена¶
- Выключить ручной запуск целиком:
FEATURE_MANUAL_RESCAN=falseи перезапуск backend. Кнопки исчезнут, эндпоинты начнут отвечать404. - Выключить автоматическое закрытие целиком:
FEATURE_AUTO_VERIFY_FIXES=falseи перезапуск. Сканеры продолжат помечать загрузки как повторный проход, но Hub перестанет что-либо закрывать. - Per-project: снять флаг «Auto-verify fixes» в панели проекта. Действует немедленно.
Связанные разделы¶
- Конфигурация: обзор и соглашения — где искать полный справочник переменных
- Учёт задач — настройки
auto_verify_close_commentиauto_verify_close_transition - Диагностика — что делать, если кнопки не показались или сканер не отвечает