Safeguard Docs

Continuous Scanning

Safeguard re-evaluates every asset against new vulnerabilities, new malware signatures, and new policy rules continuously — not just at build time.

The /v1 REST endpoints on this page are not yet available — every path under https://api.safeguard.sh/v1/ returns 404 today. They describe the intended shape only. See API Reference for what is supported now.

Continuous Scanning

Scanning at build time tells you the state of an artifact the moment it was built. That's not enough. A dependency you shipped on Monday can become vulnerable on Thursday when a new CVE is published. Continuous scanning closes that gap.

Safeguard re-evaluates every asset in your inventory — SBOMs, container images, AI models, source repositories, vendor SBOMs — every time the world changes.

What "Continuous" Means in Safeguard

Three signals drive rescans:

  1. Vulnerability feed updates — when a new CVE, GHSA, OSV entry, CISA KEV addition, or EPSS score change affects a component you use.
  2. Safeguard zero-day publication — when the research team publishes an SG-YYYY-NNNNN advisory.
  3. Asset change — when a repository gets a new commit, a registry gets a new image tag, or a vendor uploads a new SBOM.

Rescan latency is measured in seconds to minutes, not hours:

TriggerMedian latency from trigger → scored findings in your UI
New CVE in NVD< 2 minutes
CISA KEV addition< 60 seconds
EPSS score delta > 0.1< 5 minutes
Safeguard zero-day publicationinstant (pre-staged)
New asset pushed to registry< 3 minutes

What Gets Scanned, Continuously

AssetFrequencyMechanism
Source repositoriesEvery push + hourly pullGit webhook + scheduled pull for missed hooks
Container imagesOn push + every 4 hours for running imagesRegistry webhook + runtime collector reconciliation
Packaged artifacts (jars, wheels, etc.)On publish + on vulnerability-feed deltaRegistry listener + feed-driven rescoring
AI modelsOn publish + weekly re-validationModel registry listener + Eagle reclassification
SBOMs (yours and vendors)On upload + hourly feed-driven rescoringPortal ingestion + feed-driven evaluator
Kubernetes workloadsOn admission + every 15 min runtime reconciliationAdmission controller + runtime collector
VendorsOn SBOM upload + on SLA expiry (configurable)TPRM scheduler

Feed-Driven Re-Scoring

The expensive part of scanning is not extraction — it's comparing every component to every known advisory. Safeguard inverts this:

  • Components are stored as searchable nodes in the Safeguard knowledge graph.
  • New advisories are matched to components via purl, version range, and CPE resolution.
  • Only affected assets get rescored; unaffected assets are never re-traversed.

This lets Safeguard rescan a fleet of 50,000 SBOMs in seconds when a new advisory lands, instead of minutes or hours.

Notifications

When a continuous scan produces a new or escalated finding, Safeguard routes the alert by:

  • Owner (from CODEOWNERS, container labels, or manual assignment).
  • Severity band (critical / high / medium / low).
  • Exploitation status (KEV-listed, EPSS > 0.7, PoC available).
  • Environment (production flows differently than dev sandboxes).

Configure routes in Settings → Notifications:

  • Slack / Teams / Discord channels.
  • Jira / Linear / Azure Boards ticket creation.
  • Email digests (per-user, daily or weekly).
  • PagerDuty / OpsGenie on-call pages for critical-KEV findings in production.
  • Generic webhook for custom integrations.

Runtime Continuous Scanning

In addition to SBOM-level scanning, the runtime collector (DaemonSet or host agent) continuously observes:

  • Loaded shared libraries and running processes.
  • Image digests of running containers.
  • Open network ports and egress destinations.
  • Anomalous behavior scored by Eagle (see AI Models).

Runtime scans catch components that aren't in any SBOM — for example, a debug tool that got baked into a production image by mistake.

Air-Gapped Continuous Scanning

For air-gapped environments, continuous scanning uses signed, incremental vulnerability database snapshots:

  • Snapshots ship on a schedule (hourly, daily, weekly — you pick) as signed tarballs.
  • A helper downloads snapshots and applies deltas to the on-prem instance.
  • Rescans run locally the moment the delta is applied.

See the air-gapped deployment guide for details.

Rescan History and Diffs

Every asset shows a Timeline of scans:

  • When each scan ran and what triggered it.
  • The diff of findings from the previous scan (added, resolved, changed severity).
  • Griffin-narrated summaries: "3 new high-severity findings since last scan; 2 are in production-reachable code paths."

This makes postmortems straightforward — you can see exactly when a finding entered or left the system.

Tuning Scan Frequency

Most teams should leave defaults on. For specialized needs:

  • Sensitive production workloads — set scan.interval: 5m on the asset label criticality:sensitive.
  • Dev / sandbox environments — set scan.interval: 24h to reduce noise.
  • Vendor SBOMs with SLA windows — set SLA-driven rescans in TPRM.

Settings are in Policies → Scan Policies or via the safeguard policy CLI.

Performance Impact

Continuous scanning is designed to be invisible to your systems:

  • Agentless scans pull metadata from registries and Git providers; no compute runs on your side.
  • The runtime collector uses eBPF where possible (Linux hosts, Kubernetes) — ~1% CPU overhead at p99.
  • Feed-driven rescoring runs in Safeguard cloud; no customer-side work.

API

Trigger an on-demand scan:

safeguard scan --asset <asset-id>
safeguard scan --project <project> --all

Subscribe to scan events via webhook:

POST /v1/webhooks
{
  "event": "scan.finding.created",
  "url": "https://your-endpoint/webhook",
  "filter": { "severity": ["critical", "high"], "env": "production" }
}

On this page