微软揭秘:AI驱动的DeviceCode钓鱼攻击如何规模化绕过MFA

admin 2026-04-10 02:40:49 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 微软发现大规模AI驱动的OAuth2.0设备码钓鱼攻击,利用EvilToken钓鱼即服务工具包,通过动态生成设备码突破15分钟过期限制,结合Railway等平台创建轮询节点和AI生成个性化邮件,成功绕过MFA保护。攻击针对高价值财务人员,入侵后通过GraphAPI侦察并创建收件箱规则实现持久化。建议限制设备码流、启用反钓鱼策略、使用FIDO等防钓鱼认证方法。 综合评分: 95 文章分类: 社会工程学,漏洞分析,红队,web安全,安全运营


cover_image

微软揭秘:AI驱动的Device Code钓鱼攻击如何规模化绕过MFA

bitbot bitbot

Desync InfoSec

2026年4月7日 20:00 北京

微软 Defender 安全研究团队近期发现了一场大规模钓鱼攻击活动,攻击者利用 OAuth 2.0 Device Code(设备码)认证流程,以规模化方式入侵企业账户。与传统的设备码攻击不同,该活动通过 AI 驱动的自动化基础设施和动态代码生成技术,成功绕过了设备码 15 分钟的过期窗口限制,成功率显著提高。

这项活动与 EvilToken 的出现密切相关——这是一个被确认为大规模设备码滥用关键推手的 钓鱼即服务(PhaaS)工具包。相比 2025 年 2 月观察到的 Storm-2372 设备码钓鱼活动,此次攻击标志着威胁行为者的 sophistication 已实现重大升级。

────────────────

关键发现:该攻击使用 Railway.com 等平台创建数千个短暂存活的轮询节点,结合 GenAI 生成高度个性化的钓鱼邮件,并在用户交互时动态生成设备码以绕过 15 分钟过期限制。攻击后阶段聚焦于高价值目标的财务角色人员,通过 Microsoft Graph 进行组织结构侦察并创建恶意收件箱规则实现持久化。

────────────────

一、攻击链全景

Device Code 认证是 OAuth 2.0 的合法流程,专为智能电视、打印机等无法支持标准交互式登录的设备设计。用户在设备上收到短码后,在另一台设备的浏览器中输入该码以完成认证。

虽然该流程在这些场景中非常有用,但也引入了安全权衡:由于认证在分离的设备上完成,发起请求的会话与用户原始上下文的绑定较弱。威胁行为者利用这一特性,通过将认证与原始会话解耦,绕过了传统的 MFA 保护

设备码钓鱼的运作方式:威胁行为者代替合法设备发起流程,通过钓鱼诱饵向用户提供验证码。当用户输入验证码时,他们在不知情的情况下授权了威胁行为者的会话,从而在不暴露凭据的情况下获取账户访问权限。

二、六个阶段深度拆解

阶段 1:侦察与目标验证

威胁行为者首先使用 GetCredentialType 端点验证账户有效性,确认目标邮箱是否存在于租户中。这一侦察阶段通常发生在实际钓鱼尝试前 10 到 15 天

攻击活动采用了多阶段投递管道,以绕过传统邮件网关和端点安全。用户与恶意附件或高压诱饵(如”操作需要:密码即将过期”)中的直接 URL 交互后,攻击即开始。

为逃避自动 URL 扫描器和沙箱检测,威胁行为者不直接链接到最终钓鱼站点,而是通过受入侵的合法域名和高信誉”无服务器”平台进行系列重定向。主要依赖 Vercel(*.vercel.app)Cloudflare Workers(*.workers.dev)AWS Lambda 托管重定向逻辑,使钓鱼流量”混入”合法企业云流量中。

用户到达最终着陆页后,会看到伪造的凭据窃取界面,以 Browser-in-the-Browser(浏览器中浏览器)技术呈现,或直接显示在文档”预览”中——带有模糊视图和”验证身份”按钮,将用户重定向到 microsoft.com/devicelogin 并展示设备码。

