诉求性作为证据

阻碍运输的因素——首先是可达、未固定、与政策相关的风险。

长尾只需一个滤芯。

~85%关键容器漏洞存在于非活跃代码中(Sysdig 2024 Container Security Report)。可达性分析会询问你镜像中是否存在一条路径能够到达该漏洞函数,并为每个判定——无论是保留还是删除——都签署证明。

工作集

以下屏幕显示了七项发现。一个方块:它可达且未固定。另外六个未固定但不显示可达——它们留在包中,排名较低,从不隐藏。

blocking = reachable × unfixed × policy-relevant

Stella Ops 曝光筛查:一组七项工作发现,其中一项标记为REACHABLE状态阻塞,其余显示为NOT OBSERVED状态
曝光屏幕,v1.0-RC1控制台和示例资产。NOT OBSERVED不是“不脆弱”——未知的存在会一直暴露,直到有证据表明相反。

REACHABLE

从入口点到易受攻击符号的可执行路径通过静态调用图、二进制符号匹配或运行时探针命中来证明。

NOT OBSERVED

目前收集的证据中没有发现可执行的路径。这是关于证据的陈述,而不是脆弱性。该发现保留在工作集中的位置。

两个排名,一个数据集

同一组工作组承担两种工作。在它们之间切换会改变顶部的种类——没有任何东西进出。

船只

排名依据阻碍本次发布的因素:优先可达、未固定、政策相关的风险。

安全

按整个资产环境区的总曝光度排名,包括那些永远不会限制授权的发现。

它改变了排名和重点,而不是数据。

证据从何而来

静态分析在每次扫描中产出判定。二进制符号与运行时事实在你需要时提供更多深度。 CVE公共漏洞和暴露 - 公开已知安全漏洞的唯一标识符

层 1

静态调用图分析

从编译后的字节码与源码构建调用图,再从你的入口点追踪到安全公告所指名的函数。

  • • 可构建调用图的语言:Go、Java、C#/.NET、JavaScript 与 TypeScript、Python、Rust、PHP、Ruby。每个镜像只分析一种语言。其他生态进入 unknown 分类——计分,而非跳过。
  • • 离线提取范围更窄:CLI 从源码树构建调用图仅支持 Go 和 Rust,且使用词法层——SSA 工具链位于 scanner worker 内。其他语言由扫描流水线分析,CLI 消费其已提取的调用图。
  • • Python、JavaScript/TypeScript、Rust、PHP 和 Ruby 依源码文本分析,且每条边都带有置信度——你能看出判定出自哪一层
  • • 不建模反射、动态调用,以及超出已知实现的虚方法分派——每个结果都会声明这一限制
层 2

二进制符号分析

面向无源码可读的原生代码的 CLI 通道:ELF 符号表与 DWARF 函数名,支持 x86、x64 与 ARM64。其结论独立成立,与扫描判定分开。

  • • ELF 符号表与 DWARF 函数名
  • • x86、x64 与 ARM64 反汇编。调试信息仅从 DWARF 读取——不支持 PDB
层 3

运行时eBPF扩展伯克利包过滤器 — 一种Linux内核技术,运行沙箱程序实现高性能可观测性和运行时分析,无需内核模块 探针

把真实的执行数据送进来,Stella Ops 会验证并封存它,作为最强的可达性证据。探针由你运行;RC1 提供接收通路。

  • • 基于 Tetragon 的 eBPF扩展伯克利包过滤器 — 一种Linux内核技术,运行沙箱程序实现高性能可观测性和运行时分析,无需内核模块 工具
  • •记录symbol_id、code_id、hit_count、 loader_base
  • • 隐私保护:未捕获任何参数值

每个判定都被打包为 DSSE 签名证明,将发现绑定到其判定所依据的可执行路径。若无法分析出任何路径,该发现会被标记为未知,而不是被判定为无风险。 DSSEDead Simple Signing Envelope - 用于以加密签名签署任意数据的简单灵活标准

未知作为一流状态

当分析无法确定可达性时,会显式跟踪不确定性 - 不会隐藏或默默地假定安全。

求助性桶默认权重
reachable:proven1.0
reachable:likely0.85
not-observed0.0

