2025 年 8 月的十天里,攻击者对 700 多家组织的 Salesforce 实例跑了批量导出查询——Cloudflare、Zscaler、Palo Alto Networks、Google 都在其中。没有恶意软件触发,没有用户被钓鱼,没有任何登录看起来可疑。每一个查询都经由这些公司自己刻意、合法接入的 Drift 聊天机器人集成到达——用的是从 Drift 基础设施里偷走的 OAuth token,而攻击者早在几个月前就溜进了 Salesloft 的 GitHub。token 不在乎 MFA。流量没有触发告警,因为它和聊天机器人正常干活的样子无法区分。攻击者真正的目标埋在这些支持工单里:客户们贴心地贴进工单的 AWS 密钥、Snowflake token 和密码。
本系列十二篇以来,我们建的每一项控制都在你的边界之内。本篇讲的是那部分令人不安的剩余:你的安全水位,如今是你自己的水位和你点过“授权”的每一家供应商的水位的并集——而你没法给他们打补丁。Verizon 的 2025 年 DBIR 把第三方放进了 30% 的泄露事件里,同比翻倍。Salesloft-Drift 链条就是解释为什么的解剖课。
链条本身就是教训
那次事件里的每一跳都是一段受信任的关系,这正是它奏效的原因:
注意那些失败点,因为它们全都平淡无奇。带着宽泛 scope 的 token 几个月不轮换。对数百个租户的批量 SOQL 导出看起来就像正常的集成行为,因为没人在盯集成的行为。而在大多数受害公司,Drift 这个连接端到端没有负责人——它是销售运营的某个人接上的,批过一次,然后被遗忘。Salesforce 最终吊销了所有 token 并把应用下架;受害者在通知邮件里发现自己的敞口。续集在 11 月到来,Gainsight 的 Salesforce 集成应用,同一个剧本。这不是一种事件类型,而是新的默认攻击形态:Unit 42 的 2026 年报告说,供应链风险已经从有漏洞的代码扩展到对可信连接的滥用——而机制,再一次,是身份。
无人能出示的清单
找一屋子 SaaS 从业者,问“当前有哪些第三方服务能访问你们的环境?”,看着那些自信的表情垮掉。采购知道你们付钱买什么;没人追踪员工连接了什么:有 Gmail 读取权限的日历插件、Zoom 里的 AI 记录员、市场同事授权进数仓的分析代码片段。Drift 集成在大多数受害公司都活在这个影子层里。
修法是从访问侧而不是支出侧建清单:枚举 Google Workspace 和 Microsoft 365 里的 OAuth 授权、Salesforce 和 Slack 里的已连接应用、你自己管理后台里的 API token。然后按可达范围分层,永远不按花费分层——一个持有 Salesforce 全域 token 的 200 美元/月小挂件,优先级超过你六位数年费的存储供应商。第 1 层(持有客户数据的处理方)享受全套待遇:SOC 2 评审、合同 SLA、持续监控。第 2 层(带限定访问的集成)享受最小 scope 和行为告警。第 3 层享受一条浏览器政策和一个耸肩。而影子层要被发现,每季度一次,因为它会再生。
集成就是身份——像管身份一样管它们
第 2 篇给了每个人类一个生命周期:入职、转岗、离职。Drift 事件就是非人类身份没有生命周期的样子。OAuth token 是绕过 MFA 的凭证,往往比创建它的员工活得更久,并不断积累没人复查的 scope。OWASP 的非人类身份 Top 10 读起来就像这次事件的尸检报告:长效 token、过度授权、有漏洞的第三方 NHI。本可以钝化它的治理,就是把同一个生命周期应用到机器上:
- 授权时就限定 scope——读聊天记录的机器人不需要你 CRM 的
full权限。大多数厂商要宽 scope 是因为省事;往回压是一场你被允许进行的谈判。 - 有主——每个集成都有一个具名的人类负责人,收得到厂商的安全邮件,感受得到告警的疼。
- 监控行为——一个平时只读单条记录的集成突然批量导出,这就是 Drift 的信号。第 3 篇的审计管道已经在产生这些事件;缺的是那条告警规则。
- 轮换和过期——不能轮换的 token 进入定期复查;90 天未使用的 token 吊销。幽灵集成是免费的攻击面。
真正重要的合同层
纸面挡不住泄露,但它决定泄露之后发生什么——而监管者已经开始给纸面打分。2025 年 1 月起适用的 DORA,要求金融实体对每一项 ICT 合作维护一份信息登记册、评估集中度风险、持有事先写好的退出策略。GDPR 第 28 条让你的子处理方清单成为法律 artifact。你的企业客户的问卷(第 2 篇)两个都要。真正能回本的是这些条款:
- 以小时计、而非“无不合理延迟”的泄露通知 SLA——你的第 6 篇披露时钟(72 小时、24 小时)在走,而供应商在斟酌;合同决定你是从他们那里还是从新闻里得知他们的事故。
- 审计与取证权——年度 SOC 2(按第 5 篇的方法读:意见、偏差、CUEC),外加报告迟到时追问的权利。
- 带牙齿的安全底线——控制失效时的终止权。DORA 在其管辖行业把这变成强制;在任何地方它都是好卫生。
- 子处理方穿透——他们的供应商变成你的第四方;链条变化时你要得到通知,因为 TikTok 级别的传输问题(第 10 篇)正是藏在那里。
一句诚实的告诫:自证不等于观察。现代供应商评审里最有用的信号是分歧——问卷写得光彩照人,而外部姿态(暴露的服务、泄露的凭证、打补丁的节奏)说的是另一回事。信任,然后从外面验证。
风险在停用环节才真正退休
供应商关系会结束;供应商的访问权很少跟着结束。停用清单很短且没有商量余地:吊销每一个 token 和 OAuth 授权、轮换他们持有过的一切、确认你的数据被删除(如果提前规划过,第 8 篇的加密粉碎让这成为一个可验证的事件,而不是拉钩上吊的保证),并记下日期。“我们停止付费了”不是停用——token 没收到这份备忘录。
并且只维护一份清单,而不是三份:DORA 的登记册、GDPR 的第 28 条清单、你对外公开的子处理方页面,应该是同一份文档的三种渲染。在 Drift 事件里做对的公司,是那些能在几分钟内回答的公司:我们接了吗、什么 scope、先吊销哪一个?
系列的下一站
只剩一扇门了,而它是框住其他所有门的门框:收官篇——十二篇蒸馏成一张成熟度地图、让控制措施在文章结束后继续活着的节奏,以及把整个系列变成一张清单的年度自审。下一篇见,那也是最后一篇——这个系列从来都定位成开放式的,但每扇好门都配得上一个门框。
练习
- 今天就建访问侧清单:导出核心系统里的每一个 OAuth 授权、已连接应用和 API token。按可达范围分层。吊销一切没人认得的东西——影子层会再生,所以把下一次清扫放上日历。
- 按数据访问量挑出前三家供应商,检查合同:以小时计的通知 SLA、审计权、控制失效终止权、子处理方穿透。缺失的条款,白纸黑字写进下一次续约的议程。
- 把 Drift 场景搬上桌面演练:“我们的聊天供应商刚宣布他们的 OAuth token 上个季度被偷了。” 谁按什么顺序吊销什么?你在哪个时钟上对客户说什么?如果答案包含“先找到当初接这个集成的人”,你就找到了 ownership 缺口。