
Scanner di vulnerabilità runtime: individua le CVE nei servizi effettivamente in esecuzione su un host e le classifica in base all'esposizione di rete.
threat-finder individua il software vulnerabile effettivamente in esecuzione su un host — non ciò che un manifest dichiara — e ti dice quali risultati sono raggiungibili in rete. Risolve ogni servizio in esecuzione (e, con --scope all, ogni pacchetto di sistema operativo installato) in un Package-URL esatto e lo confronta con il catalogo OffSeq Radar usando regole di versione native dell'ecosistema, così le build backportate/corrette non vengono segnalate erroneamente.
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
Gli archivi precompilati per Linux/macOS (x86_64 + arm64) e Windows (x86_64) sono nella pagina delle release. Per compilare dai sorgenti è richiesto Rust ≥ 1.87. Sono supportati Linux, macOS, i BSD e Windows.
export OFFSEQ_API_KEY=... # from https://radar.offseq.com/console
threat-finder
Analizza i servizi in esecuzione, stampa un riepilogo ordinato per rischio e scrive il report JSON completo in /tmp/threats.json. Aggiungi --scope all per analizzare anche ogni pacchetto di sistema operativo installato.
threat-finder [OPTIONS]
# 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
Codici di uscita: 0 ok · 1 errore di lookup/IO · 2 chiave API mancante · 3 sistema operativo non supportato · 4 limite di frequenza/quota, o accesso API richiesto (è necessario l'upgrade) · 5 soglia --fail-on raggiunta.
Chiave API (ottienila dalla Radar Console), risolta in quest'ordine:
OFFSEQ_API_KEY (ottima per CI/cron).$XDG_CONFIG_HOME/offseq-rust/config.toml (0600), a meno che non venga specificato --reset.Una sessione non interattiva (--yes / nessuna TTY) senza chiave disponibile esce con 2.
Imposta OFFSEQ_CONFIG_DIR per sovrascrivere la posizione della configurazione (predefinita: la directory di configurazione per utente del sistema operativo) — utile per container/CI che necessitano di un percorso deterministico.
Corrispondenza a coordinate esatte. Ogni asset diventa un purl che porta la sua versione completa (epoch + revisione della distribuzione) e un qualificatore ?distro=, ad es. pkg:deb/ubuntu/openssh-server@1:8.9p1-3ubuntu0.6?distro=jammy. L'inventario viene confrontato in chiamate batch POST /match/batch (una richiesta per blocco delle dimensioni del tier) lato server, con regole di versione native dell'ecosistema (dpkg/rpm/apk/semver) — così una build backportata e corretta come 1.18.0-6+deb11u3 non viene segnalata erroneamente, e non c'è alcuna supposizione di versione lato client. I risultati sono suddivisi dal flag confirmed dell'API: i riscontri confermati vengono riportati; i riscontri per coordinate la cui versione non può essere confermata vengono mostrati separatamente come non confermati / triage (esclusi dal conteggio, da byCve e da --fail-on; puoi eliminarli con --strict).
Correlazione con l'esposizione di rete. Gli scanner di manifest (Trivy, Grype, osv-scanner) leggono gli elenchi dei pacchetti; gli scanner esterni (Nessus, OpenVAS) richiedono un secondo host. Questo strumento mappa il processo di ogni servizio in esecuzione sui socket su cui è in ascolto (/proc/net su Linux, lsof sugli altri Unix, Get-NetTCPConnection / netstat su Windows) e classifica la raggiungibilità — loopback / private / public. Un servizio vulnerabile su 0.0.0.0 è un rischio molto diverso da uno su 127.0.0.1: i risultati vengono ordinati prima per esposizione e --fail-on exposed vincola la CI esattamente a questo. Non viene inviato alcun pacchetto. I risultati includono anche KEV CISA ed EPSS.
Prioritizzazione sensibile all'esposizione. Ogni risultato riceve un riskScore (0–100) e una fascia decision in stile SSVC — act-now · soon · schedule · track — derivati dalla combinazione di severità, EPSS, KEV ed esposizione di rete dell'asset proprietario. Il riepilogo fa precedere ogni riga da un badge in stile [ACT-NOW 92] e ordina in base a esso, così i pochi problemi pubblici e noti come sfruttati emergono in cima a un host rumoroso. Il punteggio usa la stessa formula in locale e lato server (la vista di monitoraggio di Radar aggiunge un piccolo bonus quando un risultato KEV è oltre la data di scadenza — una data che la CLI non ha), e compare in --json e SARIF (properties).
Una scansione singola è un'istantanea nel tempo. Registra un host una volta e Radar continua a controllare: quando una CVE appena pubblicata colpisce una delle sue coordinate, ricevi un avviso (email + Console), prioritizzato in base all'esposizione — nessuna nuova scansione necessaria.
Dopo una scansione interattiva, lo strumento chiede:
Add these 42 services to Radar for continuous monitoring & alerts? [Y/n/never]
Y registra questo host; n salta questa esecuzione; never ricorda la tua scelta (viene salvata nella configurazione e non ti verrà più chiesto). In una nuova scansione riporta anche il drift (+added / -removed / ~changed) e gli eventuali risultati nuovi dall'ultima scansione. Gestisci i tuoi host — attiva/disattiva il monitoraggio, visualizza i risultati, annulla la registrazione — nella sezione Inventory della Radar Console.
Per l'automazione, salta la richiesta: --register registra in modalità non interattiva (disattivata di default in CI), --no-register rinuncia, --host-name <NAME> etichetta l'host e --unregister lo rimuove. Un id stabile per host e la tua preferenza sulla richiesta risiedono in $XDG_CONFIG_HOME/offseq-rust/config.toml. La registrazione non modifica mai il codice di uscita — un intoppo nel monitoraggio non farà fallire la scansione. Richiede un piano Basic/Pro/Enterprise (o Pro Console).
--scope running (predefinito) analizza i servizi attivi — il piccolo insieme ad alto segnale la cui esposizione può essere correlata. --scope all elenca inoltre ogni pacchetto di sistema operativo installato (dpkg/rpm/pacman/apk/brew/pkg/pkg_info), espandendo la superficie confrontata di 10–50×. Un pacchetto che supporta anche un processo in esecuzione ed esposto mantiene quell'esposizione (gli asset vengono deduplicati e uniti per coordinata). Il kernel è coperto come suo pacchetto (linux-image…) con --scope all.
--scope allpuò produrre da centinaia a migliaia di pacchetti. Con il piano gratuito (15 lookup/ora) si incorre nel rate-limit; lo strumento avvisa quando l'inventario supera il budget. (I lookup sono già raggruppati in batch; una cache locale dei risultati è nella roadmap.)
Dove nessun pacchetto possiede un binario, la versione ricade su una sonda --version irrobustita (solo percorso assoluto, ambiente sanificato). Su macOS, i servizi di sistema Apple (com.apple.*, percorsi protetti da SIP) vengono saltati — sono coperti dalla versione del sistema operativo, e sondarne centinaia è inutile.
Su Windows, tutto viene raccolto tramite powershell.exe integrato (nessun runtime aggiuntivo, nessun admin per l'inventario di base). Le app installate vengono mappate alle CPE NVD attraverso una tabella di nomi curata (le app non mappate ripiegano su una ricerca per nome piuttosto che su una supposizione errata); l'edizione/build del sistema operativo diventa una CPE del sistema operativo qualificata per funzionalità (ad es. windows_11_23h2); e --windows-missing-updates aggiunge un advisory facoltativo di Windows Update Agent per le patch di sicurezza in sospeso.
JSON, con chiavi deterministiche (ordinate) e nessun timestamp, così i report producono diff puliti:
services — pkg@version → risultati confermati (cveId, severity, cvssScore, epss, kev, riskScore, decision, confirmed, matchedRange, matchBasis, fixedVersions, remediation, cwes, references, ), prima quelli a rischio più alto.È disponibile anche un report SARIF 2.1.0 (--sarif) per le interfacce di code-scanning.
cargo build --release
cargo test # unit tests
cargo test -- --ignored # + macOS live-discovery smoke test
cargo clippy --all-targets
Il motore è una crate libreria (find_threats) con un'astrazione Collector (servizi in esecuzione e pacchetti del sistema operativo oggi; lockfile / container / SBOM in seguito), quindi il binario è una CLI sottile sopra di esso.
Con doppia licenza MIT o Apache-2.0, a tua scelta.
| Flag | Description |
|---|
-o, --output <PATH> | Scrive il report JSON in PATH (predefinito: richiesta, o /tmp/threats.json) |
--json | Stampa il report JSON su stdout invece che su un file |
--scope <SCOPE> | running (predefinito) o all (+ ogni pacchetto di sistema operativo installato) |
--severity <LEVEL> | Segnala solo i risultati con livello pari o superiore a critical|high|medium|low |
--strict | Scarta i risultati la cui coordinata non è confermata (riporta solo i confermati) |
--fail-on <WHAT> | Esce con codice 5 se esistono risultati corrispondenti: any|critical|high|medium|low|kev|exposed |
--sarif <PATH> | Scrive anche un report SARIF 2.1.0 (per interfacce di code-scanning) |
--include <GLOB> / --exclude <GLOB> | Filtra gli asset tramite glob sul nome (ripetibile) |
-q, --quiet | Sopprime il banner, l'avanzamento e il riepilogo |
--no-color | Disabilita i colori ANSI |
-y, --yes | Accetta i valori predefiniti, non chiede mai conferma (CI/cron) |
--reset | Richiede di nuovo la chiave API, ignorando quella salvata |
--register | Registra l'host analizzato su Radar per il monitoraggio continuo (senza richieste) |
--no-register | Non registrare e non chiedere il monitoraggio in questa esecuzione |
--host-name <NAME> | Hostname descrittivo da inviare con una registrazione |
--unregister | Rimuove l'inventario di questo host da Radar ed esce |
--windows-missing-updates | (Windows) Elenca anche gli aggiornamenti di sicurezza in sospeso da Windows Update Agent (scansione online; eseguire con privilegi elevati) |
-h, --help / -V, --version | Aiuto / versione |
| OS | Rilevamento | Sorgente delle coordinate |
|---|
| Linux (systemd) | ListUnits → /proc/<pid>/exe | dpkg / rpm / pacman / apk |
| Linux (SysV/OpenRC) | service --status-all / rc-status | database dei pacchetti |
| macOS | launchctl list → ps (solo terze parti) | Homebrew |
| FreeBSD / DragonFly | service -e | pkg |
| OpenBSD | rcctl ls started | pkg_info |
| NetBSD | /etc/rc.d status | pkg_info |
| Solaris / illumos | svcs → svcprop | sonda (--version) |
| Windows | Win32_Service → Get-NetTCPConnection / netstat | registry / winget / Appx / Chocolatey / Scoop → CPE; npm / pip / dotnet → purl; la build del sistema operativo → CPE |
radarUrlunconfirmed — corrispondenze per coordinate la cui versione non ha potuto essere confermata (triage).assets — pkg@version → { exe, versionSource, exposed, reachability, listeners } (versionSource = package-db | probe; reachability copre TCP e UDP).byCve — ogni CVE aggregata su tutti gli asset interessati ("correggi una volta, risolvi molti").errors — errori di lookup per asset, così un errore non viene mai letto come "pulito".registration — presente quando l'esecuzione ha registrato l'host: host_id, monitoring, drift, summary, newSinceLastCount.meta — { tool, version, schemaVersion } (schemaVersion 2).| OffSeq | Audit di sicurezza UE, monitoraggio delle minacce, CISO-as-a-Service, conformità NIS2 |
| Radar | Intelligence sulle minacce in tempo reale — il catalogo con cui threat-finder confronta |
| Radar Console | Abbonamenti, feed personalizzati e la tua OFFSEQ_API_KEY |
| Radar API | Documentazione REST per l'endpoint /match usato qui |
| Radar Threats | Database ricercabile di CVE / malware / attori delle minacce |
| Radar Feeds | Feed personalizzati che aggregano CISA, CIRCL, ThreatFox, … |
| Radar Pricing | Dal piano gratuito a Enterprise |
| Breach | Monitoraggio di fughe di dati nel dark web e credenziali esposte |
| Veil | Steganografia PNG lato client (AES-256-GCM) |
| Guard | Analista AI per sicurezza e conformità dei siti web |
| Training | Corsi di sicurezza e privacy accreditati PECB |