ConnectWise 备份应用身份被劫持:173 个微软 365 租户被登入

微软威胁情报于 10 月 17 日确认正在追踪一起针对 ConnectWise Cloud Backup(原 SkyKick Backup)的在野供应链攻击:攻击者取得该应用的受信任 OAuth 身份后,以其自身身份登入 173 个 Microsoft 365 合作伙伴与客户租户。全程没有用户参与,MFA 与条件访问策略未生效。

事件概述

该平台供托管服务商(MSP)备份 Microsoft 365 与 Google Workspace 数据,Entra 中的 AppId 为 506e08f9-6e9a-4da4-942b-a099a03644ae,企业应用列表可能显示为「SkyKick Backup」或「ConnectWise Cloud Backup」。

10 月 15 日 06:13 至 08:34(UTC),该应用从 144.172.64.128 取得 Graph 访问令牌,按租户 ID 排序逐个登录,间隔仅数秒,明显是脚本按预备清单批量执行。登录记录带 client assertion,说明用的是厂商主租户里的应用密钥。ConnectWise 于 10 月 16 日披露未经授权访问,并切断该服务的应用访问。

技术细节

多租户应用的授权模型决定了规模。厂商在自己的租户注册一次,客户管理员授予同意后本地生成服务主体并带上获批权限;对备份产品来说,通常意味着读取全部邮箱、SharePoint 与 OneDrive。此后厂商用自己的证书以应用身份登录,客户侧没有任何账号参与。

Huntress 在一个合作伙伴租户中看到更严重的一步:另一个应用「ConnectWise Cloud Management – MS Teams」(AppId 24205314-2b89-4e07-a2a4-579e898a5640)给自己授予全局管理员角色,再用 Python 脚本向另外两个受信任应用添加客户端密钥,有效期到 2028 年。即便原始应用被禁用,攻击者仍能靠这些凭据回来。ConnectWise 另列出 b78f6a77… 与 b2b55f5b… 两个可能受影响的标识;观测到的用户代理为 Python-urllib/3.12 与 python-requests/2.31。

影响评估

Inforcer 给出暴露面量级:其管理租户中约 3,800 个安装过该应用,约三分之二已不再活跃使用。授权同意不会过期,工具下线也很少逐个租户撤销,这些「僵尸同意」正是目标。更早迹象可回溯到 7 月 2 日至 6 日的低频令牌请求(约 1,900 个租户)与 9 月 17 日至 18 日的第二波。

目前没有数据被读取的确证,但应用专用令牌在常规日志里几乎留不下痕迹,已安装该应用的租户应按数据可能暴露处理。

修复建议

在每个已授予同意的租户里禁用该应用:Entra 管理中心 → 企业应用 → 按 AppId 查找 → 属性 → 将「已启用用户登录」设为否。建议禁用而非删除,删除后重新启用要重走同意流程;禁用期间备份与恢复暂停,邮件、文件、Teams 与用户登录不受影响,历史备份保留。ConnectWise 确认密钥轮换前不要重新启用。

查日志要看「服务主体签入」而不是「用户签入」,按上述 AppId 过滤并检索 144.172.64.128;同时在统一审计日志搜索「添加服务主体凭据」「更新应用程序」与目录角色分配记录。随后盘点所有第三方企业应用,移除不用的与权限过大的,并逐一检查应用注册中的密钥与证书——只禁用 ConnectWise 那几个应用,删不掉已植入别处的凭据。

工作负载身份的条件访问只覆盖本租户注册的应用,对厂商多租户应用无效;可用的控制手段只有禁用、移除或收回权限。

参考来源