Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
threat-finder — Сканер уязвимостей времени выполнения: находит CVE в сервисах, фактически запущенных на хосте, и ранжирует их по сетевой доступности. | Kitploit
Инструменты/GitHubGitHub/offseq/threat-finder
Сканеры уязвимостейАнализ уязвимостейСетевая безопасностьDevSecOpsРазведка угроз
GitHuboffseq/threat-finder

threat-finder

Сканер уязвимостей времени выполнения: находит CVE в сервисах, фактически запущенных на хосте, и ранжирует их по сетевой доступности.

Репозиторий
619452 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
# OffSeq Threat Finder

[![CI](https://github.com/offseq/threat-finder/actions/workflows/ci.yml/badge.svg)](https://github.com/offseq/threat-finder/actions/workflows/ci.yml)
[![crates.io](https://img.shields.io/crates/v/threat-finder.svg)](https://crates.io/crates/threat-finder)
[![docs.rs](https://img.shields.io/docsrs/threat-finder)](https://docs.rs/threat-finder)
[![license](https://img.shields.io/crates/l/threat-finder.svg)](#license)

**threat-finder** находит уязвимое ПО, _реально запущенное_ на хосте, — а не то,
что заявляет манифест, — и сообщает, какие находки **доступны по сети**. Он
приводит каждый запущенный сервис (а с `--scope all` — и каждый установленный
пакет ОС) к точному [Package-URL](https://github.com/package-url/purl-spec) и
сопоставляет его с каталогом [OffSeq Radar](https://radar.offseq.com), используя
нативные для экосистемы правила версий, поэтому бэкпортированные/исправленные
сборки не помечаются ложно.

![OffSeq Threat Finder](https://static.offseq.com/threat-finder-preview.svg)

```text
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.
```

## Установка

```sh
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) доступны на
[странице релизов](https://github.com/offseq/threat-finder/releases/latest). Для
сборки из исходников требуется Rust ≥ 1.87. Поддерживаются Linux, macOS,
BSD-системы и Windows.

## Быстрый старт

```sh
export OFFSEQ_API_KEY=...    # from https://radar.offseq.com/console
threat-finder
```

Сканирует запущенные сервисы, выводит сводку, отсортированную по уровню риска,
и записывает полный JSON-отчёт в `/tmp/threats.json`. Добавьте `--scope all`,
чтобы также просканировать каждый установленный пакет ОС.

## Использование

```sh
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` | Справка / версия |

```sh
# 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](https://radar.offseq.com/console)),
определяется в следующем порядке:

1. Переменная окружения `OFFSEQ_API_KEY` (лучше всего для CI/cron).
2. Сохранённый ключ в `$XDG_CONFIG_HOME/offseq-rust/config.toml` (`0600`),
   если не указан `--reset`.
3. Интерактивный скрытый запрос в TTY — затем сохраняется для следующего раза.

В неинтерактивном режиме (`--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),
приоритизированное по доступности — повторное сканирование не нужно.

После интерактивного сканирования инструмент спрашивает:

```text
Add these 42 services to Radar for continuous monitoring & alerts? [Y/n/never]
```

`Y` регистрирует этот хост; `n` пропускает этот запуск; `never` запоминает ваш
выбор (он сохраняется в конфигурации, и вас больше не спросят). При повторном
сканировании также сообщается о **дрейфе** (`+added / -removed / ~changed`) и о
любых находках, **новых с момента последнего сканирования**. Управляйте хостами
— включайте/выключайте мониторинг, просматривайте находки, отменяйте
регистрацию — в разделе **Inventory** в [Radar Console](https://radar.offseq.com/console).

Для автоматизации пропустите запрос: `--register` регистрирует в неинтерактивном
режиме (по умолчанию выключен в CI), `--no-register` отказывается от
регистрации, `--host-name <NAME>` задаёт имя хоста, а `--unregister` удаляет его.
Стабильный идентификатор хоста и ваше предпочтение по запросам хранятся в
`$XDG_CONFIG_HOME/offseq-rust/config.toml`. Регистрация никогда не меняет код
выхода — сбой мониторинга не приведёт к провалу сканирования. Требуется
тарифный план Basic/Pro/Enterprise (или Pro Console).

## Область охвата

`--scope running` (по умолчанию) сканирует живые сервисы — небольшой, но
высокоинформативный набор, доступность которого можно коррелировать.
`--scope all` дополнительно перечисляет **каждый установленный пакет ОС**
(`dpkg`/`rpm`/`pacman`/`apk`/`brew`/`pkg`/`pkg_info`), расширяя сопоставляемую
поверхность в 10–50 раз. Пакет, который также обеспечивает работу запущенного и
доступного процесса, сохраняет эту доступность (активы дедуплицируются и
объединяются по координатам). Ядро покрывается как свой пакет (`linux-image…`)
при `--scope all`.

> `--scope all` может дать от сотен до тысяч пакетов. На бесплатном тарифе
> (15 поисков/час) это приведёт к ограничению частоты запросов; инструмент
> предупреждает, когда инвентаризация превышает бюджет. (Поиски уже
> пакетируются; локальный кэш результатов — в планах.)

## Поддержка по ОС

| ОС | Обнаружение | Источник координат |
|----|-----------|-------------------|
| Linux (systemd) | `ListUnits` → `/proc/<pid>/exe` | dpkg / rpm / pacman / apk |
| Linux (SysV/OpenRC) | `service --status-all` / `rc-status` | база пакетов |
| macOS | `launchctl list` → `ps` (только сторонние) | Homebrew |
| FreeBSD / DragonFly | `service -e` | `pkg` |
| OpenBSD | `rcctl ls started` | `pkg_info` |
| NetBSD | статус `/etc/rc.d` | `pkg_info` |
| Solaris / illumos | `svcs` → `svcprop` | зонд (`--version`) |
| Windows | `Win32_Service` → `Get-NetTCPConnection` / `netstat` | реестр / winget / Appx / Chocolatey / Scoop → CPE; npm / pip / dotnet → purl; сборка ОС → CPE |

Если ни один пакет не владеет бинарником, версия определяется через усиленный
зонд `--version` (только абсолютные пути, очищенное окружение). В macOS
системные сервисы Apple (`com.apple.*`, пути под защитой SIP) пропускаются — они
покрываются версией ОС, и зондировать сотни из них бессмысленно.

В **Windows** всё собирается через встроенный `powershell.exe` (без
дополнительной среды выполнения и без прав администратора для базовой
инвентаризации). Установленные приложения сопоставляются с NVD CPE через
курируемую таблицу имён (несопоставленные приложения используют поиск по имени,
а не неверное предположение); редакция/сборка ОС становится CPE ОС с
квалификацией по функциям (например, `windows_11_23h2`); а
`--windows-missing-updates` добавляет опциональное уведомление агента Windows
Update об ожидающих исправлениях безопасности.

## Выходные данные

JSON с детерминированными (отсортированными) ключами и без отметки времени,
чтобы отчёты давали чистый diff:

- **`services`** — `pkg@version` → подтверждённые находки (`cveId`, `severity`,
  `cvssScore`, `epss`, `kev`, `riskScore`, `decision`, `confirmed`, `matchedRange`,
  `matchBasis`, `fixedVersions`, `remediation`, `cwes`, `references`, `radarUrl`),
  сначала с наибольшим риском.
- **`unconfirmed`** — координатные совпадения, версия которых не может быть
  подтверждена (триаж).
- **`assets`** — `pkg@version` → `{ exe, versionSource, exposed, reachability, listeners }`
  (`versionSource` = `package-db` | `probe`; `reachability` охватывает TCP **и**
  UDP).
- **`byCve`** — каждый CVE свёрнут по всем затронутым активам («исправил один
  раз — устранил многие»).
- **`errors`** — ошибки поиска по каждому активу, чтобы сбой никогда не читался
  как «чисто».
- **`registration`** — присутствует, когда запуск зарегистрировал хост: `host_id`,
  `monitoring`, `drift`, `summary`, `newSinceLastCount`.
- **`meta`** — `{ tool, version, schemaVersion }` (`schemaVersion` 2).

Отчёт SARIF 2.1.0 (`--sarif`) также доступен для интерфейсов сканирования кода.

## Экосистема OffSeq

| | |
|---|---|
| [**OffSeq**](https://offseq.com) | Аудит безопасности ЕС, мониторинг угроз, CISO-as-a-Service, соответствие NIS2 |
| [**Radar**](https://radar.offseq.com) | Разведка угроз в реальном времени — каталог, с которым сопоставляет threat-finder |
| [**Radar Console**](https://radar.offseq.com/console) | Подписки, пользовательские фиды и ваш `OFFSEQ_API_KEY` |
| [**Radar API**](https://radar.offseq.com/api-docs) | REST-документация для конечной точки `/match`, используемой здесь |
| [**Radar Threats**](https://radar.offseq.com/threats) | Поисковая база CVE / вредоносных программ / субъектов угроз |
| [**Radar Feeds**](https://radar.offseq.com/feeds) | Пользовательские фиды, агрегирующие CISA, CIRCL, ThreatFox, … |
| [**Radar Pricing**](https://radar.offseq.com/pricing) | От бесплатного тарифа до Enterprise |
| [**Breach**](https://breach.offseq.com) | Мониторинг утечек данных в даркнете и скомпрометированных учётных данных |
| [**Veil**](https://veil.offseq.com) | Клиентская PNG-стеганография (AES-256-GCM) |
| [**Guard**](https://offseq.com/guard/) | AI-аналитик безопасности и соответствия веб-сайтов |
| [**Training**](https://training.offseq.com) | Аккредитованные PECB курсы по безопасности и конфиденциальности |

## Разработка

```sh
cargo build --release
cargo test                 # unit tests
cargo test -- --ignored    # + macOS live-discovery smoke test
cargo clippy --all-targets
```

Движок — это библиотечный крейт (`find_threats`) с абстракцией `Collector`
(сейчас — запущенные сервисы и пакеты ОС; далее — lock-файлы / контейнеры /
SBOM), поэтому бинарник — это тонкий CLI поверх него.

## Лицензия

Двойное лицензирование: [MIT](https://github.com/offseq/threat-finder/blob/main/LICENSE) или [Apache-2.0](https://github.com/offseq/threat-finder/blob/main/LICENSE), на ваш выбор.
Скачать инструмент