
你的 AI 模型是可执行代码,多数企业却把它们当电子表格
我第一次真正理解这个问题,是在盯着系统调用追踪在一个隔离容器里滚动而过、等着它什么都别做的时候。
我们从一个公共仓库里拉取了一个模型——就是数据科学家一个季度会不假思索地下载上百次的那种。模型卡看起来很正常。它通过了一次基础扫描。我把它加载进沙箱,并不是因为我对那个特定文件心存怀疑,而是因为我已经开始把所有东西都放进沙箱里加载。而当反序列化运行时,追踪显示该进程正试图打开一个它根本没有理由打开的网络连接。
这就是AI 供应链安全在这一刻呈现出的全部论点:你的模型不是数据文件。它们是可执行代码,你一加载它们,它们就会运行。大多数组织把它们当成电子表格——你下载并打开的惰性之物——而模型是什么与它被如何对待之间的落差,正是入侵发生之处。
模型不是你打开的一份文档。它是一个程序,以运行它的人所拥有的权限运行。
反向 shell 的故事甚至都算不上行业里假设出来的传说。Hugging Face 上一个名为 "baller423" 的模型被发现正在向一台外部主机建立反向 shell。它看起来很正常。它通过了基础扫描。有人一加载它,它就运行了任意代码。当我把这个故事讲给满屋子的安全负责人听时,让人不安的并不是这种事情有可能发生——而是他们意识到,自己的团队已经用同样的方式、从同一个来源加载模型,加载了两年。
没人愿意听的 pickle 问题

接下来这部分会让经验丰富的工程师皱眉,因为它不是任何人能打补丁修掉的缺陷。
当你调用torch.load() 在一个 PyTorch 模型上时,它可以在反序列化过程中执行任意 Python 代码。这不是通常意义上的漏洞。它是设计使然的行为,源自 Python 的 pickle 序列化格式——pickle 被允许通过运行代码来重建对象,而一个模型文件不过是一个被 pickle 序列化后的对象。现实世界中超过 80% 的机器学习模型都使用这种格式。因此,整个领域交付模型的默认方式,本身也是一个等着有人来填入内容的远程代码执行原语。
本能反应——也合情合理——是去扫描它。部署最广泛的防御是一款名为 PickleScan 的工具,它在模型文件内部查找已知的恶意模式。而 PickleScan 至少有三个已知的零日绕过手段——CVE-2025-10155 就在其中——之后 Sonatype 的研究人员又在这款扫描器本身中发现了另外四个漏洞。
我这么说,并不是要贬低一个正在做实事的开源项目。我说它,是因为它教给了我一条我如今围绕其构建一切的原则:当攻击者控制了文件格式时,黑名单扫描在结构上注定失败。静态扫描问的是"这个文件是否包含一个我早已知道是恶意的模式?"而攻击者能看到和你一样的那份黑名单,于是只需使用一个你还不知道的模式。
于是我们不再问那个问题。我的团队构建的审查流水线,不以"这个文件里有哪些已知的恶意字符串"作为开端。它们以行为沙箱作为开端:把模型加载到一个隔离容器里,观察它实际上做了什么——系统调用、网络外联、文件写入——并据此判断行为,而不是签名。问题从"这个是否在某份清单上"转变为"这段代码运行时会做什么"。第二个问题才是唯一能抓住那种还没人命名过的攻击的问题。
静态扫描抓住的是昨天的攻击。行为沙箱抓住的是攻击者此刻正在编写的那一个。
它不是免费的,也不是你能从货架上买到的产品。Protect AI——在一笔约 $500–700M、于 2025 年 7 月完成的收购之后,如今已是 Palo Alto Networks 的一部分——扫描了 447 万个模型版本,在超过 51,700 个模型中发现了 35.2 万个不安全或可疑的问题。这就是这座草垛的规模。工具能标记出显而易见的东西。而设计那道横在公共仓库与你内部模型库之间的门禁——并让它快到没人会绕过它——才是盒子里买不到的那一部分。
我建的那道人人都无视的门禁
我想跟你讲讲我做砸了的那个版本,因为那次失败教给我的,比成功还多。
早期,我为一位客户构建了一道模型审查门禁,从技术上讲堪称出色。每一个从公共来源进来的模型都会被拉进沙箱,跨格式地深入分析、进行行为画像,然后才被签名并准入内部仓库。在一次安全评审中,它本会拿到漂亮的分数。我为它感到自豪。
大约一周之内,数据科学团队就悄悄不再使用它了。
并非出于恶意。他们有截止期限。这道门禁给一个工作流实打实地增加了好几分钟,而另一种做法——直接从 Hugging Face 拉取一个模型——只需三十秒。所以当一个实验此刻就需要一个模型时,他们就把它原封不动地拉到一个个人云账户上,然后继续往前推进。我那道漂亮的门禁守护着一个空荡荡的门口,而真正的流量却绕过了大楼的侧面。
那一周为我重新定义了整个问题。AI 供应链安全中最难的那道控制并不是技术上的。而是:一道比不安全路径更慢的安全门禁,每一次都会输。当一个数据科学家能在三十秒内下载一个模型时,任何耗时三十分钟的流程都会被绕开——不是被坏人绕开,而是被压力之下的优秀工程师绕开。这些控制必须足够快,快到让合规变得更容易——比规避它更容易。如果做不到,你就没有一个安全项目。你有的只是一场好评如潮却没有观众的安全表演。
这就是为什么从那以后,关于影子 AI 的数字再也没让我吃惊过。98% 的组织都有员工在使用未经批准的 AI 工具。62% 的安全从业者说,他们没有可靠的办法弄清大语言模型究竟在自己的环境中何处运行。只有约 9% 的企业拥有一套真正运转的 AI 治理系统,尽管三分之一的高管会告诉你他们已经有了全面的追踪。而这个代价并不抽象:IBM 的 2025 年《数据泄露成本》报告将与影子 AI 相关的泄露平均成本定为 463 万美元——比一次标准事件大约多出 67 万美元。
你无法保护你看不见的东西,而眼下,大多数组织看不见自己大部分的 AI。
为什么微调会悄悄解除你最安全模型的武装?