数值越高代表风险越大,而非信心越足:该权重用于缩放一条发现的风险分值。运行时确认不会取代路径证明——它提高的是附加在判定上的信心。若分析器根本没有观测到路径,Stella Ops 会报告未观测并附上签名的覆盖范围说明,绝不会说“不可达”:没有观测到路径,并不能证明路径不存在。

政策建议:将 unknown 视为一流判定,为每个严重性设置明确的阈值,并在证据包中记录审核者覆盖原因。

VEX语句的入口

发布者的 VEX 声明汇入同一张证据图,并归一为五种状态——not_affected、affected、fixed、under_investigation、unknown——因此“调查中”是有后果的状态,而非脚注。 VEX漏洞可利用性交换 - 关于漏洞是否在您的上下文中实际可利用的机器可读声明

not_affected affected fixed under_investigation unknown

多个发行机构可以针对同一组件进行通话。当双方意见不合时,K4(Belnap)冲突解决系统将分歧记录为冲突——没有任何平均值,发行方不会默默获胜。

SBOM证据与VEX证据如何融合 →

KEV和EPSS参与——他们不做决定

CISA KEV的列表和EPSS评分是咨询级别的利用信号。它们在工作组内提升了发现的等级和紧迫性。 KEV已知被利用漏洞 - CISA的活跃利用漏洞目录 EPSS漏洞利用预测评分系统 - 预测漏洞被利用可能性的概率评分(0-100%)

Exploit signals attach at the advisory level, not at the finding level. Open a CVE公共漏洞和暴露 - 公开已知安全漏洞的唯一标识符 to read its advisory-level exploit data: the KEV已知被利用漏洞 - CISA的活跃利用漏洞目录 listing and the EPSS漏洞利用预测评分系统 - 预测漏洞被利用可能性的概率评分(0-100%) score belong to the advisory, and they read the same for every service that carries the affected component.

它们不是可达性的证据。你的服务代码中从未加载的KEV条目会改变重点,而不是结论——除非你的策略明确表示已知被利用的发现无论如何都会被阻挡。 有两类规则可以拦截,且彼此独立:CVE 拦截清单完全不考虑可达性;而可达性规则只在已证实路径上拦截——reachable:likely 与 unknown 永不通过它拦截,无论策略列出哪些状态。

A policy gate can combine both kinds of answer in one rule: reachability state together with EPSS漏洞利用预测评分系统 - 预测漏洞被利用可能性的概率评分(0-100%), KEV已知被利用漏洞 - CISA的活跃利用漏洞目录, and CVSS通用漏洞评分系统 - 0到10的严重性评级,指示漏洞的关键程度 thresholds. "Known-exploited and reachable" and "known-exploited regardless of reachability" are both expressible; which one you enforce is your policy, not a default we pick for you.

与CI中的扫描仪相比

扫描仪会回答“这张镜像现在是什么”。这是必要的——但对发布决定来说还不够。

扫描任务带来的效果

  • • 每张镜像的查找列表,每次运行都从头重新生成
  • • 严重程度取自咨询,而非你的通话图表
  • • 在文件中被压制,没有签署记录说明谁接受了什么

Stella Ops新增了什么

  • • 这些发现跨38活跃的咨询来源,然后按可达性进行排名
  • • 每个判定——包括被删除的判定——都有一个DSSE签名、可重放的证据
  • • 结果反馈给发布门,Watch在部署后不断将运行中的摘要与批准的摘要进行比较

Stella Ops不做的事

Trivy 涵盖了 Git 仓库、虚拟机和 Kubernetes 目标,以及配置错误和秘密扫描。Stella Ops没有。其范围包括容器镜像和文件系统快照,每个判定均附有签名且可重放的证据。

完整对比: Stella Ops vs Trivy | Stella Ops vs Grype

实现:节点哈希连接

