跳到主要内容

54 篇博文 含有标签「security」

查看所有标签

MCP 服务端坟场:当你的智能体依赖停止更新时

· 阅读需 12 分钟
Tian Pan
Software Engineer

你的 Agent 每五分钟调用一次的 MCP 服务,其最后一次 commit 还是在八个月前。它所封装的上游 API 在二月份推出了新的身份验证模型。目前有 47 个未解决的 issue,其中 12 个被标记为安全风险。维护者的 GitHub 账号自十月以来就没有过任何活动。你的 Agent 仍然能够连接,仍然能够接收工具描述,仍然能够执行调用 —— 而在无声无息中,每一次调用都流经一段无人看管的基础设施。

这就是 MCP 被遗弃的现状。不是恶意的卷款跑路(rug pull),也不是被攻破的软件包,仅仅是由于疏忽。有人在 2025 年发布了一个有用的服务,被大家采用后,便转向了其他项目。该服务之所以能继续运行,是因为没有任何因素强行让它崩溃。直到它彻底崩溃 —— 而到那时,你的 Agent 每五分钟跨越一次的信任边界其实早已失效。

大多数团队采用社区 MCP 服务的方式与采用 npm 包的方式如出一辙:运行 install 并阅读 README。这种思维模型在面对 MCP 时失效了。在 MCP 中,依赖是一个动态的信任边界,LLM 在循环中携带凭据,并在生产数据上对其进行调用。

你的 OAuth 令牌在任务执行途中过期:长时运行 Agent 的隐形故障模式

· 阅读需 12 分钟
Tian Pan
Software Engineer

当一个生产环境中的 Agent 首次运行 40 分钟,并在 40 个步骤中的第 27 步遇到 401 错误时,故障复盘的情形几乎总是如出一辙。房间里有人会问为什么令牌没有刷新。另一个人指出刷新逻辑是存在的,但它存在于 HTTP 客户端中,而 Agent 的工具封装层(tool wrapper)从未与之对接。第三个人注意到,即使触发了刷新,Agent 的两个并行工具调用也会尝试在同一瞬间轮换同一个刷新令牌,从而导致会话崩溃。大家纷纷点头。然后,团队在接下来的一周里,为一个假设请求会在 800 毫秒内完成的架构苦哈哈地补齐凭据生命周期管理。

OAuth 的设计初衷是让访问令牌(access token)的寿命长于使用它的请求。长运行 Agent 颠覆了这一假设。现在的请求——实际上是在数分钟或数小时内编排的数十次或数百次工具调用链——比令牌活得更久。整个行业花了十年时间围绕“短请求”假设构建库、代理和刷新流,而这些几乎都无法干净地移植到 Agent 循环中。

你的规划器知道用户无法调用的工具

· 阅读需 10 分钟
Tian Pan
Software Engineer

一个免费层级用户打开你的支持聊天窗口并询问:“你能为订单 #4821 退款吗?”你的智能体(agent)回答:“我无法办理退款 —— 这是管理员才能执行的操作。你可以通过控制面板进行升级,或者我可以为你转接。”拒绝是正确的。退款工具上的 ACL 是正确的。而你刚刚告诉了一个匿名用户:存在一个名为 issue_refund 的工具,它受名为 manager 的角色限制,并且你的平台接受格式为 #NNNN 的订单 ID。

你的规划器(planner)知道用户无法调用的工具。这种不对称性 —— 推理层可见完整目录,而动作层仅能执行部分目录 —— 正是大多数智能体权限控制(agent authorization)悄无声息出错的地方。工具边界处的 ABAC 能拦截未经授权的调用。但它无法拦截已经发生的“能力泄露”,这种泄露往往出现在前一个 token 中,比如规划、拒绝,或是关于变通方案的“热心”建议。

语义缓存是安全隐患,而非性能提升

· 阅读需 14 分钟
Tian Pan
Software Engineer

语义缓存命中是唯一一种能在不到一毫秒的时间内,将错误答案发送给错误用户的 LLM 优化方式。SQL 缓存之所以会返回你或他人的数据行,是因为有人写错了 join —— 这种故障模式属于查询 bug。而语义缓存返回另一个租户的响应,是因为两个 embedding 在 0.03 的余弦距离内落到了一起,这正是系统完全按设计运行的结果。缓存完成了它的工作,问题在于这份工作本身。

