Ручная перепроверка¶
Security Hub поддерживает два связанных механизма, закрывающих цикл «нашли уязвимость → исправили → находка автоматически закрылась»:
- Periodic verify_fixes — при каждом плановом ре-сканировании DomainScope и IaC-сканер сообщают Hub, что текущая загрузка является повторным проходом по тому же scope. Hub автоматически закрывает находки, которых сканер больше не видит.
- Manual rescan trigger — кнопки в UI Hub'а «Перепроверить» (на уровне проекта или конкретной находки), которые принудительно дёргают сканер прямо сейчас.
Когда что использовать¶
| Сценарий | Механизм |
|---|---|
| Стандартный day-to-day | Periodic verify_fixes (включается one-time, дальше работает само) |
| После hot-fix'a — хочу убедиться сейчас, что находка закрылась | Кнопка «Перепроверить» на карточке находки |
| После большого пакета изменений по периметру | Кнопка «Перепроверить scope» на странице проекта |
| Подтвердить ручной триаж конкретной находки через LLM | Кнопка «LLM-анализ» на карточке находки (через sandbox-проверку) |
Автоматическое закрытие при плановом сканировании¶
По умолчанию выключено
Возможность не работает, пока её не включат явно. Это сознательное решение: при неполном сканировании слепое закрытие отсутствующих находок приводит к массовому ложному закрытию.
Сканеры помечают периодическую загрузку как повторный проход по тому же периметру. 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 пишет в Jira при автозакрытии¶
Если у закрываемой находки есть связанная задача в Jira, Hub:
- добавляет к задаче комментарий (по умолчанию):
Находка автоматически закрыта по результатам повторного сканирования: при свежем сканировании того же scope сканер больше не обнаружил эту уязвимость. Если уверены, что проблема остаётся актуальной — переоткройте задачу вручную.
- при заданном
auto_verify_close_transitionпереводит задачу в указанный статус. Настраивается вjira_configпроекта:
auto_verify_close_comment: "Свой текст комментария..."
auto_verify_close_transition: "Resolved" # имя транзишена
Если оставить auto_verify_close_transition пустым — будет только комментарий, задача остаётся в текущем статусе и закрывается уже вручную ответственным.
Manual rescan trigger¶
После включения функции в UI появляются две кнопки.
«Перепроверить scope» — на странице проекта¶
Запускает все подключённые к проекту сканеры по полному перечисленному scope. Полезно после большого обновления инфраструктуры, miration ивента, или когда нужно быстро убедиться, что приоритетные находки закрыты.
Кнопка видна пользователям с правом write на проект.
«Перепроверить через сканер» — на карточке находки¶
Доступна только для сетевых находок (есть host/ip). Триггерит точечный re-scan конкретного host:port. Если уязвимости больше нет — следующий тик сервиса auto-verify закроет находку как fixed.
Кнопка видна пользователям с правом 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-сервер, принимающий webhook'и Hub'а. Без RESCAN_API_KEY в окружении сервер не стартует — это сознательная защита (никаких неаутентифицированных endpoints).
DomainScope:
RESCAN_API_KEY=<тот же ключ, что в DOMAINSCOPE_RESCAN_API_KEY у Hub>
RESCAN_LISTEN_ADDR=:8087 # default :8087
# (optional) accept только для конкретного project_id 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
IaC-сканеру требуется service-аккаунт Hub'а со scope list_products — уже должен быть настроен (используется текущим scheduler'ом).
Что увидит оператор¶
- В аудит-логе Hub'а появятся записи
rescan_dispatched_project/rescan_dispatched_findingс указанием инициатора иjob_idсканера. - В аудит-логе закрытий —
auto_verify_fixedс указанием engine'а сканера и причины. - В связанной задаче Jira — комментарий с объяснением, что находка закрыта автоматически, и что делать, если вы с этим не согласны.
Отключение / отмена¶
- Глобальный kill-switch для manual rescan:
FEATURE_MANUAL_RESCAN=false+ рестарт Hub. Кнопки исчезнут, endpoint'ы вернут 404. - Глобальный kill-switch для auto-close:
FEATURE_AUTO_VERIFY_FIXES=false+ рестарт. Сканеры продолжат отсылатьverify_fixes=true, но Hub не будет ничего закрывать. - Per-project: снять флаг «Auto-verify fixes» в панели проекта. Действует немедленно.
Связанные разделы¶
- 05. Справочник переменных окружения — полный список новых env'ов с дефолтами
- 07. Jira — настройки
auto_verify_close_commentиauto_verify_close_transition - 19. Troubleshooting — что делать, если кнопки не показались или сканер не отвечает