该活动使用了多种主题:文档访问、电子签名、语音邮件通知。在特定案例中,威胁行为者要求用户输入邮箱以协助生成恶意设备码。

威胁行为者使用域名影子化和品牌仿冒子域名来绕过信誉过滤器。多个域名模仿技术服务或管理服务(如 graph-microsoft[.]com、portal-azure[.]com、office365-login[.]com),并使用随机化子域名(如 a7b2-c9d4.office-verify[.]net)。

阶段 2:初始访问

威胁行为者向目标受害者发送欺骗性邮件,使用发票、RFP 或共享文件等多种主题。邮件包含直接 URL、PDF 附件或 HTML 文件,诱使用户与最终导向威胁行为者控制界面的链接进行交互。

阶段 3:动态设备码生成——15 分钟赛跑

当用户点击恶意链接时,被引导至运行后台自动化脚本的网页。该脚本实时与 Microsoft 身份提供者交互,按需生成活的 Device Code,然后将其显示在用户屏幕上,并附带指向官方 microsoft.com/devicelogin 的按钮。

动态 vs 静态:突破 15 分钟限制

生成的设备码仅有 15 分钟有效期。传统静态钓鱼中,威胁行为者在邮件中包含预生成的代码,受害者必须在 15 分钟内完成从打开邮件到输入代码的全部流程。

动态生成解决了这一问题:代码生成被推迟到重定向链的最后阶段,15 分钟倒计时仅在受害者点击链接到达恶意页面时才开始。这确保了用户被提示输入代码时,认证码始终处于活跃状态。

用户被重定向到最终着陆页的瞬间,页面上的脚本向威胁行为者的后端 /api/device/start//start/ 发起 POST 请求。该服务器充当代理,携带自定义 HTTP 头 “X-Antibot-Token”(64 字符十六进制值)和空请求体。服务器联系 Microsoft 官方设备授权端点,返回包含 Device Code 和隐藏会话标识符的 JSON 对象。

阶段 4:利用与认证

为最小化用户操作量并最大化成功率,脚本通常会自动将生成的设备码复制到用户剪贴板。使用 navigator.clipboard.writeText API,脚本将 Device Code 推送到受害者的 Windows 剪贴板。用户到达官方登录页面后直接粘贴代码即可。

如果用户已有活跃会话,只需粘贴代码并确认请求,即可即时认证威胁行为者的后端会话

阶段 5:会话验证——实时轮询

成功入侵后,脚本进入“轮询”状态——通过 checkStatus() 函数在 15 分钟窗口内以每 3-5 秒的频率 ping 威胁行为者的 /state 端点。当目标用户完成 MFA 支持的登录后,下一次轮询返回成功状态。威胁行为者的服务器此时拥有了目标账户的活 Access Token,通过 Device Code 流设计绕过了 MFA。

阶段 6:持久化与后渗透

入侵后,攻击进展主要表现为设备注册Graph 侦察

• 在部分案例中,入侵后 10 分钟内即注册新设备以生成 Primary Refresh Token(PRT)实现长期持久化 • 在其他场景中,等待数小时后才创建恶意收件箱规则或外泄敏感邮件数据,以避免即时检测

针对高价值目标(财务、高管或管理人员),威胁行为者执行深度侦察:搜索电汇详情、待处理发票和高管通信等高价值金融信息。

────────────────

三、IoC 情报

| | | | | — | — | — | | 指标 | 类型 | 描述 | | 160.220.232.0 | IP 段 | Railway.com 威胁基础设施 | | 160.220.234.0 | IP 段 | Railway.com 威胁基础设施 | | 89.150.45.0 | IP 段 | HZ Hosting 威胁基础设施 | | 185.81.113.0 | IP 段 | HZ Hosting 威胁基础设施 | | graph-microsoft[.]com | 域名 | 品牌仿冒钓鱼域名 | | portal-azure[.]com | 域名 | 品牌仿冒钓鱼域名 | | office365-login[.]com | 域名 | 品牌仿冒钓鱼域名 |