大多数团队将语义缓存作为一种成本方案来推行 —— 每个 AI 工程 Slack 频道里都流传着一份“削减 70% 账单”的 PPT —— 并且像对待 Redis TTL 一样审查缓存键(cache key):完全不审。这种审查通常交由性能团队负责。安全团队永远看不到设计文档,因为没有人会为“我们增加了一条更快的路径”提交安全审查。六个月后,某人的合规审计发现,“我无法登录我的账户,我的电子邮件是 [email protected]”和“我无法登录我的账户,我的电子邮件是 [email protected]”在向量化后都处于“我无法登录我的账户”的阈值内,于是缓存愉快地向 Bob 提供了原本为 Jane 生成的响应,其中包含了她账户请求的密码重置链接。

这篇文章将讨论为什么语义缓存值得拥有与 SQL 谓词相同的审查严谨性、如何通过缓存键设计从结构上防止跨用户泄露,以及你需要什么样的审计追踪来区分“缓存命中提供了正确答案”与“缓存命中在亚毫秒级延迟下提供了他人的答案”。

Token 消耗是你的 SOC 尚未监控的安全信号

· 阅读需 12 分钟
Tian Pan
Software Engineer

你技术栈中最灵敏的泄露信号并不在 SIEM 中。它隐藏在财务人员月初打开的一份电子表格里。当攻击者窃取了 LLM API 密钥、利用提示词注入(prompt injection)窃取数据,或者通过被入侵的租户会话查询相邻客户的内存时,痕迹首先会表现为 Token 使用异常——这远在任何 DLP 规则触发、任何身份验证警报响起或任何终端代理察觉到异常之前。财务看到了,而安全部门却没看到。

这种差距并非理论上的。Sysdig 的威胁研究团队在观察到攻击者利用窃取的云凭据产生每日五位数的账单后,创造了“LLMjacking”一词。这一类别现已演变成一个有组织的犯罪产业,出现了每个账号 30 美元的交易市场,且有记录显示某些活动让受害者的损失每天超过 100,000 美元。OWASP 记录了一家初创公司因为密钥泄露,在 48 小时内产生了 200,000 美元的账单。斯坦福大学的一个研究小组由于在 Jupyter notebook 中遗忘了一个 Token,在 12 小时内烧掉了 9,200 美元。所有这些事件的共同点是:在安全团队察觉之前,账单图表就已经在几个小时甚至几天前揭示了真相。

受监管行业的 AI 合规基础设施:大语言模型框架没能提供给你的东西

· 阅读需 12 分钟
Tian Pan
Software Engineer

在受监管行业部署 LLM 的大多数团队都会以惨痛的方式发现他们的合规差距:审计员出现并要求提供特定日期哪个文档影响了某个特定输出的完整日志,而团队却无法给出答案。这并不是因为系统没有记录——它记录了——而是因为 LLM 调用的文本日志并不等同于具有防篡改证据的审计追踪,而 LLM API 的响应主体也不等同于输出溯源(Output Lineage)。

金融、医疗和法律领域不仅仅是消费类软件的“更严格”版本。它们需要通用 LLM 框架从未设计的底层基础设施原语:不可变事件链、单次输出溯源、拒绝处置记录(Refusal Disposition Records)以及结构化可解释性钩子。目前流行的编排框架都没有提供这些开箱即用的功能。本文介绍了这种架构差距,以及如何在不重构整个技术栈的情况下弥补这一差距。

多用户 AI 会话:没人在设计阶段考虑的上下文归属问题

· 阅读需 10 分钟
Tian Pan
Software Engineer

2024 年 8 月,安全研究人员发现 Slack AI 在回答查询时会将公开频道和私密频道的内容同时拉入同一个上下文窗口。公开频道中的攻击者可以精心构造一条消息,当 Slack AI 摄取该消息时,就会将指令注入受害者的会话——由于 Slack AI 不引用来源,由此导致的数据外泄几乎无从追踪。这种攻击甚至可以泄露私信中嵌入的 API 密钥。Slack 在负责任披露后修复了这一问题。

这并不是传统意义上的漏洞。它是将上下文视为无用户访问控制的共享可变资源所带来的后果。而这正是大多数正在构建共享 AI 助手的团队现在都在犯的错误,只是更加悄无声息而已。

生产环境中的隐私保护推理:云端API与本地部署之间的光谱

· 阅读需 10 分钟
Tian Pan
Software Engineer

