Перейти к содержанию

Ручная перепроверка

Security Hub поддерживает два связанных механизма, закрывающих цикл «нашли уязвимость → исправили → находка автоматически закрылась»:

  1. Автоматическое закрытие при плановом сканировании — DomainScope и сканер конфигураций помечают каждую плановую загрузку как повторный проход по тому же периметру. Hub закрывает находки, которых сканер больше не видит.
  2. Ручной запуск — кнопки «Перепроверить» в интерфейсе, на уровне проекта или отдельной находки: обращаются к сканеру немедленно.

Когда что использовать

Сценарий Механизм
Повседневная работа Автоматическое закрытие при плановом сканировании — включается один раз, дальше работает само
Выкатили исправление и нужно убедиться прямо сейчас Кнопка «Перепроверить» в карточке находки
Прошли большие изменения по периметру Кнопка «Перепроверить периметр» на странице проекта
Нужно перепроверить разбор находки моделью Кнопка разбора языковой моделью в карточке находки

Автоматическое закрытие при плановом сканировании

По умолчанию выключено

Возможность не работает, пока её не включат явно. Это сознательное решение: при неполном сканировании слепое закрытие отсутствующих находок приводит к массовому ложному закрытию.

Сканеры помечают периодическую загрузку как повторный проход по тому же периметру. Hub сравнивает свежий отчёт с тем, что уже открыто на этом продукте по тому же сканеру, и закрывает находки, которых в новом отчёте нет.

Три условия, все обязательны:

  1. FEATURE_AUTO_VERIFY_FIXES=true — на всей установке;
  2. признак auto_verify_fixes_enabled — в настройках проекта;
  3. 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» в панели проекта. Действует немедленно.

Связанные разделы