1. 事件背景:国家级黑客组织的新型攻击手法浮出水面
2023年第三季度,网络安全领域曝出一起影响深远的攻击事件。一个被追踪为APT29(又名Cozy Bear)的俄罗斯国家级黑客组织,利用名为"设备代码钓鱼"(Device Code Phishing)的技术手段,成功入侵了多个国家和地区的政府机构、大型企业的云邮箱系统。这种攻击手法巧妙利用了OAuth 2.0协议中的设备授权流程漏洞,绕过了传统多因素认证(MFA)的保护机制。
与传统的钓鱼攻击不同,这次攻击并不需要受害者直接输入账号密码。攻击者首先在伪造的Microsoft 365登录页面发起设备授权请求,然后通过社会工程学手段诱骗受害者输入设备端显示的验证码。一旦得手,攻击者就能获取长期有效的访问令牌(Refresh Token),持续访问受害者的邮箱数据,而无需再次认证。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 设备代码钓鱼攻击的技术原理剖析
2.1 OAuth 2.0设备授权流程的正常运作
在标准的OAuth 2.0设备授权流程中,当用户在智能电视、游戏机等输入受限设备上登录时,系统会显示一个设备代码和验证URL。用户需要在浏览器中访问该URL并输入代码完成认证。这个设计本意是为了解决无法直接输入密码的设备认证问题。
典型流程包括:
- 设备向授权服务器(如Azure AD)请求设备代码
- 服务器返回用户代码、设备代码和验证URL
- 用户在浏览器中访问URL并输入用户代码
- 设备轮询服务器等待授权完成
- 用户登录成功后,设备获取访问令牌
2.2 攻击者如何扭曲这一机制
APT29组织精心构造的攻击链条如下:
-
伪造授权请求:攻击者创建恶意应用,向Azure AD发起设备代码请求,获取合法的设备代码和用户代码。
-
构造钓鱼页面:搭建高仿真的Microsoft 365登录页面,显示"您的设备需要激活"等诱导性提示,要求受害者输入屏幕上显示的用户代码。
-
社会工程诱导:通过钓鱼邮件或即时消息,诱使目标访问伪造页面并输入代码。邮件可能伪装成IT部门通知,声称"需要立即验证设备以维持邮箱访问权限"。
-
令牌获取:当受害者在真实Microsoft页面输入代码完成认证后,攻击者的恶意应用随即获得包含refresh_token的OAuth令牌组合。
-
持久访问:利用refresh_token可以长期获取新的access_token,即使受害者更改密码也无法中断这种访问权限。
3. 攻击活动的技术特征与检测方法
3.1 攻击活动中观察到的关键指标
根据微软威胁情报团队(MSTIC)的分析,这次攻击活动呈现以下技术特征:
-
应用注册特征:
- 新创建的Azure AD应用使用与目标组织相关的名称
- 应用权限请求包含Mail.Read, Mail.ReadWrite, User.Read等邮箱相关权限
- 应用验证状态显示为"未验证"
-
网络流量特征:
- 设备代码请求来自非常用IP段(尤其是俄罗斯IP范围)
- 短时间内大量设备代码请求来自同一客户端ID
- 用户代理字符串包含非常用浏览器标识
-
令牌使用模式:
- 获取的令牌在异常地理位置使用
- 访问模式呈现自动化特征(如定时全量同步邮件)
- 同一令牌从多个IP地址使用
3.2 企业级检测与响应方案
对于使用Microsoft 365的企业,建议实施以下检测措施:
powershell复制# 通过Microsoft Graph API查询可疑的OAuth授权
Connect-MgGraph -Scopes "AuditLog.Read.All"
Get-MgAuditLogDirectoryAudit -Filter "activityDisplayName eq 'Consent to application' and initiatedBy/user/userPrincipalName eq 'attacker@domain.com'" -Top 100
关键监控点应包括:
- 新应用同意事件,特别是由普通用户(非管理员)执行的操作
- 设备代码流的使用频率异常增高
- 同一用户账号在短时间内从不同地理位置获取令牌
4. 防御策略:从技术控制到人员培训的多层防护
4.1 即时生效的技术控制措施
对于Microsoft 365管理员:
-
启用应用同意策略,限制用户自行同意应用权限:
- 导航到Azure AD → 企业应用 → 用户同意设置
- 选择"仅允许用户同意经过验证的发布者的应用,仅选择特定权限"
-
配置条件访问策略,限制设备代码流使用:
- 创建新策略,目标设为"所有用户"
- 在"客户端应用"中选择"其他客户端"
- 设置"设备代码"授权为"阻止"
-
定期审查已授权应用:
powershell复制Get-MgOauth2PermissionGrant | Where-Object { $_.Scope -match "mail" } | Format-Table -Property ClientId, Scope, ConsentType
4.2 长期安全加固建议
架构层面改进:
- 实施零信任架构,对所有访问请求进行持续验证
- 将关键管理员账户与普通用户账户隔离,使用专用特权访问工作站(PAW)
- 启用Azure AD Identity Protection,配置风险策略自动响应异常登录
人员培训重点:
- 开展针对性的钓鱼演练,特别模拟设备代码验证场景
- 建立明确的验证流程:任何要求输入验证码的请求必须通过二次渠道确认
- 培训员工识别伪造登录页面的技巧(检查URL、证书信息等)
5. 事件响应与补救操作指南
当检测到可能的设备代码钓鱼攻击时,建议按以下步骤响应:
-
立即撤销受影响令牌:
powershell复制# 撤销特定用户的所有刷新令牌 Revoke-MgUserSignInSession -UserId "victim@company.com" -
调查应用授权历史:
通过Azure AD审计日志,识别所有由攻击者获取同意的应用:kql复制AuditLogs | where OperationName == "Consent to application" | where InitiatedBy contains "attacker" | project TargetResources, OperationName, Result -
邮箱取证分析:
检查是否有邮件被转发或规则被篡改:powershell复制Get-Mailbox "victim@company.com" | Get-InboxRule | Where-Object { $_.ForwardTo -ne $null } -
后续监控:
设置警报监控refresh_token的使用情况:kql复制SigninLogs | where TokenIssuerType == "Azure AD" | where AuthenticationDetails has "RefreshToken" | where AppDisplayName !in ("Microsoft Office", "Microsoft Teams")
这次事件给我们的核心启示是:即使部署了多因素认证,也不能确保绝对安全。攻击者总会寻找认证链条中最薄弱的环节——往往是人为因素。我们安全团队在实际处置中发现,许多受害者在收到"紧急验证"提示时,会下意识地快速完成操作而不加验证。这种心理弱点正是高级持续性威胁(APT)组织最善于利用的突破口。
在防御措施上,我们特别建议客户启用Microsoft 365的持续访问评估(CAE)功能。这项技术可以实现近实时的令牌撤销,当检测到异常情况(如用户密码更改、账户禁用等)时,会立即令现有令牌失效,显著缩短攻击窗口期。