大多数团队将LLM隐私视为一个二元选择:要么将数据发送到云端并承担风险,要么在本地运行所有内容并承担成本。这两种框架都是错误的。实际上存在一个风险特征和工程预算差异显著的方法光谱——大多数团队在这个光谱上的位置是错误的,却浑然不知。

研究人员最近证明,他们可以以每条记录0.012美元的成本,以48.9%的成功率从3912人中提取真实PII。这个统计数字往往被当作学术威胁建模而被忽视,直到安全审计或合规审查落到你的桌上。问题不是是否要关注LLM隐私,而是哪些控制措施真正能改变局面,以及每种措施的实施成本。

RBAC 对 AI Agent 来说还不够:一种实用的授权模型

· 阅读需 13 分钟
Tian Pan
Software Engineer

如今,大多数构建 AI agent 的团队都将授权视为事后才考虑的事情。他们接入一个 OAuth 令牌,给 agent 分配与触发它的用户相同的权限范围(scopes),然后就大功告成了。然而,几个月后,他们会发现一段被操纵的提示词导致 agent 窃取了文件,或者一个受损的工作流在连接的服务中悄无声息地提升了权限。

问题不在于 RBAC 不好。而是在于 RBAC 是为具有稳定工作职能的人类设计的,而 AI agent 既不稳定也不是人类。在一个对话回合中,agent 的“角色”可能从只读研究转变为具备写入能力的代码执行。静态角色无法表达这一点,这种不匹配创造了一个可预见的漏洞攻击面。

生产环境中的 AI 内容溯源:C2PA、审计轨迹与工程师正在忽视的合规截止日期

· 阅读需 14 分钟
Tian Pan
Software Engineer

当欧盟 AI 法案的透明度义务于 2026 年 8 月 2 日正式生效时,每个为欧盟用户生成合成内容的系统都需要为该内容标注机器可读的溯源信息。大多数构建 AI 产品的工程团队对此有模糊的认知,但真正搭建好所需基础设施以实现合规的团队寥寥无几——而在那些已经实施的团队中,相当一部分只完成了监管要求的一半。

面对"AI 内容溯源"这一命题,业界的主流应对方式是指向 C2PA(内容溯源与真实性联盟标准),然后宣布问题已解决。C2PA 固然重要——它真实存在,正被 Adobe、Google、OpenAI、索尼和三星采用,是业内最接近通用标准的方案。但仅凭 C2PA 实施并不足以满足欧盟 AI 法案第 50 条。它无法在你的 CDN 中存活,也无法阻止恶意行为者为篡改内容生成"可信"的溯源记录。

本文将探讨生产环境中 AI 内容溯源的真实需求——技术栈、失效模式,以及让团队措手不及的合规漏洞。

AI 输出的版权陷阱:工程师在演变成法律问题前需要了解的知识

· 阅读需 12 分钟
Tian Pan
Software Engineer

当大语言模型在响应用户提示词时逐字复制受版权保护的文本,谁应该承担法律责任 —— 是模型提供商、构建产品的公司,还是输入查询的用户?在 2026 年,法院正在积极研究这一问题,其答案将直接影响你的生产系统。

大多数工程团队已经接受了这样一个基本叙事:“AI 训练可能会侵犯版权,但那是模型提供商的问题。” 这种叙事在两个重要方面是错误的。首先,基于输出的责任 —— 即模型在推理时产生的内容 —— 在很大程度上与训练数据责任是不同的,且在大多数司法管辖区仍是一个悬而未决的法律问题。其次,你认为从 AI 提供商那里获得的合同赔偿可能比你想象的要窄。

本文涵盖了工程团队面临的实际风险敞口:生产环境中的逐字记忆率(verbatim memorization rates)是怎样的,开源许可证污染如何真正在生成的代码中显现,企业级 AI 协议在哪里留下了风险缺口,以及哪些工程控制措施可以在不停止 AI 采用的情况下切实降低责任风险。

RAG 管道中的 PII 泄露:为什么你的聊天机器人知道它不该知道的事情

· 阅读需 12 分钟
Tian Pan
Software Engineer

你的新内部聊天机器人刚刚告诉一名实习生整个工程部门的薪资范围。HR 总监没有配置错任何东西。没有人分享了不该分享的链接。系统只是... 检索到了它,因为实习生询问了“工程师的薪酬预期”。

这是大多数团队预料不到的 RAG 隐私失效模式。它不是传统意义上的漏洞 —— 而是检索工作方式与访问控制预期方式之间的根本不匹配。