五分钟,就是你全部的响应窗口

微软威胁情报在 2026 年 11 月 5 日报告:他们观察到一个 AI 智能体从在 GitHub 上搜索密钥,到把数据从 Azure Key Vault 里外带出去,只用了五分钟。这个发现并不是一个新漏洞——它宣告了「检测再轮换」作为首要控制措施的退场,因为微软自己那份补救清单干净地劈成了两半:一半要跟智能体的时钟赛跑,另一半根本不必赛跑。

作者 智能体 AI 维基 19 分钟读完

一个 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 的新事实——删掉一个文件之后令牌依然活着,一向如此——但它是整个时间论证所围绕的枢轴,因为多数团队真正会最先执行的那一步补救,恰恰是什么也没做的那一步。

为什么五分钟让「检测再轮换」退场

Two clocks running on the same leaked credential Two lanes. The upper lane is the attacker's: query GitHub for client secrets, sign in as the service principal, enumerate Key Vault and storage and App Service, exfiltrate secret material — marked from t equals zero to t plus five minutes. The lower lane is the defender's: an alert fires if monitoring is on, triage confirms the secret is live, the owner is found and a change is opened, then every consumer is rotated and redeployed — marked from t plus hours to t plus days. The lower lane begins only after the upper lane has finished. The attacker’s clock Query GitHub for client secrets Sign in as the service principal Enumerate vaults, storage, app settings Exfiltrate secret material t = 0 t + 5 min Your clock Alert fires, if monitoring is on Triage: confirm the secret is live Find the owner, open a change Rotate, redeploy every consumer t + hours t + days
下面那条车道根本无法在上面那条跑完之前启动。

把这两个序列并排放在一起,问题就是结构性的,而不是运维性的。一次凭据暴露的处置有四个串行阶段,其中三个需要人:有东西注意到它;有人确认这个发现是一把活密钥、而不是当天的某个误报;有人定位出拥有它的系统;有人在不弄坏那些启动时读取它的消费方的前提下把它轮换掉。老实测量过这件事的团队,在顺利的情形下报出的是「小时」。没有人报出五分钟,因为这条链上没有哪一段是为无人值守而设计的——确认与轮换,恰恰是组织刻意设在复核之后的那两步。

所以这道算术根本不接近,而它也不会因为你更努力就变得接近。面对一个五分钟的循环,把你的检测延迟减半,大约在零个案例里改变结果,因为智能体在你第一个阶段完成之前就已经收工。这与 检查时刻到使用时刻 是同一个结构性论点,只是反着跑:在那里,多加一名复核者会拉宽攻击者可以行动的那个窗口;在这里,给处置多加一名复核者同样会拉宽窗口——而这个窗口本来就已经比那次攻击更长。

随之而来的结论比「一切都坏了」要窄得多。检测依然值得拥有;它是告诉你一次已经发生的事故有多大范围的东西,而范围正是你做 事故响应 和通知下游客户所需要的。它不再是的,是一项控制措施。控制措施改变坏结果是否发生。而面对一个五分钟的对手,「检测再轮换」只改变你多快知道自己丢了什么。

微软自己的清单劈成了两半

Microsoft’s remediation list, sorted by whose clock it runs on A five by three matrix over the measures Microsoft recommends. Scanning repositories and removing secrets needs detection first, loses a five-minute race, and only narrows future exposure. Rotating on detection needs detection first, loses the race, and arrives after the fact. Push protection needs no detection, is not in the race at all, and prevents the write. Managed identities need no detection, are not in the race, and remove the asset entirely. Honeytokens and tarpits need no prior detection, turn the attacker's speed into a signal, and buy time. Legend: decisive, partial, after the fact. Five measures, three questions Needs detection first In the 5-minute race Changes the outcome Scan repos, remove Yes Yes, and loses Narrows next time Rotate on detection Yes Yes, and loses After the fact Push protection No Not in it The write never lands Managed identities No Not in it No secret to leak Honeytokens, tarpits No Speed becomes signal Buys you the window Decisive Partial After the fact
三个问题,就把「改变结果的措施」与「改变文书工作的措施」分开了。