Reachability分析证明易受攻击的代码是否确实被您的应用程序调用——过滤扫描器噪声中的误报 证据被用于内容寻址以进行重复删除和验证。节点哈希实现了不同版本之间的高效差异化。 节点哈希 SHA256(normalize(purl) + ":" + normalize(symbol)) 路径哈希 SHA256(entryNodeHash + ":" + joinedIntermediateHashes + ":" + sinkNodeHash) Top-K 重要路径保留在证据束中。路径按执行频率(来自运行时)或调用深度(来自静态)进行排名。
Read more

Reachability分析证明易受攻击的代码是否确实被您的应用程序调用——过滤扫描器噪声中的误报 证据被用于内容寻址以进行重复删除和验证。节点哈希实现了不同版本之间的高效差异化。

节点哈希

SHA256(normalize(purl) + ":" + normalize(symbol))

路径哈希

SHA256(entryNodeHash + ":" + joinedIntermediateHashes + ":" + sinkNodeHash)

Top-K 重要路径保留在证据束中。路径按执行频率(来自运行时)或调用深度(来自静态)进行排名。

实现:签名证明

每个可达性分析都会生成存储在内容寻址存储中的加密签名证明。 DSSE?Dead Simple Signing Envelope - 用于以加密签名签署任意数据的简单灵活标准 DSSE 带有in-toto SLSA谓词格式的包络 无需网络访问即可由审核员验证 确定性重放产生位相同的结果 存档图形和跟踪以供离线验证 内容寻址存储路径 cas://reachability_graphs/<hh>/<sha>.tar.zst cas://runtime_traces/<hh>/<sha>.tar.zst
Read more

每个可达性分析都会生成存储在内容寻址存储中的加密签名证明。 DSSEDead Simple Signing Envelope - 用于以加密签名签署任意数据的简单灵活标准

  • DSSE 带有in-toto SLSA谓词格式的包络
  • 无需网络访问即可由审核员验证
  • 确定性重放产生位相同的结果
  • 存档图形和跟踪以供离线验证

内容寻址存储路径

cas://reachability_graphs/<hh>/<sha>.tar.zst

cas://runtime_traces/<hh>/<sha>.tar.zst

以公开的基准真值为准绳

可达性分类器以随公开源码树发布的带标注语料库为准绳:八个覆盖 Java、Node.js、Python、Go、.NET、Ruby、Rust 与 PHP 的最小服务,每个都带有标签文件,按 CVE 声明期望层级——从 R0(在该服务中不可达)到 R4(自入口点可达)——以及理由。

同一源码树中还有按层级为分类打分的评测工具——精确率与召回率,而非一个混合数字。语料库、标签与层级契约都是公开的,你不必接受我们的解读:用你自己的安装扫描同一基准真值,将其报告与公开的期望答案对照。

如何做这项对照,见评估试点第 2.1 步 →

实现:探针eBPF

Stella Ops 通过流式接收端点接受运行时执行事实,并视其为最强的可达性证据。RC1 不提供采集器:基于 Tetragon 的探针是由你运行的检测工具,而可达性分析在没有它们时仍可依靠静态层与二进制层工作。 捕获的探测数据 symbol_id: 规范符号标识 code_id: 代码段标识 hit_count: 执行频率 loader_base: 内存基址 cas_uri: 内容寻址引用 探针将运行时事实提交到POST /signals/runtime-facts/ndjson,作为流式 NDJSON。每个观测值都携带底层伪造物的CAS URI。
Read more

Stella Ops 通过流式接收端点接受运行时执行事实,并视其为最强的可达性证据。RC1 不提供采集器:基于 Tetragon 的探针是由你运行的检测工具,而可达性分析在没有它们时仍可依靠静态层与二进制层工作。

捕获的探测数据

symbol_id: 规范符号标识

code_id: 代码段标识

hit_count: 执行频率

loader_base: 内存基址

cas_uri: 内容寻址引用

探针将运行时事实提交到POST /signals/runtime-facts/ndjson,作为流式 NDJSON。每个观测值都携带底层伪造物的CAS URI。

从你自己的工作组开始

指Stella Ops你今天发的一张镜像,读读它所签署的判定。如果可达性移除的金额低于其声称的,你也会看到——每一次删除都有其证据。

免费层级:3 个环境,且每滚动 24 小时最多 100 次新摘要扫描,自托管。v1.0-RC1,候选发布版。