这是我拿到技术团队面前时反应最强烈的一个,因为它与每个人都默认的某种假设相抵触。
那个假设是:我对这个模型做过安全评估,它通过了,所以它是安全的。现实是,安全对齐的脆弱之处,恰恰被评估的时间线完全错过了。在一项研究中,Llama 3.1 8B 对提示注入的抵御力,在仅仅一轮微调之后就从 0.95 分掉到了 0.15 分——而且还不是对抗性微调。是正常、良性、面向特定领域的训练。这大约相当于一项安全属性 84% 的崩塌,而它是由一家公司对模型所做的最平常的事情引起的。
我和一位客户的 ML 团队就为这件事争论过。他们跑过安全评估,模型通过了,他们用自己的数据对它做了微调,然后就准备上线了。我问他们打算什么时候重跑评估。房间里安静了一下,因为诚实的答案是"我们本来没打算跑"。模型通过门禁的时刻,早于那件会破坏它的事。随后它带着实际上已被剥除的护栏进入生产环境,而所有文书都写着它是安全的。
模型是在那个摧毁安全性的步骤之前通过安全检查的。而几乎没人会在那之后再检查一遍。
于是我们把安全评估移到了之后——即微调完成以后——把它做成一道发布门禁,而不是准入门禁,并且把任何一次微调都视为一个使先前安全认证失效的事件。一旦说出口,这听起来几乎太显而易见了。它之所以没成为标准做法,原因和那道没人用的门禁一样:评估的便利时机在准入环节,而每次微调之后都重新评估会带来摩擦。摩擦是敌人,但在这个情形下,它是唯一挡在一份通过报告与一个毫无防御的模型之间的东西。
投毒从另一个方向说明了同一点。研究显示,少至 250 份被投毒的文档,就能在一个 130 亿参数的模型中植入一个后门——约占训练语料的 0.00016%。你不需要大规模地污染数据。你只需要相当于一个舍入误差那么多的量。微软在 2026 年 2 月发表了一个真正令人鼓舞的对策——一种"潜伏特工"检测方法,它无需知道触发短语,就能通过发现一种独特的注意力模式来识别被投毒的模型。这是我见过的、针对一种此前几乎无法检测的攻击的第一个真正的防御。它也恰恰是那种活在研究论文里、而不在你的 CI/CD 流水线里的能力——直到有人去做工程实现,把它落地到那里。
智能体把一次提示注入变成了一条杀伤链
多年来,一个被操纵的模型或一次提示注入,最坏的情况也不过是一个糟糕的输出。模型说了些错话,泄露了些本不该泄露的东西,让你难堪。有边界。烦人。但能挺过去。
智能体 AI 去掉了那个边界。
一个 AI 智能体拥有聊天模型所没有的工具访问权、凭据和执行权限。所以,当你把一条恶意指令注入到智能体会读取的某样东西里时,你不再是在破坏一个答案——你是在向一个能够行动的系统发出命令。GitHub Copilot 曾有一个远程代码执行漏洞,即 CVE-2025-53773,CVSS 评分 7.8,已于 2025 年 8 月修补,其中植入在某个仓库文档里的提示注入,可以让智能体跌入其自主的"YOLO 模式",并升级为对整个系统的完全攻陷。智能体读取了一条恶意注释,将它当作代码执行,于是这台机器就被拿下了。
接着是 2025 年 7 月的 Amazon Q 供应链事件:一个恶意的cleaner.md 提示模板通过一个配置错误的 GitHub 令牌被注入,一个已发布的版本把破坏性命令分发到了一个非常庞大的安装群体中。而在 2026 年,OpenClaw 智能体生态成为了当年第一场重大的 AI 智能体安全危机——63 天里出现 138 个 CVE,超过 135,000 个暴露在外的实例,其市场中 12% 的技能被发现是恶意的。HiddenLayer 的 2026 年威胁报告如今把大约八分之一的 AI 入侵归因于智能体系统。
贯穿所有这些案例的主线是同一条:智能体会把单个被操纵的输入,转化为一条经过编排的、多工具的杀伤链。过去只是一句错话的东西,如今变成了一连串带着真实凭据的真实动作。这是我此刻最担心的前沿,因为它扩张的速度比任何产品品类都追赶得更快,而且目前还没有一套成熟的应对手册来保护它。
那么,你到底该拿它怎么办?
人们总会以各种方式问我:"我难道不能直接买个工具来解决这件事吗?"而诚实的答案是,你能买到的是一些部件,而这些部件正在飞快地变好。
供应商格局已经成熟为一个真正的生态——Palo Alto 的 Protect AI 和 Wiz 在其云与平台套件中负责扫描和 AI 物料清单生成,JFrog 负责保护模型仓库和制品流水线,HiddenLayer 负责运行时检测与响应,NVIDIA 的开源护栏负责应用层的 LLM 控制,Fortanix 则把机密计算带入模型分发。最后这一家很好地说明了为什么单靠工具无法弥合差距:即便在运行时也让模型保持加密的机密 GPU(NVIDIA 的 Hopper 和 Blackwell 系列)确实存在,但把这些可信执行环境接入一条实时推理流水线,是一项专门的工程,而大多数团队根本没有相应的人手。每一家供应商在自己那一块上都确实做得很好。但它们没有一家会设计你端到端的流水线,把它映射到你的义务上,或者改变你的组织实际的行为方式。
而市场的另一半——那些大型战略咨询公司——则会向你兜售相反的问题:一份 200 页的 AI 治理框架、一套董事会演示、可供审计的文档,以及一个战略部分起价约 50 万美元、实施部分则规模膨胀至数百万美元的项目。他们通常不会去做的是:构建模型签名流水线、在你的 CI/CD 内部配置 ML-BOM 生成,或者在网络层搭建影子 AI 检测。你最终得到的是那本活页夹,而不是真正建成的东西。
这道差距——横在只会扫描的工具与只会提供建议的演示稿之间——正是Veriprajna 把 AI 供应链安全当作一项工程来做、而不是当作一份报告来做的全部原因。我们构建的东西是具体的:自动化的模型审查流水线,它对每一个进来的模型进行行为沙箱分析,并用你企业的 PKI 为干净的模型签名;一份 ML-BOM——机器学习物料清单,相当于 AI 版的配料标签,追踪每一个组件及其来源——在流水线内部使用 CycloneDX 标准生成并固定;建立在新兴的 CoSAI 认证工作之上的来源溯源与签名;微调后的安全门禁;以及能够浮现出你的安全工具当前看不见的那些模型的影子 AI 检测。
做到其中大部分所需的标准已经存在。CycloneDX ML-BOM、CoSAI 模型签名,以及 NIST 更新后的对抗性机器学习分类法(AI 100-2),如今都已发布并可供使用。问题从来都不是一个知识问题。按照 Kiteworks 2025 年的衡量,83% 的组织仍然缺乏自动化的 AI 安全控制——他们在盲飞,并不是因为缺少手册,而是因为没人拥有实施它的工程能力。差距在于人手,而不在于想法。
这件事上还有一个监管时钟在走。欧盟《人工智能法案》将于 2026 年 8 月 2 日全面适用,而对于高风险系统,它要求提供真正的技术文档——训练数据来源、合规性评估,正是那种 ML-BOM 天生就是为产出而设计的供应链认证。AI 组件的进口商和分销商将不得不核实他们向下游传递的东西,而提供者及其第三方组件供应商必须以书面形式就各自将共享的信息和技术访问权达成一致。我已经开始把那条条款里没被明说的部分告诉客户:一旦这项法案生效发威,模型来源溯源就不再只是你独自消化的问题——你的供应商必须以书面形式为它作出认证,而那些做不到的供应商,将干脆不再可用。那些把模型来源溯源当作可有可无之物的公司,将会发现它其实是一项备案要求。
真正撬动了预算的那张幻灯片
我会在这些谈话通常结束的地方收尾:在一个董事会面前。
我见过许多构建精良的安全方案拿不到预算,因为它们是以安全方案的方式来推介的——抽象的风险、假设的攻击者、一个听起来像保险的类别。真正奏效的那场演示,是把一个单一的数字摆到桌面上的那一场:463 万美元的影子 AI 泄露平均成本,与构建预防它的那些控制所需的成本相对照。不是恐惧。而是一个差值。这是量化后的风险,这是弥合它要花的钱,这是两者之间的差额。
这种表述之所以奏效,是因为它忠实于这个问题实际的运行方式。这种威胁并不异乎寻常。它就是那套默认的工作流——拉取一个模型、对它微调、把它部署、再也不回头看一眼——运行在每一个用 AI 做构建的组织里,而如今这几乎就是所有组织。CISO 的预算反映了这一点:约 85% 的组织在迈入 2026 年时增加了网络安全支出,而 AI 安全是被讨论得最多的一个预算条目。
在你的环境里,模型是这样一种独一无二的制品:它同时既是你所拥有的最有价值的东西,又是一段你从互联网上一个陌生人那里下载来的、未经验证的可执行代码。除非你同时把它当作这两者来对待——像审查代码一样审查它,像追踪供应链一样追踪它,并且每次改动它时都重新检查它——否则那份说你很安全的报告,审计的不过是一项其实没人在用的控制。如果你正在思考该从哪里入手,那就从那里入手:别再信任模型卡,而要去看模型运行时到底做了什么。