那篇文章里的补救建议很长,而值得把它当成两份清单、而不是一份来读。其中几项——扫描仓库、把密钥从代码里移除、立即轮换或吊销已暴露的密钥、把公开暴露的凭据当成已被攻破——都坐在这场竞速里面,而且取决于能否赢下它。另外几项则根本不跟攻击者的时钟赛跑:

  • 把 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 内容」会出现在那份建议里的原因,也是轮换范围几乎总被低估的原因。它的结构版本在 爆炸半径,而能在攻击者之前把它找出来的审计是一次 对智能体凭据的访问复核。

那条多租户的注记是该带给你的供应商的:微软观察到被攻破的、供应商自有的多租户应用凭据被用于触达下游客户租户。如果你曾对某个第三方应用授予过管理员同意,那么你的暴露面就是他们的密钥卫生、跑在他们的时钟上,而你这一侧除了你大概根本没在读的服务主体登录日志之外,没有任何信号。

这一周该改什么

按每一项能从那五分钟里拿走多少来排序:

  1. 在所有免费或已经付过钱的地方打开推送保护。这是这里唯一一项一个下午就能做完、而且是预防而非检测的事。门禁与扫描器之间的取舍——以及它们每一个都写在文档里的绕过方式——是 我们对团队真正会部署的那四个工具的比较 的主题。
  2. 数一数你有多少长期有效的应用密钥,然后为「这个数归零」定一个日期。工作负载身份联邦与托管身份是一次迁移、不是一个开关,这个计划以季度计。启动它是清单上唯一一项把资产拿走、而不是把引线缩短的事;「宁可寿命短,也别指望小心拿」的论证在 凭据寿命。
  3. 每个环境里种一个蜜标,并为它的首次使用告警。一把放在合理位置、不挂在任何东西上的凭据不花什么钱,而面对一个「其显著特征就是从不停下来思考」的对手,它是你会部署过的最便宜的探测器。
  4. 把每一个「权限很宽但不好利用」的发现重新定级。那句话的后半截已经不再有分量了。
  5. 去读你的服务主体登录日志。不是当作控制措施——而是当作「控制失效时告诉你范围」的那个东西,这正是检测仍然承担的工作。检测智能体被攻破 讲了该找什么。

这里没有一条是新建议。新的是顺序,以及这个顺序现在是被强迫的:那些取决于你反应时间的措施,已经被一个「在你被呼之前就收工了」的对手挤出了市场。

常见问题

这是不是意味着密钥扫描没有意义了?

不是——它意味着扫描是一件盘点与事故定界的工具,而不是一项控制措施。你仍然需要知道哪些密钥被暴露了、暴露了多久,因为那决定你要对客户说什么。只是不要指望「找到一把密钥」就是那件阻止它被使用的事。

五分钟是典型值,还是最坏情况?

微软把它呈现为一个被观测到的案例——「至少在一个案例中」——而不是中位数。请把它当成这类工具能力的一个已被演示的下界,也就是一项控制措施必须击败的那个数字,而不是一个你可以据以规划的平均值。

把被暴露的那把密钥轮换掉,事情就完了吗?

很少。报告里的建议还要求从受影响的应用上移除客户端密钥与证书,并轮换这些应用能读到的 Key Vault 内容,因为在那个窗口里被攻破的身份能取到的任何东西,都应当假定已被取走。轮换范围跟随的是「可触达性」,而不是那一根泄漏出去的字符串。

有点名某个具体的威胁行为者吗?

这篇没有。它描述了工具与行为,而没有把这次活动归属给一个具名团伙——而对防守方来说,这反而是正确的置信水平:真正有效的那些控制措施,并不取决于是谁手里握着这个框架。

推送保护能挡住这件事吗?

对它能抓到的那些泄漏,能,而且是结构性地:一把从未进入公开仓库的密钥,不可能在公开仓库里被找到。但每一道门禁都有写在文档里的例外——尺寸阈值、绕过选项、模式覆盖范围——所以诚实的说法是:推送保护拿走了暴露面中一个大的、被充分理解的比例,并留下一个你应当监控、而不是假装不存在的残余。

延伸阅读

本维基上:

来源: