
Сканер уязвимостей времени выполнения: находит CVE в сервисах, фактически запущенных на хосте, и ранжирует их по сетевой доступности.
threat-finder находит уязвимое ПО, реально запущенное на хосте, — а не то,
что заявляет манифест, — и сообщает, какие находки доступны по сети. Он
приводит каждый запущенный сервис (а с --scope all — и каждый установленный
пакет ОС) к точному Package-URL и
сопоставляет его с каталогом OffSeq Radar, используя
нативные для экосистемы правила версий, поэтому бэкпортированные/исправленные
сборки не помечаются ложно.
Vulnerability summary (highest risk first):
openssh-server@1:8.9p1-3ubuntu0.6 — 1 finding(s) [PUBLIC tcp 0.0.0.0:22]
[ACT-NOW 92] HIGH CVE-2024-6387 [KEV] regreSSHion: remote code execution in OpenSSH
→ fix: 1:8.9p1-3ubuntu0.10 https://radar.offseq.com/threat/…
[email protected] — 1 finding(s)
[SCHEDULE 41] MED CVE-2023-44487 HTTP/2 Rapid Reset
2 confirmed finding(s) across 2 asset(s); 1 exposed, 1 known-exploited.
brew install offseq/tap/threat-finder # Homebrew (macOS/Linux), prebuilt
cargo binstall threat-finder # prebuilt binary, no toolchain
cargo install threat-finder # from source
Готовые архивы для Linux/macOS (x86_64 + arm64) и Windows (x86_64) доступны на странице релизов. Для сборки из исходников требуется Rust ≥ 1.87. Поддерживаются Linux, macOS, BSD-системы и Windows.
export OFFSEQ_API_KEY=... # from https://radar.offseq.com/console
threat-finder
Сканирует запущенные сервисы, выводит сводку, отсортированную по уровню риска,
и записывает полный JSON-отчёт в /tmp/threats.json. Добавьте --scope all,
чтобы также просканировать каждый установленный пакет ОС.
threat-finder [OPTIONS]
| Флаг | Описание |
|---|---|
-o, --output <PATH> | Записать JSON-отчёт в PATH (по умолчанию: запрос, или /tmp/threats.json) |
--json | Вывести JSON-отчёт в stdout вместо файла |
--scope <SCOPE> | running (по умолчанию) или all (+ каждый установленный пакет ОС) |
--severity <LEVEL> | Сообщать только о находках уровня critical|high|medium|low и выше |
--strict | Отбрасывать находки с неподтверждёнными координатами (сообщать только о подтверждённых) |
--fail-on <WHAT> | Выход с кодом 5 при наличии соответствующих находок: any|critical|high|medium|low|kev|exposed |
--sarif <PATH> | Также записать отчёт SARIF 2.1.0 (для интерфейсов сканирования кода) |
--include <GLOB> / --exclude <GLOB> | Фильтровать активы по glob-шаблону имени (можно указывать несколько раз) |
-q, --quiet | Подавить баннер, индикатор выполнения и сводку |
--no-color | Отключить ANSI-цвета |
-y, --yes | Использовать значения по умолчанию, никогда не запрашивать (CI/cron) |
--reset | Заново ввести API-ключ, игнорируя сохранённый |
--register | Зарегистрировать просканированный хост в Radar для непрерывного мониторинга (без запроса) |
--no-register | Не регистрировать и не запрашивать мониторинг в этом запуске |
--host-name <NAME> | Понятное имя хоста, отправляемое при регистрации |
--unregister | Удалить инвентаризацию этого хоста из Radar и выйти |
--windows-missing-updates | (Windows) Дополнительно вывести ожидающие обновления безопасности от агента Windows Update (онлайн-сканирование; запускать с повышенными правами) |
-h, --help / -V, --version | Справка / версия |
# CI: only high+ findings, JSON to stdout, no prompts
OFFSEQ_API_KEY=… threat-finder --yes --json --severity high > report.json
# Fail the build only when a network-exposed service has a known-exploited CVE
OFFSEQ_API_KEY=… threat-finder --yes --quiet --fail-on exposed
Коды выхода: 0 — успешно · 1 — ошибка поиска/ввода-вывода · 2 — нет
API-ключа · 3 — неподдерживаемая ОС · 4 — лимит запросов/квота или требуется
доступ к API (нужно обновление) · 5 — достигнут порог --fail-on.
API-ключ (получите его в Radar Console), определяется в следующем порядке:
OFFSEQ_API_KEY (лучше всего для CI/cron).$XDG_CONFIG_HOME/offseq-rust/config.toml (0600),
если не указан --reset.В неинтерактивном режиме (--yes / нет TTY) при отсутствии ключа происходит
выход с кодом 2.
Задайте OFFSEQ_CONFIG_DIR, чтобы переопределить расположение конфигурации
(по умолчанию: стандартная для ОС пользовательская папка конфигурации) — удобно
для контейнеров и CI, которым нужен детерминированный путь.
Точное сопоставление координат. Каждый актив становится purl с полной
версией (эпоха + ревизия дистрибутива) и квалификатором ?distro=, например
pkg:deb/ubuntu/openssh-server@1:8.9p1-3ubuntu0.6?distro=jammy. Инвентаризация
сопоставляется пакетными вызовами POST /match/batch (по одному запросу на
чанк размером с тарифный уровень) на стороне сервера, с нативными для
экосистемы правилами версий (dpkg/rpm/apk/semver) — поэтому бэкпортированная
и исправленная сборка вроде 1.18.0-6+deb11u3 корректно не помечается, и на
стороне клиента нет угадывания версий. Находки разделяются флагом API
confirmed: подтверждённые совпадения сообщаются; координатные совпадения,
версию которых нельзя подтвердить, выводятся отдельно как unconfirmed /
triage (исключены из подсчёта, byCve и --fail-on; отбросьте их с помощью
--strict).
Корреляция сетевой доступности. Сканеры манифестов (Trivy, Grype,
osv-scanner) читают списки пакетов; внешние сканеры (Nessus, OpenVAS) требуют
второй хост. Этот инструмент сопоставляет процесс каждого запущенного сервиса
с сокетами, на которых он слушает (/proc/net в Linux, lsof в других
Unix-системах, Get-NetTCPConnection / netstat в Windows), и классифицирует
достижимость — loopback / private / public. Уязвимый сервис на 0.0.0.0 —
это совсем иной риск, чем на 127.0.0.1: находки ранжируются с приоритетом
доступности, а --fail-on exposed привязывает CI именно к этому. Пакеты не
отправляются. Находки также несут CISA KEV и EPSS.
Приоритизация с учётом доступности. Каждая находка получает riskScore
(0–100) и диапазон decision в стиле SSVC — act-now · soon · schedule · track —
объединяющий серьёзность, EPSS, KEV и сетевую доступность актива-владельца.
Сводка начинает каждую строку с бейджа в стиле [ACT-NOW 92] и сортирует по
нему, поэтому немногочисленные публично доступные и известные эксплуатируемые
проблемы всплывают наверх в зашумлённом хосте. Оценка использует одну и ту же
формулу локально и на стороне сервера (в представлении мониторинга Radar
добавляется небольшой бонус, когда находка KEV просрочена — дата, которой у CLI
нет), и появляется в --json и SARIF (properties).
Разовый скан — это лишь один момент времени. Зарегистрируйте хост один раз, и Radar продолжит наблюдение: когда недавно опубликованный CVE затрагивает одну из его координат, вы получаете оповещение (email + Console), приоритизированное по доступности — повторное сканирование не нужно.
После интерактивного сканирования инструмент спрашивает:
Add these 42 services to Radar for continuous monitoring & alerts? [Y/n/never]