SBOM 证明了你安装了什么,但它无法证明你是否应该安装。

SBOM 就像一张收据。它告诉你安装了什么,但它无法告诉你安装它是正确的决定。

大多数团队在 CI/CD 流水线中使用 SBOM 和 CVE 扫描。这些工具在发现现有软件包中的已知漏洞方面非常出色。但在使用 AI 编程代理(AI coding agents)时,它们存在一个巨大的盲点。

AI 代理会提议一个包名。无论这个名称是真实的、幻觉产生的,还是拼写劫持(typosquat),它都会以同样的自信程度提出。

如果攻击者昨天注册了一个恶意包名,它目前还没有 CVE。你的安装后扫描会看到它并将其标记为安全。扫描结果是诚实的,但它回答错了问题。它回答的是“这是否已知是坏的?”,而不是“我们的技术栈中是否应该存在这个名称?”

等到 SBOM 记录下一个恶意包时,损害已经造成了。恶意代码通常在安装阶段通过 postinstall 脚本运行。在你的扫描器看到文件树之前,它就可以窃取你的环境变量和 CI 密钥。

你需要在副作用发生之前做出裁决。

我构建了一个简单的工具来解决这个问题。它是一个安装前溯源网关(pre-install provenance gate)。它的工作方式与扫描器不同:

• 它在 npm install 运行之前检查名称。 • 它针对已验证的基准线采用“默认拒绝”(default-deny)的方法。 • 它通过测量与热门软件包的编辑距离来标记拼写劫持(typosquats)。 • 它能捕捉到与任何已知良好名称都不匹配的幻觉。 • 它会验证你的 .npmrc,以确保你没有访问恶意注册表(rogue registry)。

该工具是离线的、无需密钥的,并且仅使用 Python 标准库。它不连接网络,不解析软件包。它只是查看提议的名称并询问:“我们是否认可这个名称?”

如果该名称不在你的已验证快照中,也不在热门基准线中,网关将返回 DENY。

不要只依赖于对已发生事件的记录。开始决定允许发生什么。

Source: https://dev.to/alex_spinov/an-sbom-proves-what-you-installed-it-cant-prove-you-should-have-117c

Optional learning community: https://t.me/GyaanSetuAi