14 KiB
		
	
	
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			14 KiB
		
	
	
	
	
		
			Executable File
		
	
	
	
	
3 · Product Vision — Stella Ops
1) Problem Statement & Goals
We ship containers. We need:
- Authenticity & integrity of build artifacts and metadata.
- Provenance attached to artifacts, not platforms.
- Transparency to detect tampering and retroactive edits.
- Determinism & explainability so scanner judgments can be replayed and justified.
- Actionability to separate theoretical from exploitable risk (VEX).
- Minimal trust across multi‑tenant and third‑party boundaries.
Non‑goals: Building a new package manager, inventing new SBOM/attestation formats, or depending on closed standards.
2) Golden Path (Minimal End‑to‑End Flow)
flowchart LR
    A[Source / Image / Rootfs] --> B[SBOM Producer\nCycloneDX 1.6]
    B --> C[Signer\nin‑toto Attestation + DSSE]
    C --> D[Transparency\nSigstore Rekor - optional but RECOMMENDED]
    D --> E[Durable Storage\nSBOMs, Attestations, Proofs]
    E --> F[Scanner\nPkg analyzers + Entry‑trace + Layer cache]
    F --> G[VEX Authoring\nOpenVEX + SPDX 3.0.1 relationships]
    G --> H[Policy Gate\nOPA/Rego: allow/deny + waivers]
    H --> I[Artifacts Store\nReports, SARIF, VEX, Audit log]
Adopted standards (pinned for interoperability):
- SBOM: CycloneDX 1.6 (JSON/XML)
- Attestation & signing: in‑toto Attestations (Statement + Predicate) in DSSE envelopes
- Transparency: Sigstore Rekor (inclusion proofs, monitoring)
- Exploitability: OpenVEX (statuses & justifications)
- Modeling & interop: SPDX 3.0.1 (relationships / VEX modeling)
- Findings interchange (optional): SARIF for analyzer output
Pinnings are policy, not claims about “latest”. We may update pins via normal change control.
3) Security Invariants (What MUST Always Hold)
- 
Artifact identity is content‑addressed. - All identities are SHA‑256 digests of immutable blobs (images, SBOMs, attestations).
 
- 
Every SBOM is signed. - SBOMs MUST be wrapped in in‑toto DSSE attestations tied to the container digest.
 
- 
Provenance is attached, not implied. - Build metadata (who/where/how) MUST ride as attestations linked by digest.
 
- 
Transparency FIRST mindset. - Signatures/attestations SHOULD be logged to Rekor and store inclusion proofs.
 
- 
Determinism & replay. - Scans MUST be reproducible given: input digests, scanner version, DB snapshot, and config.
 
- 
Explainability. - Findings MUST show the why: package → file path → call‑stack / entrypoint (when available).
 
- 
Exploitability over enumeration. - Risk MUST be communicated via VEX (OpenVEX), including under_investigation where appropriate.
 
- 
Least privilege & minimal trust. - Build keys are short‑lived; scanners run on ephemeral, least‑privileged workers.
 
- 
Air‑gap friendly. - Mirrors for vuln DBs and containers; all verification MUST work without public egress.
 
