每天 8 点5 分钟看懂微软技术圈。今天是 2026 年 9 月 27 日星期日。今日速览两个服务主体在 Azure 里跑完了整条破坏链微软 9 月 25 日公开 JADEPUFFER编号 Storm-3168在 Azure 的完整作业记录一个身份先侦察 15 个半小时另一个接手 7 分钟删掉 100 多个存储账户微软开源了一套开发机自动配置工具Windows Developer Config 用一条 PowerShell 命令、50 个步骤把全新 Windows 11 装成开箱即写的环境文件落在%ProgramData%\CalmOSPlug and Pwn 让 USB 成为免交互提权入口利用 Windows 设备安装流程里的共用安装程序不用真插设备、不用用户点确认就能以系统账户权限装进带漏洞的软件智能体安全有了可复测的流程微软开源 run-assert-eval把威胁建模、失败率度量、运行时策略生成和同套评测重跑接成一个循环示例里跨客户数据泄露从 30.0% 降到 5.9%GitHub Copilot 把聊天记录喂给了智能体Slack 与 Teams 里的 Copilot 能用共享文件、转发消息和频道历史autofix 开始读写 Copilot Memory速报Windows Media Player 经典皮肤提前失效.NET 8、.NET 9 与 PowerShell 7.4 的支持都在 11 月 10 日到期Azure Communication Services 独立服务定档 2028 年 9 月 30 日退役。一、一个身份删掉 100 个存储账户另一个在旁边数了 15 个小时9 月 25 日微软安全研究团队发布了一份关于JADEPUFFER的调查报告。这个名字来自 Sysdig 在 7 月的披露当时被称作第一例有记录的智能体勒索软件。微软把它编号为Storm-3168这次补上的是它在 Azure 里的第一份详细作业记录署名的研究员是 Yossi Weizman 与 Tushar Mudi。时间回到 2026 年 6 月初。同一个租户里有两个被攻陷的服务主体service principal让应用和云对话的非人类账号它们分工很明确。第一个负责侦察。它用大约 15 小时 30 分钟枚举了 Azure 虚机、订阅、资源组和资源成功读取操作超过 300 次。这个时长本身就是一条信息按分钟级枚举能把整个云资产盘一遍拖到十几个小时说明中间没有触发任何值得停下来处理的东西。第二个在第一个开跑约 90 分钟后进场5 秒之内枚举完两个订阅下的虚机与资源组。两个身份用的是同一套基础设施网络指纹相同连 HTTP 的 user agent 都是同一个python-requests/2.34.2。16 小时后第二个身份成功枚举了 App Service 的配置存储像是在找有没有直接写在那里的凭据它同时尝试查找 Azure OpenSearch 资源没找到。接下来是那条 7 分钟的破坏序列。在对一个不存在的存储账户发起 ListKey 失败后不到一秒删除动作就开始了。35 分钟里总共 150 多次破坏或凭据收集操作其中存储账户删除尝试 100 多次大部分目标确实被删掉了。同一资源组里的一个 Key Vault、一个 Function App 和一个 App Service 计划也被删除看起来是支撑那个函数应用的一套东西。有两件事没成功。Azure SQL 数据库的删除全部失败原因是攻击者用了该资源类型不支持的 API 版本这是个硬碰硬的失误。对 Azure Site Recovery 锁和 Azure Backup 保护锁的删除尝试也都失败了。更值得记下来的是那几个被挡住的存储账户。攻击者手里握着相当宽的管理权限但 Azure 资源锁和存储账户级的删除保护把其中几个账户保住了。独立的防护措施在身份已经拿到大权限之后依然有效这一点比最小权限之类的原则更容易被实践验证。破坏结束后大约 30 分钟同一个身份做了一次存储账户清点发出 30 多次成功的 ListKeys 请求让 Azure 把每个存储账户的访问密钥交出来其中包含 Site Recovery 相关的存储。密钥到手后续外泄的路就铺好了。自动化特征写得很清楚执行破坏的那个身份在过程中有五个不同的令牌被签发其中两个同时活跃一个负责删存储另一个同时打 SQL 和存储。微软的措辞是这种时间节奏、两个身份的分工和重叠的令牌流强烈指向自动化或脚本执行。它到底算不算勒索删除动作、对恢复资源的攻击、拿密钥这几件事凑在一起符合勒索与勒索的意图但微软没有观察到勒索信也没有确认数据外泄。所以官方描述停在了破坏性操作与凭据收集上报告本身也把更广的判断写成AI 编排攻击正在成为趋势而不是给这个案子直接贴标签。初始访问是怎么来的目前不清楚。但微软找到了一条很难看的线索其中一个服务主体的 client ID、client secret 和 tenant ID曾经以明文出现在一个公开的 GitHub issue 里发帖的是受害组织的员工。issue 后来被编辑删掉了 secret但 secret 仍然能从这条 issue 的公开编辑历史里读到。微软无法确认这个 secret 是否真的被用于本次活动但它把结论写得很直白发布在互联网任何位置的凭据在被吊销或轮换之前都是可用的删掉原帖不算完成处置。还有一层背景。Storm-3168 的基础设施今年一直在探测其他客户的 App Service 站点包括 Langflow 的代码校验端点。Langflow 是熟面孔JADEPUFFER 第一次被记录的入侵就是通过一个暴露在外的 Langflow 实例进来的。防守清单不长但每条都对应上面某个环节把任何曾经公开过的凭据当作已泄露处理立刻轮换服务主体的权限收到应用真正需要的范围给存储账户上资源锁和删除保护限制并监控对备份与恢复资源的访问。报告里点了一句攻击者用到的全都是普通的角色分配通过组给的 Storage Account Contributor加上直接的 Contributor 和 SQL DB Contributor够用了。已公布的去毒化指标是45[.]131[.]66[.]106、34[.]153[.]223[.]102、64[.]20[.]53[.]230。二、一条命令把新装 Windows 变成开发机同一周还有一个方向完全相反的发布。微软在 GitHub 上开源了一个项目叫Windows Developer Config目标是把一台刚装好的 Windows 11 变成可以立刻开工的开发机全程一条 PowerShell 命令。它的自我定位是有主见的opinionated配置同时也做到了幂等已经存在的改动不会再动一遍。当前版本是50 个步骤、11 个阶段每一步都走校验、应用、再校验三段。磁盘至少留 15GB新机器加稳定网络下官方估计 30 分钟左右。入口是这一句$url https://raw.githubusercontent.com/microsoft/WindowsDeveloperConfig/main/src/windows-dev-config/bootstrap.ps1 ([scriptblock]::Create((irm $url)))它会校验所有要执行的脚本都带 Microsoft Corporation 签名把文件复制到%ProgramData%\CalmOS这个受保护的管理员目录然后开始跑。目录名叫 Calm OS来源不明但不算难猜。第 2 阶段用 winget 静默安装 15 个包用户协议已经预先接受Windows Terminal设为默认终端、PowerShell 7、Git、GitHub CLI、GitHub Copilot CLI、VS Code、.NET SDK 10、Python 3.14配 uv、Node.js LTS、nvm for Windows、Coreutils for Windows、Windows App CLI、Oh My Posh、PowerToys最后是 WSL。后面 24 项注册表改动分六组落在第 3 到第 9 阶段。几条比较有意思的系统层开开发者模式、Windows sudo 内联模式、Win32 长路径去掉 260 字符限制、允许远程桌面连接。RDP 的防火墙规则默认仍然关着这条留了个缺口。资源管理器改成显示扩展名和隐藏文件、标题栏显示完整路径、默认打开此电脑侧边栏去掉常用文件夹、最近文件和云推荐。任务栏与开始菜单在右键菜单里加结束任务搜索去掉 Web 结果和搜索亮点关掉开始推荐小组件用系统策略关新构建上按用户的开关不太管用PowerToys 关掉总在最前的提示。Edge打开空白新标签页、抑制首次设置提示全局开着勿扰应用与系统都切深色模式。字体这条做得比想象中严谨Cascadia Code 指定 2407.24 这个版本并且用 SHA-256 校验。它还顺手把 dotnet new 的 WinUI 模板注册进去另外把微软的 Windows Development Skills 和 WinUI 插件注册给 GitHub Copilot CLI。结果是你不装完整的 Visual Studio也能脚手架出一个原生 WinUI 应用这对只想偶尔写点桌面工具的人挺实用。最后一个阶段装 WSL 和 Ubuntu。开 WSL 需要启用 Windows 可选功能会重启重启后登录大约 30 秒一个叫WindowsDevConfigResume的计划任务接上继续跑结尾再弹一次 UAC。整个流程只重启一次属于刻意控制过的行为。Ubuntu 那一侧本身不改交给同仓库的补充工具WSL Comfort交互式选 zsh 还是 bash、可选的 Starship 提示符、一批现代命令行工具fzf、ripgrep、fd、bat、eza、zoxide、jq、剪贴板集成、Homebrew以及一套调过的 Git 默认值也支持-NonInteractive和精简模式跑无人值守。仓库里另有 11 个独立工作负载每个都是配置文件加安装脚本改 PATH 就能用比如 TypeScript装 Node.js LTS 加全局 tsc、PHP 8.5 之类。有一条边界要写清楚这个工具不是删系统组件、也不是清理无关预装软件的那类脚本它做的只是给开发者设一套合适的默认值。它跟之前公布的 Project Zenith 是两件事后者绑特定硬件64GB 以上统一内存、带宽 250GB/s 以上这个是普通机器上谁都能跑。还有一个小坑值得先说Node.js LTS 和 nvm for Windows 会一起装上。如果你打算用 nvm 管 Node 版本最好先把直接安装的 Node 卸掉不然后面容易莫名其妙地冲突。三、插上 USB 就能拿系统权限这次走的是 Windows 自己的安装路径安全研究这边两位研究者 Alejandro Hernando 与 Borja Martinez 公布了一枚取名Plug and Pwn的攻击方式。它的入口不是某个厂商的驱动而是Windows 自己的设备安装流程。插入新的 USB 设备时Windows 会用共用安装程序co-installer自动去下载并安装软件和驱动。研究者发现这条路可以被利用让系统在装设备的过程中以系统账户的权限装进一个自带可利用组件的软件包。几个限定条件决定了它的实际威胁面不需要用户交互不需要真有一根 USB 线但只在启用了 USB 重定向的系统上有效。虚拟桌面环境里这个功能很常见所以受影响的主要是这类部署。缓解办法是把注册表里的DisableCoInstallers打开阻止驱动包在设备安装阶段使用共用安装程序。它和另一枚叫ShieldBreak的缺陷常被放在一起讲。ShieldBreak 由 Nightmare Eclipse 披露能绕过此前修过的 RoguePlanet在打全补丁的 Windows 10、Windows 11 和 Windows Server 上拿到 SYSTEM 权限走的是 Defender 云取回扫描过程中一个用户态回调钩子在扫描时把文件内容改掉Kevin Beaumont 的解释。两枚目前都没有补丁。有些二手文章建议临时关掉 Defender来规避这个建议的代价通常比它挡下的风险更实在不建议照做。同一类思路还有一枚已经修掉的漏洞值得对照。CVE-2026-66804是悬空 COM 对象注册某个 CrossDevice COM 对象在系统级类注册表里登记着指向%PROGRAMDATA%\CrossDevice\CrossDevice.Streaming.Source.dll但这个文件不存在而ProgramData恰好是所有用户都可写的位置。攻击者放一个同名 DLL再借自定义 COM 编组机制把它加载进特权进程就完成了提权。它是一枚更早漏洞CVE-2026-50343被称作黑暗电梯修复不完整留下的尾巴。三枚放一起看共同点是系统自带机制被拿来当入口安装流程、扫描流程、注册表注册全都是正常功能的一部分。四、把智能体的风险变成可复测的流水线9 月 24 日微软 Responsible AI 与 Command Line 两个团队一起发了篇博文开源了一个 VS Code 技能run-assert-eval。它把四步串成一个循环发现风险、度量失败率、生成运行时策略、再用同一套评测重跑一遍看修复有没有站住。在此之前微软已经放出过三块东西各自都有用但接口很碎Clarity做威胁建模ASSERT把书面要求变成可执行的评测ACSAgent Control Specification在动作边界上做可移植的强制。团队实际上已经在手工把它们串成 Clarity 到 ASSERT 到 Rego 策略再到第二次 ASSERT但每次交接都可能丢上下文或者不小心重新生成了测试集、换掉了评判器前后两次比较就不成立了。run-assert-eval 做的就是把这个集成自动化同时把行为定义、测试用例和评判器配置全部冻结。这样 ACS 策略就成了基线运行和受控运行之间唯一被有意改变的变量。代码在 microsoft/ASSERT 仓库里MIT 许可。示例选的是一个客服计费智能体绑定在客户账户 ACME-1001 上要求它绝不能读取或操作别的账户。仓库里没有.clarity-protocol/目录时Clarity 会通过它的 MCP 服务器被调用run_clarity、write_protocol_document、record_failure把按严重度排序的失效模式写进仓库一个标准库解析器再把这些模式映射成候选行为这一步不再额外花模型调用。基线结果里跨客户数据集在 40 段适用对话中违反禁止行为 12 次也就是 30.0%另一套未经验证的高风险动作的情形是 6.3% 不允许类违规加 10.0% 允许类违规。接下来技能从基线套件生成并校验 ACS 策略assert-ai acs generate与assert-ai acs validate强制点放在pre_tool_call和post_tool_call调用参数里的account_id跟调用方对不上工具调用在执行前就被拒已经泄露的结果进不了上下文。受控重跑的数字是这样的跨客户场景切分下的不允许类违规从 43.8% 降到 0.0%提示词切分下从 20.8% 降到 8.7%允许类违规在所有切分上降到 0.0%。最后这个 0.0% 是重点它说明关卡没有退化成一个什么都拒绝的机器人。仓库里带了七个示例领域、十四个风险套件包括 billing_support_agent、azure_doc_qa、change_control_agent、science_research_agent、两个 travel_plannerLangGraph 与 NeuroSAN以及成对的有工具和无工具的临床类智能体。分类法在运行时生成不签进仓库。微软在文末写了三条自己的立场运行时控制应该建立在实测出来的失败之上一个修复应该由发现问题的同一套测量来验证安全性和有用性要一起变化。接下来他们想把 run-assert-eval 做成可重复的发布闸门同时扩一个更大的领域模板库。需要打的折扣也很清楚这是厂商自己跑的小样本示例40 段和 34 段对话的量级不构成这套工具能保护任意智能体的独立保证。它真正有价值的贡献是比较过程受控把我们评估过安全性这句话变成一份可以重跑的、前后固定的记录。五、GitHub Copilot 一次更四项安全实验室把 fuzz 交给智能体9 月 25 日 GitHub 的 Changelog 里Copilot 有四处变化。Copilot 在 Slack 和 Microsoft Teams 里能用的上下文变多了公开预览。Slack 里可以给它受支持的文件、附件和消息链接Teams 里可以用内联图片、转发的消息以及频道与线程历史。它在开新 issue 之前会先查有没有相似的已有 issue做出来的工作会链回原来那段对话。模型可以在下一条消息上切换而且这个选择会在整段对话里保持Slack 里还能设默认负责人和仓库。Slack 会话切换仓库的机制也改了被判作废的会话不能再在旧仓库里动作。用量计入现有 Copilot 额度可以用 Copilot 云智能体的预算设上限。agentic autofix 开始用 Copilot Memory。开了 Copilot Memory 的客户autofix 处理安全告警时会先读已有记忆产出修复之后把修复模式存成一条新记忆。同一仓库里的 Copilot 代码评审和云智能体随后都能用上这些记忆。两者都在公开预览。这条其实比表面上更重要因为它意味着开不开 Memory 影响的不只是一个功能。管理员侧两件事。用量指标 API 的仓库级日报多了一个pull_request_review_times数组给出三个阶段的中位数和 P90就绪到首次评审、首次到最终评审、最终评审到合并只统计人工评审Copilot 代码评审和其他机器人的评审不算在内而且没有回溯9 月 21 日之前进入待评审状态的 PR 都不含。另一件是企业 AI 控制页加了个校验器检查copilot/managed-settings.json、copilot/team-mappings.json以及它们引用的团队文件能报出格式错误的 JSON、不支持的设置和无效的团队映射并且指出具体文件和 JSON 路径。之前遇到过托管设置静默不生效的团队现在至少能定位到坏在哪个文件上。同一周 GitHub Security Lab 还开源了一条自动化的 fuzz 流水线基于 Taskflow Agent自己挑入口点、构建目标、写 fuzz harness、跑 AFL时间预算逐轮翻倍、读覆盖率回头改 harness最后把崩溃去重分诊成带建议补丁的报告。默认模型是 Claude Sonnet 5覆盖率增益低于 1% 就停止迭代脚本能跑在任意仓库上最好放在一次性的 Codespace 里。代码在GitHubSecurityLab/seclab-taskflows-fuzzing。帖子里没有给出真实运行中找出多少 bug 或 CVE 的数字所以这套流水线目前的证据还是流程能跑通。六、Azure 的退役日历.NET 8、.NET 9、PowerShell 7.4 同一天到期Azure 更新里这周有一批日期值得记进排期表。2026 年 11 月 10 日是一道坎。9 月 23 日两条公告同时指向这天Azure Functions 对.NET 8 和 .NET 9的支持结束要迁到 .NET 10PowerShell 7.4的支持也在同一天结束迁到 PowerShell 7.6。.NET 那条里有个容易被忽略的连带项。Functions 的进程内in-process模型不支持 .NET 10而它自己的支持也在 11 月 10 日结束所以这不是改个 TargetFramework 的事只能换成隔离工作进程isolated worker模型。迁移时要当心[JsonProperty]这类特性隔离模型走 System.Text.Json会静默忽略它们编译不报错但运行结果不对。顺带把 .NET 10 那批破坏性变更里几个容易踩的点列一下net10.0 上NuGetAuditMode默认变成all传递依赖里的漏洞包会产生 NU1901 到 NU1904 警告如果项目开了TreatWarningsAsErrors还原会直接失败不带版本的 PackageReference 现在是错误NU1015ASP.NET Core 10 里 Cookie 认证对已知 API 端点不再重定向到登录页改成返回 401 或 403断言 302 的集成测试会挂EF Core 10 的Contains()对集合参数改成生成多个标量参数SQL 参数名也简化了city而不是__city_0比对 SQL 文本的快照测试会失败默认 10.0 镜像标签是 Ubuntu 24.04.NET 10 没有 Debian 镜像Dockerfile 里用 apt 装包的名字要核对。Node.js 22的支持在 2027 年 4 月 30 日结束迁 Node.js 24。9 月 24 日还定了一个远期日期Azure Communication Services 的几个独立服务将在 2028 年 9 月 30 日退役。同一天VM 还原点的 Instant Access 转正式可用覆盖数据盘用 Premium v2 或 Ultra 磁盘的应用一致性还原点。9 月 25 日Azure HorizonDB 支持 PostgreSQL 18公开预览。速报Windows Media Player 经典皮肤提前失效。IT 之家 9 月 26 日报道Neowin 发现原本定在 2026 年 11 月 10 日停止支持的经典皮肤功能已经提前失效程序启动时直接显示默认界面。反馈这条的是用户 Aryeh Goretsky他一直把wmplayer.exe当轻量播放器用认为这套自 Windows 2000 和 Windows Me 时代就有的主题在别的播放器上找不到替代。微软官方说明里的日期还是 11 月 10 日没对提前失效做进一步解释目前也看不出是分批推送、版本差异还是某次更新导致的行为变化。这属于微软清理遗留组件那条长线的一部分同一批动作里还包括下一代 Windows Server 要移除多项 Windows 部署服务WDS组件。Windows 11 的动态更新。面向安装和恢复的动态更新包会在全新安装、升级或执行恢复操作时由 Windows 自动获取。要确保装了最新标准补丁还是得保持 Windows Update 开启并安装月度累积更新。部署场景里的 IT 需要确认安装介质和成像工具会拉取最新的动态更新否则整批机器的安装与恢复组件会停留在旧版本。9 月的安全月报里那句概括。微软 Security 博客的月度综述把 9 月的三件事概括成发现并管住本地的 AI 智能体、把零信任延伸到智能体流量、加固 SOC 的基础。同一批博客里还有一篇追踪Storm-2570一个勒索软件附属组织在涉及 Qilin、DragonForce 等不同家族的多起部署里用着一致的工具和技术。一篇关于执行轨迹的论文。9 月 24 日 arXiv 上的一篇研究测了 Claude Code、Codex、Antigravity、Open Code、Grok Build 等本地编程智能体工具结论是除 Muse Code 外其余在被要求时都允许智能体删掉自己的执行轨迹而且没有触发监控护栏研究者还测了外部攻击者能不能诱导这种删除。如果轨迹可以被智能体或它所在的主机改掉那它就不能当独立证据用。论文的覆盖范围是特定工具和特定设置作者的建议也直接把轨迹采集放到智能体控制范围之外。一场关于操作系统该怎么管智能体的旧争论又翻了出来。一位 Google 研究员提出Windows NT 以对象模型为中心的权限设计在智能体时代值得重新看因为操作系统的核心问题从谁在运行程序变成了这个智能体被允许做什么而 NT 的对象模型更容易给出清晰的权限关系和集中审计。她同时承认这属于架构层面的设想不是已经证明的结论也承认 Linux 这边的 Landlock、seccomp、cgroups 和 LSM 组合同样能做严格隔离。微软自己的路线是把 2026 年 Build 上宣布的 MXCMicrosoft Execution Containers落下去由开发者声明智能体可以访问哪些资源、由 Windows 在运行期执行这些限制。配图由 AI 生成仅作示意。