────────────────

四、检测与狩猎查询(KQL)

检测 errorCode 50199 后的成功登录(5 分钟时间窗口内出现错误码和成功码,暗示用户暂停输入钓鱼代码):

EntraIdSigninEvents   | where ErrorCode in (0, 50199)   | summarize ErrorCodes = make_set(ErrorCode) by AccountUpn, CorrelationId, SessionId, bin(Timestamp, 1h)   | where ErrorCodes has_all (0, 50199)

检测来自可疑 IP 范围的 Device Code 认证

EntraIdSigninEvents   | where Call has “Cmsi:cmsi”   !important; | where IPAddress has_any (“160.220.232.”, “160.220.234.”, “89.150.45.”, “185.81.113.”, “8.228.105.”)

关联 URL 点击与可疑登录(检测用户中断错误码 50199 之后的登录):

let suspiciousUserClicks = materialize(UrlClickEvents   | extend AccountUpn = tolower(AccountUpn)   | project ClickTime = Timestamp, ActionType, UrlChain, NetworkMessageId, Url, AccountUpn); let interestedUsersUpn = suspiciousUserClicks   | where isnotempty(AccountUpn)   | distinct AccountUpn; EntraIdSigninEvents   | where ErrorCode == 0   | where AccountUpn in~ (interestedUsersUpn)   | where RiskLevelDuringSignin in (10, 50, 100)   | join kind=inner suspiciousUserClicks on AccountUpn   | where (Timestamp – ClickTime) between (-2min .. 7min)

监控可疑设备注册(Device Code 钓鱼入侵后):

CloudAppEvents | where AccountDisplayName == “Device Registration Service” | extend DeviceName = tostring(parse_json(tostring(RawEventData.ModifiedProperties))[1].NewValue) | extend DeviceId = tostring(parse_json(tostring(parse_json(tostring(RawEventData.ModifiedProperties))[6].NewValue))[0]) | project TimeGenerated, DeviceName, DeviceId, UserPrincipalName

检测可疑收件箱规则创建(仅含特殊字符的规则名):

CloudAppEvents | where ApplicationId == “20893” | where ActionType in (“New-InboxRule”,”Set-InboxRule”,”Set-Mailbox”) | mv-expand ActivityObjects | extend name = parse_json(ActivityObjects).Name | extend value = parse_json(ActivityObjects).Value | where name == “Name” | extend RuleName = value | where RuleName matches regex “^[!@#$%^&*()_+={[}\\]|\\\\:;\”\”‘<,>.?/~` -]+$”

────────────────

五、防御建议

限制 Device Code Flow:仅在必要场景启用,通过 Conditional Access 策略阻止不必要的设备码流 • 启用反钓鱼策略:配置 Anti-phishing policies 检测仿冒发件人和欺骗尝试 • 启用 Safe Links:Defender for Office 365 的 Safe Links 扫描可检测恶意链接并触发设备码钓鱼告警 • 令牌撤销:发现可疑设备码钓鱼活动时,调用 revokeSign-inSessions 撤销用户刷新令牌 • 登录风险策略:实现 sign-in risk policy 自动响应高风险登录,强制重新认证 • 使用防钓鱼认证方法:FIDO 令牌或 Microsoft Authenticator + Passkey,避免基于电话的 MFA • 阻止旧版认证:通过 Conditional Access 阻止不支持 MFA 的旧版认证协议 • 集中身份管理:将本地目录与云目录同步,确保全面监控恶意身份访问

────────────────

来源:Microsoft Security Blog | 2026 年 4 月 6 日 作者:Microsoft Defender Security Research(Krithika Ramakrishnan、Ofir Mastor 等团队成员)


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:Desync InfoSec bitbot bitbot《微软揭秘:AI驱动的Device Code钓鱼攻击如何规模化绕过MFA》

评论:0   参与:  0