一个 AI 智能体从在 GitHub 上搜索密钥,到把数据从一个 Azure Key Vault 里拉出来,用了五分钟——而微软全程看着它发生。这个数字不是一份漏洞报告,它是一份预算;而每一份为人类对手写就的密钥泄漏处置手册,都在第一个人类读到告警之前就已经超支了。
微软报告了什么
2026 年 11 月 5 日,微软威胁情报发布了一份记述:威胁行为者正在使用一个名为 ARTEX 的智能体化攻击框架,去寻找并滥用被留在公开代码里的密钥。这个框架驱动的是一堆普通工具——Nmap、curl、wget、Python HTTP 客户端、一个取数工具,以及通过 Playwright 驱动的无头 Chromium——并且对返回结果的分析足以让它自己挑选下一步,用微软的话说,只需有限的人工干预。
| 要素 | 微软报告的内容 | 为何要紧 |
|---|---|---|
| 框架 | ARTEX,一个建立在通用工具之上的智能体化攻击框架 | 没有新漏洞;新的是那个循环 |
| 侦察 | 自 2026 年 8 月起观察到针对 GitHub 的密钥查询 | 「搜索」那一半已经跑了好几个月 |
| 首次利用 | 最早在 2026 年 10 月 28 日出现成功的服务主体登录 | 发现与利用如今是同一条流水线 |
| 最快观测 | 从 GitHub 搜索到 Key Vault 外带,五分钟 | 这就是你的处置手册要与之竞速的数字 |
| 触达范围 | Key Vault、存储账户密钥、App Service 设置与发布凭据、机器学习数据存储、AKS 用户凭据、虚拟机 Run Command、经 Graph 触达的 Microsoft 365 | 一个应用密钥就能把整个租户枚举一遍 |
| 扩散 | 跨多个租户的数十个关联应用;被用于触达下游客户的供应商多租户凭据 | 你的暴露面包含你供应商的暴露面 |
那篇文章里有一句话比「五分钟」更有分量:「删除内容并不会使该凭据失效。」这并不是关于 git 的新事实——删掉一个文件之后令牌依然活着,一向如此——但它是整个时间论证所围绕的枢轴,因为多数团队真正会最先执行的那一步补救,恰恰是什么也没做的那一步。
为什么五分钟让「检测再轮换」退场
把这两个序列并排放在一起,问题就是结构性的,而不是运维性的。一次凭据暴露的处置有四个串行阶段,其中三个需要人:有东西注意到它;有人确认这个发现是一把活密钥、而不是当天的某个误报;有人定位出拥有它的系统;有人在不弄坏那些启动时读取它的消费方的前提下把它轮换掉。老实测量过这件事的团队,在顺利的情形下报出的是「小时」。没有人报出五分钟,因为这条链上没有哪一段是为无人值守而设计的——确认与轮换,恰恰是组织刻意设在复核之后的那两步。
所以这道算术根本不接近,而它也不会因为你更努力就变得接近。面对一个五分钟的循环,把你的检测延迟减半,大约在零个案例里改变结果,因为智能体在你第一个阶段完成之前就已经收工。这与 检查时刻到使用时刻 是同一个结构性论点,只是反着跑:在那里,多加一名复核者会拉宽攻击者可以行动的那个窗口;在这里,给处置多加一名复核者同样会拉宽窗口——而这个窗口本来就已经比那次攻击更长。
随之而来的结论比「一切都坏了」要窄得多。检测依然值得拥有;它是告诉你一次已经发生的事故有多大范围的东西,而范围正是你做 事故响应 和通知下游客户所需要的。它不再是的,是一项控制措施。控制措施改变坏结果是否发生。而面对一个五分钟的对手,「检测再轮换」只改变你多快知道自己丢了什么。
微软自己的清单劈成了两半
那篇文章里的补救建议很长,而值得把它当成两份清单、而不是一份来读。其中几项——扫描仓库、把密钥从代码里移除、立即轮换或吊销已暴露的密钥、把公开暴露的凭据当成已被攻破——都坐在这场竞速里面,而且取决于能否赢下它。另外几项则根本不跟攻击者的时钟赛跑:
- 把 OAuth 应用从基于密钥的认证迁移到托管身份。这是清单上唯一一项把资产本身拿走的措施。没有字符串可提交,所以那五分钟永远不会开始。它也是最难的一项,因此它通常在路线图里排最后、在事后复盘里排第一。
- 启用推送保护。在写入之前放一道门禁,意味着密钥压根不在一个公开仓库里等人来找。它是不需要检测步骤的预防,而 GitHub 在公开仓库上免费提供它——那正是 ARTEX 一直在查询的那个群体。
- 在工作负载身份的条件访问里封禁攻击者的地址。窄而被动,但它是令牌「可用性」的属性,而不是你反应速度的属性:一把只在已知路径上才有效的凭据,对持有者来说价值更低。
- 考虑用蜜罐、诱饵与粘滞陷阱来分流自主智能体。微软的措辞就是线索——自主的。一个人类操作者会权衡一把看起来肥美的密钥是不是诱饵。一个基于「上一次工具调用返回了什么」就往前走的循环不会,而它的速度本身就成了信号:没有任何合法流量会碰到一把诱饵凭据,也没有任何人类会在找到它十一秒后就去用它。这就是 面向智能体系统的蜜标 里的欺骗论证,而这份报告是第一份明确因为「对手是自动化的」而推荐它的大厂记述。
这样读下来,这个发现比它听起来的样子更不「关于 AI」。智能体没有发明任何技术。它只是把每一个「检测—响应」计划一直在悄悄花掉的那点余裕给抽走了——而留下来的控制措施,恰恰是那些有效性从来不取决于你多快注意到的。
重试间隔是第二个发现
埋在这份报告行为细节里的东西,比头条更让人不安。微软描述了一种自适应排障,重试间隔大约为 28、60 和 80 秒——智能体撞上一个错误、等了一会儿、改了做法,然后再试。
这让一项没人写下来、却人人都在依赖的防御退场了:部分配置错误。真实世界里很大一部分安全,来自攻击者放弃。密钥的 audience 不对、角色的作用域设得怪、端点在请求的第一种形状上返回了 403——于是入侵者转向更容易的目标,因为他的时间很贵。智能体的时间不贵。它读完错误、改写一遍,而那种曾经发挥着威慑作用的「别扭」,就变成了一分钟的延迟。
务实的后果是「什么算一个发现」变了。「这个服务主体权限很宽,但那把凭据很难正确使用」在实践中一直被当成低危。它现在就只是「权限很宽」而已。真正能拒绝的 作用域收缩——一个读不到保管库的角色,而不是一个让读取变得麻烦的角色——才是站得住的那一版;而同样的倒置也出现在 被拒之后的升级 里:拒绝是一个循环里的一串 token,不是一个停止条件。
一个应用密钥能触达什么
报告里那张资源清单是该拿给高管看的部分,因为它是附上了具体内容的爆炸半径论证。从一次服务主体登录开始,这些智能体被观察到去找:Key Vault 与存储账户;存储账户密钥、App Service 设置、连接字符串与发布凭据;AI 与机器学习的连接与数据存储;AKS 用户凭据;Azure SQL 的防火墙规则;经 Run Command 的虚拟机;以及经 Graph 的 Microsoft 365 内容——SharePoint、OneDrive、邮箱。
其中两项值得单独点名。Run Command 把一把控制平面凭据变成了虚拟机上的代码执行,而这一步是「只读事故」变成「驻留事故」的地方。而 App Service 设置里的连接字符串 是那种经典的二阶泄漏:保管库原本要保护的东西,常常就以明文配置的形式坐在它旁边——这正是「轮换这些应用能读到的 Key Vault 内容」会出现在那份建议里的原因,也是轮换范围几乎总被低估的原因。它的结构版本在 爆炸半径,而能在攻击者之前把它找出来的审计是一次 对智能体凭据的访问复核。
那条多租户的注记是该带给你的供应商的:微软观察到被攻破的、供应商自有的多租户应用凭据被用于触达下游客户租户。如果你曾对某个第三方应用授予过管理员同意,那么你的暴露面就是他们的密钥卫生、跑在他们的时钟上,而你这一侧除了你大概根本没在读的服务主体登录日志之外,没有任何信号。
这一周该改什么
按每一项能从那五分钟里拿走多少来排序:
- 在所有免费或已经付过钱的地方打开推送保护。这是这里唯一一项一个下午就能做完、而且是预防而非检测的事。门禁与扫描器之间的取舍——以及它们每一个都写在文档里的绕过方式——是 我们对团队真正会部署的那四个工具的比较 的主题。
- 数一数你有多少长期有效的应用密钥,然后为「这个数归零」定一个日期。工作负载身份联邦与托管身份是一次迁移、不是一个开关,这个计划以季度计。启动它是清单上唯一一项把资产拿走、而不是把引线缩短的事;「宁可寿命短,也别指望小心拿」的论证在 凭据寿命。
- 每个环境里种一个蜜标,并为它的首次使用告警。一把放在合理位置、不挂在任何东西上的凭据不花什么钱,而面对一个「其显著特征就是从不停下来思考」的对手,它是你会部署过的最便宜的探测器。
- 把每一个「权限很宽但不好利用」的发现重新定级。那句话的后半截已经不再有分量了。
- 去读你的服务主体登录日志。不是当作控制措施——而是当作「控制失效时告诉你范围」的那个东西,这正是检测仍然承担的工作。检测智能体被攻破 讲了该找什么。
这里没有一条是新建议。新的是顺序,以及这个顺序现在是被强迫的:那些取决于你反应时间的措施,已经被一个「在你被呼之前就收工了」的对手挤出了市场。
常见问题
这是不是意味着密钥扫描没有意义了?
不是——它意味着扫描是一件盘点与事故定界的工具,而不是一项控制措施。你仍然需要知道哪些密钥被暴露了、暴露了多久,因为那决定你要对客户说什么。只是不要指望「找到一把密钥」就是那件阻止它被使用的事。
五分钟是典型值,还是最坏情况?
微软把它呈现为一个被观测到的案例——「至少在一个案例中」——而不是中位数。请把它当成这类工具能力的一个已被演示的下界,也就是一项控制措施必须击败的那个数字,而不是一个你可以据以规划的平均值。
把被暴露的那把密钥轮换掉,事情就完了吗?
很少。报告里的建议还要求从受影响的应用上移除客户端密钥与证书,并轮换这些应用能读到的 Key Vault 内容,因为在那个窗口里被攻破的身份能取到的任何东西,都应当假定已被取走。轮换范围跟随的是「可触达性」,而不是那一根泄漏出去的字符串。
有点名某个具体的威胁行为者吗?
这篇没有。它描述了工具与行为,而没有把这次活动归属给一个具名团伙——而对防守方来说,这反而是正确的置信水平:真正有效的那些控制措施,并不取决于是谁手里握着这个框架。
推送保护能挡住这件事吗?
对它能抓到的那些泄漏,能,而且是结构性地:一把从未进入公开仓库的密钥,不可能在公开仓库里被找到。但每一道门禁都有写在文档里的例外——尺寸阈值、绕过选项、模式覆盖范围——所以诚实的说法是:推送保护拿走了暴露面中一个大的、被充分理解的比例,并留下一个你应当监控、而不是假装不存在的残余。
延伸阅读
本维基上:
- 面向智能体的密钥管理——「传引用、不传值」的规则,以及为什么「换一个更好的保管库」不是解法。
- 凭据寿命——为什么「一把凭据保持有效多久」压过「它被多小心地对待」。
- 面向智能体系统的蜜标——当对手从不停顿时,把欺骗当作探测器。
- 攻击者操作的智能体——这份报告所实例化的那个威胁模型。
- 密钥扫描与轮换智能体——把同一个循环的防守侧造出来。
来源:
- 微软威胁情报,《Threat actors use agentic AI tooling to find and abuse exposed secrets》(2026 年 11 月 5 日)
- GitHub Advanced Security 方案——公开仓库上的推送保护可用性