Databricks LLM 恶意软件分诊弥合二进制盲区,但最终判定仍取决于上下文
Databricks 发布了一项 LLM 恶意软件分诊研究,在 70 次经济型模型测试中,将检测失败率从 50% 降至 4%。这一改进并非来自重新训练模型,或改用更昂贵的替代方案,而是在每个模型作出判断前注入结构化的二进制安全知识。
这一结果挑战了 AI 辅助软件包扫描背后的一个常见假设:更强的模型智能并不总是改善薄弱安全判断的最直接答案。当静态分析提供正确的证据与解释框架时,较小的模型也能弥合大部分差距。
这一发现意义重大,因为恶意 npm 软件包并不总会通过可读的 JavaScript 暴露其行为。有些软件包在干净的源文件、可信的元数据和常见的安装脚本背后捆绑了编译后的可执行文件。这些外围上下文可能使未经辅助的模型得出自信却不安全的结论。
10 月 16 日发布的完整实验直接测试了这一失败模式。Databricks 使用精心构造的原生 Node.js 载荷,评估了来自七家供应商的九个模型。随后,它比较了模型在有无能力配置文件这一条件下的判断;能力配置文件是基于静态证据构建的结构化操作手册。
因此,核心对比并非一个模型对阵另一个模型,而是未经辅助的 LLM 推理与基于领域特定证据的 LLM 推理之争。Databricks 发现,这一区别可能决定一个隐蔽的凭证窃取器会被拦截,还是被建议加入允许列表。
Databricks LLM 恶意软件分诊改变了决策上下文
Databricks 并未教会模型逆向工程二进制文件;它改变了模型在作出判断前所掌握的信息。
该公司的流程始于确定性的安全工具。YARA 会扫描软件包归档文件中的已知模式。Semgrep 检查 JavaScript 源代码,而 npm 元数据则提供有关软件包及其声明用途的信息。
一个独立的二进制分析模块会从编译产物中提取证据。系统将这些发现组合进结构化提示词中。随后,LLM 返回结论及其支撑推理,并最多可三次请求更多文件。
Databricks 在证据提取与模型判断之间加入了能力配置文件。每份配置文件代表一种恶意技术,例如凭证收集、持久化、二进制伪装或网络数据外传。它会依据可观察条件,对可疑、恶意和关键阈值进行评分。
当配置文件达到其阈值时,系统会向模型上下文添加约 1,800 个 token 的结构化摘要。模型仍掌握最终判定权,也可以否定配置文件的解释。注入材料充当专家简报,而非固定分类结果。
这一架构将 LLM 安全产品经常混为一谈的两项工作分离开来。静态工具识别导入项、文件属性、元数据与代码模式;语言模型则在更广泛的软件包上下文中权衡这些信号。
实验使用了五种恶意载荷类型,并将其封装为原生 Node.js 插件。它们分别代表凭证窃取器、投放器、反向 Shell、加密货币挖矿器存根和持久化机制。凭证窃取器还以六个混淆级别出现。
每个软件包都包含看起来专业的元数据、合理的 README、JavaScript 绑定和标准构建配置。这些元素营造出正常原生模块的外观,而恶意行为则隐藏在编译后的 .node 文件中。
研究人员针对每个模型运行十个载荷,每个载荷运行两次。其中一次包含能力配置文件,另一次则不包含。除此之外,提示词、二进制证据、推理设置和载荷字节均保持不变。
七个模型构成经济型层级:Claude Haiku 4.5、Gemini 3.5 Flash、Gemma 3 12B、GPT-5.4-nano、Qwen3-Next 80B、GLM 5.3 Flash 和 Llama 3.1 8B。Claude Sonnet 4.6 和 Kimi K3 则提供了能力更高的行为基线。
在没有能力配置文件时,经济型模型组在 70 次测试中的 35 次未达到研究设定的检测阈值。其中 20 次将已知恶意载荷标记为无害。在更严格的恶意阈值下,70 次测试中有 51 次未达标。
配置文件注入后,这 35 次失败中的 32 次转为检测成功。没有任何受测模型对任一构造载荷给出无害结论。仅有三个 GPT-5.4-nano 结果仍低于升级处置阈值,且三者均被标记为可疑。
这正是 Databricks LLM 恶意软件分诊背后的核心变化。模型并未获得新的权重、更广泛的训练,或一堂泛泛的安全课程。它们获得的是与已从软件包中提取的证据相对应的简明解释。
干净的 npm 软件包为何能够隐藏危险二进制文件
当看似无害的软件包上下文压过模型无法自信解读的证据时,二进制盲区便会出现。
Databricks 于 2025 年 11 月开始收集 npm 恶意软件样本。其研究语料库包含 11,413 个通过 OSV npm 恶意软件公告佐证的软件包版本。大多数样本要么携带恶意源代码,要么从外部服务器获取载荷。
仅有 432 个已佐证的软件包版本,即 3.8%,捆绑了二进制文件。这一小比例却造成了不成比例的分诊问题。携带二进制文件的软件包未能获得明确恶意结论的频率,是仅含源代码软件包的两倍以上。
报告中的比率分别为:携带二进制文件的软件包为 14.4%,仅含源代码的软件包为 6.2%。这一差异很重要,因为编译文件会移除许多可读源代码中可用的信号。经剥离的二进制文件也会省略帮助分析师解读函数和数据的符号名称。
npm 软件包可以合法地包含原生代码。性能库、数据库绑定、图像工具、终端和系统工具经常使用编译组件。因此,调用 node-gyp-build 的安装脚本并不自动意味着可疑。
攻击者可以利用这种正常性。他们能够将恶意原生行为置于干净的 JavaScript 绑定和可信的软件包描述之后。专注于软件包整体一致性的模型,可能将这些良性信号视为比含义模糊的二进制导入项更有力的证据。
Databricks 在全部 35 次初始检测失败中都观察到了这种行为。每次失败至少依赖两个良性上下文信号,其中 24 次同时援引了四个此类信号。
全部 35 次都将安装脚本视为标准做法,也都将原生插件封装视为寻常。32 次认为元数据与声明用途一致,另有 21 次依赖干净的 JavaScript。
在 14 个案例中,模型将二进制文件的导入项重新诠释为正常系统调用。fopen、connect 和 gethostname 等函数可以支持合法软件;它们的组合及周边行为决定其究竟表明凭证窃取,还是常规网络活动。
混淆使这一判断进一步恶化。Databricks 发现,随着凭证窃取载荷变得更难检查,一些模型给出的严重性评级反而更低。干净的包装层仍然可读,而能证明问题的二进制证据则变得更难获取。
这一模式与一项更广泛的混淆研究相符,该研究涉及 ChatGPT-4o、Gemini Flash 2.5 和 Claude Sonnet 4。尽管底层程序行为保持不变,编译器变换仍反复导致分类失败。
关于经剥离二进制上下文的研究描述了相关挑战。移除符号会带走用于定位和验证不安全行为的上下文信号。再流畅的推理,也无法重建分析流程从未暴露的证据。
软件包注册表会放大后果,因为软件依赖会直接进入开发和生产环境。MITRE 将供应链入侵定义为:在接收者获得软件、产品或交付机制之前对其进行操纵。
因此,恶意软件包可能从注册表、依赖关系图或遭入侵的维护者账户中继承信任。一旦安装,其二进制文件便可能以应用程序的权限执行。干净的呈现方式本身也成为攻击面的一部分。
能力配置文件将静态线索转化为安全上下文
能力配置文件之所以有效,是因为它们将分散的技术线索转化为模型能够评估的明确主张。
原始导入列表无法解释意图。connect 表示网络连接,而 fopen 表示文件访问;单独看,这两个函数都无法告诉模型某个原生插件正在读取凭证并将其发送到外部。
能力配置文件将此类观察结果组合成针对特定技术的模式。它可以考虑软件包类型、二进制格式、导入项、熵、字符串、元数据和源代码行为。加权阈值随后表达组合证据对某项安全假设的支持力度。
这一过程类似检索增强推理,但检索到的材料来自受审查的软件包本身,而非威胁报告中的通用摘录。每份摘要都将某项技术定义与该次扫描发现的证据关联起来。
对于凭证窃取载荷,配置文件涵盖二进制伪装、凭证收集、网络数据外传和环境侦察。反向 Shell 触发了二进制伪装与反向 Shell 行为的配置文件。投放器则激活了四份关键配置文件。
这种特异性改变了模型的任务。没有配置文件时,模型必须同时推断每个二进制产物的含义以及软件包层面的结论。有了配置文件后,静态逻辑承担了第一步解释工作。
模型随后判断汇集的证据是否支持配置文件的结论。它可以考虑反证、评估软件包包装层,并选择处置动作。这种分工限制了模型权重需要承担的专业知识量。
Qwen3-Next 对凭证窃取器的结果说明了这一效果。没有配置文件时,该模型以 0.98 的置信度将一个混淆样本标记为无害,并建议将该软件包加入允许列表。
注入四份配置文件后,同一模型以 0.98 的置信度将字节完全相同的样本标记为恶意,并建议拦截该软件包。除结构化领域上下文外,没有任何变化。
这种逆转比平均基准改进更重要。高置信度的允许列表建议可能压制后续审查,将不确定的检测器变成错误信任的操作性来源。
实验还识别出四种反复出现的失败模式:合理化、忽视、模棱两可和虚构。这些类别解释了为何仅仅收集更多模型意见,无法可靠地解决问题。
在九个主要模型共进行的 90 次扫描中,约 37% 出现了合理化。模型利用常见的软件包细节来解释并淡化可疑证据。22% 出现了忽视,且往往完全无视二进制导入项。
回避性判断影响了 16% 的扫描。这些模型察觉到了危险,却止步于“可疑”的结论,可能未达到自动拦截阈值。约 23% 的扫描出现了虚构内容,其中包括能力更强模型的回答。
虚构内容带来了另一种运营风险。模型可能得出正确结论,却编造地址、函数或加密例程。这些错误细节会污染审计记录,并误导人工调查人员。
Gemini 3.5 Flash 在未使用能力画像的情况下检测到全部十个载荷。不过,Databricks 报告称,多份解释中出现了捏造的技术细节。分类正确并不代表取证推理可靠。
这一结果支持以证据为先的设计。安全流水线应保留每项主张的来源,并区分提取到的观察结果与模型解读。分析师需要能够将结论追溯到真实的导入项、区段、字符串或源代码行为。
持续维护的技术知识库也能为这一流程中的人工环节提供支持。团队需要便于访问的记录,用于保存画像逻辑、例外情况、审查决策以及不断演变的攻击者技术。
更便宜的模型正在缩小差距,但指标存在局限
在这项实验范围内,成本结论可信;但生产环境结果并不能证明实现了完美的二元检测。
Claude Sonnet 4.6 和 Kimi K3 在未使用画像的情况下检测到每一个构造载荷。Databricks 估算,这些基线模型的单次扫描成本约为预算组的三倍。注入画像后,大多数较便宜的模型也达到了相同的检测率。
新增证据并非没有成本。注入画像后,预算模型接收的输入 token 增加了 9% 到 34%。在大多数情况下,其输出 token 用量也有所增加。
能力更强的模型有时反而消耗更少资源,因为画像减少了探索需求。Claude Opus 4.6 在未使用画像时平均使用约 10,551 个输入 token,使用后则为 7,214 个。Kimi K3 在获得画像证据后,输出 token 减少了 13%。
这些数字表明,更好的上下文可以替代反复请求文件或进行长时间推理。该收益取决于静态阶段的质量。若将薄弱证据包装成流畅文字,只会让错误结论更容易被接受。
这项受控基准仍然规模较小。它使用了来自五类行为模式的十个构造载荷。每个模型在每种条件下仅进行一次受控运行,温度设为零,提示词保持一致。
随着提供商更新其端点,托管模型的行为可能发生漂移。Databricks 承认,绝对结论仅代表某一服务期间。最有力的证据是该期间内相同输入之间的差异。
生产环境验证提供了更广泛、也更复杂的视角。Databricks 识别出 470 个经 OSV 确认含有恶意 npm 包版本,其中包含 604 个原生二进制文件。该集合包括 273 个 PE 文件、215 个 ELF 文件、113 个 Mach-O 文件,以及三个未识别格式的文件。
所有 ELF 二进制文件均被剥离符号。40% 的二进制文件使用 Go 或 Rust 编译,另有 50 个 ELF 文件经过 UPX 打包。这些细节说明,单一的通用原生代码规则会产生薄弱结果。
生产评估涵盖了 425 个具有扫描器结论的恶意包版本,同时还使用了来自 287 个表面上无害包的 2,449 个包版本。无害候选包的月下载量均超过一百万,且从未出现在 OSV 中。
在升级处理阈值下,扫描器报告的精确率为 0.77,召回率为 0.81,F1 分数为 0.79。它找回了 425 个恶意包版本中的 345 个,另有 80 个低于阈值。
无害集合产生了 104 次升级处理,占其包版本的 4.25%。这些警报集中于六个包,约占不同无害包集合的 2%。
在经过筛选的分诊队列中,4.25% 的审查率可能是可控的。但若不加区分地应用于大型依赖生态中的每个包版本,成本将变得高昂。运营量与基准准确率同样重要。
这些标签也带来了不确定性。OSV 公告会将某个包版本标记为恶意,却并不总能指出哪个构件承载了载荷。有些包可能包含无害的第三方二进制文件,而真正的攻击则由恶意 JavaScript 实施。
Databricks 发现,在被判定为无害的 20 个生产包中,约一半包含可识别的第三方工具。示例包括 ripgrep、node-pty 和 NSIS installer plugins。该公告在包级别上仍可能是正确的。
因此,报告的召回率并非对二进制分类能力的纯粹衡量。它衡量的是相对于包级 OSV 标签的决策。Databricks 明确表示,实际二进制性能可能更高,也可能更低。
OpenSSF 的恶意软件包数据库仍然很有价值,因为它以 OSV 格式提供开放报告。不过,在评估二进制检测器时,注册表规模的标签无法替代构件级验证。
无辅助的模型推理如今是承压策略
这项研究对将 LLM 视为主要分析师、而非最终推理层的安全产品构成了压力。
模型优先的设计颇具吸引力,因为它能减少集成工作。团队可以将包内容放入提示词,请求结论,并展示自然语言解释。这种简洁性掩盖了模型对可见证据的依赖。
编译后的载荷暴露了这一弱点。语言模型在反汇编结果或提取特征可用时能够进行解读。仅凭干净的 JavaScript 和专业的元数据,它无法可靠推断被隐藏的行为。
购买更大的模型可以提升基线检测能力。Databricks 观察到,Sonnet 和 Kimi 在未使用画像时检测到了所有构造载荷。然而,这两个能力更强的基线模型在部分扫描中仍产生了虚构推理。
这形成了两项独立要求。检测器必须作出正确的升级处理决策,也必须提供分析师能够验证的证据。
能力画像通过引导注意力关注有意义的组合来满足第一项要求。结构化静态发现则通过将解释锚定在可观察构件上来支持第二项要求。LLM 仍适合用于综合、冲突消解和优先级排序。
多数投票并不能提供同样的保护。在一个经过混淆的凭据窃取器样本上,九个模型的判断分散在无害、可疑、高度可疑和恶意之间。多数判断仍低于检测阈值。
这些错误具有相关性,因为多个模型信任相同的无害上下文。增加更多同样困惑的评委,并不会引入独立证据。投票只会重复这一盲点。
这一战略含义不止适用于 npm。安全团队越来越多地要求 LLM 解读警报、源代码、日志、云配置和身份事件。每项任务都包含通用模型可能无法始终一致应用的领域假设。
最具可辩护性的架构应将提取、解读和决策分离。确定性工具提取事实,版本化画像解读相关组合,模型则负责解析上下文并输出面向分析师的判断。
这并不意味着画像是中立的。其作者会选择阈值、权重、定义和例外。攻击者也可以研究常见规则,并调整其二进制文件以避免触发这些规则。
随着构建系统和恶意软件技术变化,画像可能会过时。如今可疑的导入组合,明天可能出现在流行的合法框架中。反过来,围绕旧系统调用编写的画像也可能遗漏新的数据外泄方法。
因此,这种方法将部分风险从模型选择转移到知识维护。安全团队需要为画像质量、回归测试和误报审查指定负责人,也需要保留版本化证据,说明每条规则存在的原因。
注册表防御仍是独立的一层。npm 的来源证明指南说明了用户如何验证受支持的软件包在何处、以何种方式发布。来源证明可以将构件关联至其源代码提交和构建工作流。
这种验证有助于识别未经授权或遭篡改的发布版本,但无法证明经授权的源代码或编译行为本身安全。恶意软件分诊、来源证明、维护者安全和运行时控制,分别应对同一供应链问题的不同部分。
对采购方而言,关键问题不再是哪种模型在通用安全基准上排名第一。他们应询问:哪些证据会传递给模型、主张如何保持可追溯,以及系统如何处理不确定的二进制文件。
他们还应审查升级处理策略。如果自动化工作流只拦截恶意分类,那么“可疑”结论几乎没有防护价值。Databricks 表明,多个模型识别到了风险,却未能跨过运营阈值。
三项信号将检验这一方法能否泛化
下一项考验是:领域知识注入能否在陌生恶意软件、注册表规模和对抗性适应中持续有效。
第一个信号是基于真实、构件已标注恶意软件的独立复现。研究人员需要能够标识恶意组件究竟是 JavaScript、元数据、安装脚本还是捆绑二进制文件的数据集。
此类标签将提高精确率和召回率估计的准确性,也能揭示画像究竟检测到了实际载荷,还是仅与恶意包标签相关。更强的构件级结果将强化 Databricks 的核心主张。
第二个信号是对未见行为和工具链的表现。Databricks 测试了五种构造攻击模式,并在一个更广泛、源自 OSV 的集合上验证了完整扫描器。未来测试应在画像开发期间保留完整的行为类别。
若能在保留类别上取得成功,将表明该方法捕捉到了可迁移的安全概念。若性能显著下降,则说明画像主要充当针对已知模式的精选规则。
编译器和平台多样性同样重要。PE、ELF 和 Mach-O 文件会暴露不同的元数据和约定。Go 和 Rust 二进制文件也与 C 或 C++ 构件存在差异,这些差异会影响静态分析。
若能力画像系统变得普及,攻击者将作出回应。他们可以替换明显的导入项、延迟执行、动态加载功能,或将恶意行为转移到包的另一层。每种适应方式都可能削弱静态证据摘要。
第三个信号是运营审查成本。Databricks 报告称,在 2,449 个无害包版本中出现了 104 次升级处理,且集中在六个包中。部署数据应展示这些集群将消耗多少分析师工时。
一个可持续的系统必须对相关警报进行分组、保留证据,并从已审查的例外中学习。否则,即使包级误报率不高,也会在不同版本和环境中制造重复工作。
团队还应监控严重漏检,而不仅是总体召回率。Databricks 的生产扫描器将 20 个标有 OSV 恶意标签的包版本判定为无害。其中一些可能将载荷置于捆绑二进制文件之外,但这种不确定性仍然重要。
证据质量应成为一项报告指标。一个分类正确却虚构取证细节的检测器,并不完全可靠。未来评估应将事实依据性与结论准确率分开评分。
Databricks 的 LLM 恶意软件分诊为推理时引入结构化专业知识提供了有力论据。它表明,当安全流水线在请求判断前先解读不透明证据时,较便宜的模型也能作出更好的决策。
这并不能证明提示时知识能够消除二进制文件问题。这些配置依赖于静态可见性、持续维护的规则以及攻击者可以探测的阈值。生产环境标签同样没有解决一个悬而未决的问题:究竟是哪一个工件存在恶意行为。
安全团队现在应测试一个务实命题:在为更大模型付费之前,现有模型是否能在获得更充分证据时取得提升?基于已审查的软件包构建评估集,保留工件级标签,并对比在有无领域上下文条件下的相同扫描结果。有价值的结果不是一套看似令人信服的解释,而是一项可追溯的判定:即使软件包表面干净、二进制文件却并非如此时,它依然经得起检验。