- 
No hidden blockers. 
- Policy gates MUST be code‑reviewable (e.g., Rego) and auditable; waivers are attestations, not emails.
4) Trust Boundaries & Roles
CICI -->|image digest| REG
REG -->|pull by digest| SB
SB --> AT --> TR --> REK
AT --> ST
REK --> ST
ST --> SCN --> POL --> ST
* **Build/CI:** Holds signing capability (short‑lived keys or keyless signing).
* **Registry:** Source of truth for image bytes; access via digest only.
* **Scanner Pool:** Ephemeral nodes; content‑addressed caches; no shared mutable state.
* **Artifacts Store:** Immutable, WORM‑like storage for SBOMs, attestations, proofs, SARIF, VEX.
---
## 5) Data & Evidence We Persist
| Artifact             | MUST Persist                         | Why                          |
| -------------------- | ------------------------------------ | ---------------------------- |
| SBOM (CycloneDX 1.6) | Raw file + DSSE attestation          | Reproducibility, audit       |
| in‑toto Statement    | Full JSON                            | Traceability                 |
| Rekor entry          | UUID + inclusion proof               | Tamper‑evidence              |
| Scanner output       | SARIF + raw notes                    | Triage & tooling interop     |
| VEX                  | OpenVEX + links to findings          | Noise reduction & compliance |
| Policy decisions     | Input set + decision + rule versions | Governance & forensics       |
Retention follows our Compliance policy; default **≥ 18 months**.
---
## 6) Scanner Requirements (Determinism & Explainability)
* **Inputs pinned:** image digest(s), SBOM(s), scanner version, vuln DB snapshot date, config hash.
* **Explainability:** show file paths, package coords (e.g., purl), and—when possible—**entry‑trace/call‑stack** from executable entrypoints to vulnerable symbol(s).
* **Caching:** content‑addressed per‑layer & per‑ecosystem caches; warming does not change decisions.
* **Unknowns:** output **under_investigation** where exploitability is not yet known; roll into VEX.
* **Interchange:** emit **SARIF** for IDE and pipeline consumption (optional but recommended).
---
## 7) Policy Gate (OPA/Rego) — Examples
> Gate runs after scan + VEX merge. It treats VEX as first‑class input.
### 7.1 Deny unreconciled criticals that are exploitable
```rego
package stella.policy
default allow := false
exploitable(v) {
  v.severity == "CRITICAL"
  v.exploitability == "affected"
}
allow {
  not exploitable_some
}
exploitable_some {
  some v in input.findings
  exploitable(v)
  not waived(v.id)
}
waived(id) {
  some w in input.vex
  w.vuln_id == id
  w.status == "not_affected"
  w.justification != ""
}
7.2 Require Rekor inclusion for attestations
package stella.policy
violation[msg] {
  some a in input.attestations
  not a.rekor.inclusion_proof
  msg := sprintf("Attestation %s lacks Rekor inclusion proof", [a.id])
}
8) Version Pins & Compatibility
| Domain | Standard | Stella Pin | Notes | 
|---|---|---|---|
| SBOM | CycloneDX | 1.6 | JSON or XML accepted; JSON preferred | 
| Attestation | in‑toto | Statement v1 | Predicates per use case (e.g., sbom, provenance) | 
| Envelope | DSSE | v1 | Canonical JSON payloads | 
| Transparency | Sigstore Rekor | API stable | Inclusion proof stored alongside artifacts | 
| VEX | OpenVEX | spec current | Map to SPDX 3.0.1 relationships as needed | 
| Interop | SPDX | 3.0.1 | Use for modeling & cross‑ecosystem exchange | 
| Findings | SARIF | 2.1.0 | Optional but recommended | 
9) Minimal CLI Playbook (Illustrative)
Commands below are illustrative; wire them into CI with short‑lived credentials.
# 1) Produce SBOM (CycloneDX 1.6) from image digest
syft registry:5000/myimg@sha256:... -o cyclonedx-json > sbom.cdx.json
# 2) Create in‑toto DSSE attestation bound to the image digest
cosign attest --predicate sbom.cdx.json \
  --type https://stella-ops.org/attestations/sbom/1 \
  --key env://COSIGN_KEY \
  registry:5000/myimg@sha256:...
# 3) (Optional but recommended) Rekor transparency
cosign sign --key env://COSIGN_KEY registry:5000/myimg@sha256:...
cosign verify-attestation --type ... --certificate-oidc-issuer https://token.actions... registry:5000/myimg@sha256:... > rekor-proof.json
# 4) Scan (pinned DB snapshot)
stella-scan --image registry:5000/myimg@sha256:... \
  --sbom sbom.cdx.json \
  --db-snapshot 2025-10-01 \
  --out findings.sarif
# 5) Emit VEX
stella-vex --from findings.sarif --policy vex-policy.yaml --out vex.json
# 6) Gate
opa eval -i gate-input.json -d policy/ -f pretty "data.stella.policy.allow"
10) JSON Skeletons (Copy‑Ready)
10.1 in‑toto Statement (DSSE payload)
{
  "_type": "https://in-toto.io/Statement/v1",
  "subject": [
    {
      "name": "registry:5000/myimg",
      "digest": { "sha256": "IMAGE_DIGEST_SHA256" }
    }
  ],
  "predicateType": "https://stella-ops.org/attestations/sbom/1",
  "predicate": {
    "sbomFormat": "CycloneDX",
    "sbomVersion": "1.6",
    "mediaType": "application/vnd.cyclonedx+json",
    "location": "sha256:SBOM_BLOB_SHA256"
  }
}
10.2 DSSE Envelope (wrapping the Statement)
{
  "payloadType": "application/vnd.in-toto+json",
  "payload": "BASE64URL_OF_CANONICAL_STATEMENT_JSON",
  "signatures": [
    {
      "keyid": "KEY_ID_OR_CERT_ID",
      "sig": "BASE64URL_SIGNATURE"
    }
  ]
}
10.3 OpenVEX (compact)
{
  "@context": "https://openvex.dev/ns/v0.2.0",
  "author": "Stella Ops Security",
  "timestamp": "2025-10-29T00:00:00Z",
  "statements": [
    {
      "vulnerability": "CVE-2025-0001",
      "products": ["pkg:purl/example@1.2.3?arch=amd64"],
      "status": "under_investigation",
      "justification": "analysis_ongoing",
      "timestamp": "2025-10-29T00:00:00Z"
    }
  ]
}
11) Handling “Unknowns” & Noise
- Use OpenVEX statuses: affected,not_affected,fixed,under_investigation.
- Prefer justifications over free‑text.
- Time‑bound waivers are modeled as VEX with not_affected+ justification oraffected+ compensating controls.
- Dashboards MUST surface counts separately for under_investigationso risk is visible.
12) Operational Guidance
Key management
- Use ephemeral OIDC or short‑lived keys (HSM/KMS bound).
- Rotate signer identities at least quarterly; no shared long‑term keys in CI.
Caching & performance
- Layer caches keyed by digest + analyzer version.
- Pre‑warm vuln DB snapshots; mirror into air‑gapped envs.
Multi‑tenancy
- Strict tenant isolation for storage and compute.
- Rate‑limit and bound memory/CPU per scan job.
Auditing
- Every decision is a record: inputs, versions, rule commit, actor, result.
- Preserve Rekor inclusion proofs with the attestation record.
13) Exceptions Process (Break‑glass)
- Open a tracked exception with: artifact digest, CVE(s), business justification, expiry.
- Generate VEX entry reflecting the exception (not_affectedwith justification oraffectedwith compensating controls).
- Merge into policy inputs; policy MUST read VEX, not tickets.
- Re‑review before expiry; exceptions cannot auto‑renew.
14) Threat Model (Abbreviated)
- Tampering: modified SBOMs/attestations → mitigated by DSSE + Rekor + WORM storage.
- Confused deputy: scanning a different image → mitigated by digest‑only pulls and subject digests in attestations.
- TOCTOU / re‑tagging: registry tags drift → mitigated by digest pinning everywhere.
- Scanner poisoning: unpinned DBs → mitigated by snapshotting and recording version/date.
- Key compromise: long‑lived CI keys → mitigated by OIDC keyless or short‑lived KMS keys.
15) Implementation Checklist
- SBOM producer emits CycloneDX 1.6; bound to image digest.
- in‑toto+DSSE signing wired in CI; Rekor logging enabled.
- Durable artifact store with WORM semantics.
- Scanner produces explainable findings; SARIF optional.
- OpenVEX emitted and archived; linked to findings & image.
- Policy gate enforced; waivers modeled as VEX; decisions logged.
- Air‑gap mirrors for registry and vuln DBs.
- Runbooks for key rotation, Rekor outage, and database rollback.
16) Glossary
- SBOM: Software Bill of Materials describing packages/components within an artifact.
- Attestation: Signed statement binding facts (predicate) to a subject (artifact) using in‑toto.
- DSSE: Envelope that signs the canonical payload detached from transport.
- Transparency Log: Append‑only log (e.g., Rekor) giving inclusion and temporal proofs.
- VEX: Vulnerability Exploitability eXchange expressing exploitability status & justification.
8 · Change Log
| Version | Date | Note (high‑level) | 
|---|---|---|
| v1.4 | 29-Oct-2025 | Initial principles, golden path, policy examples, and JSON skeletons. | 
| v1.4 | 14‑Jul‑2025 | First public revision reflecting quarterly roadmap & KPI baseline. | 
| v1.3 | 12‑Jul‑2025 | Expanded ecosystem pillar, added metrics/integrations, refined non-goals, community persona/feedback. | 
| v1.2 | 11‑Jul‑2025 | Restructured to link with WHY; merged principles into Strategic Pillars; added review §7 | 
| v1.1 | 11‑Jul‑2025 | Original OSS‑only vision | 
| v1.0 | 09‑Jul‑2025 | First public draft | 
(End of Product Vision v1.3)