摘要
2026 年 5 月,FBI 发布安全公告,警示新型钓鱼即服务工具 Kali365 通过 Telegram 传播,大幅降低攻击门槛,使低技术攻击者可借助 AI 生成钓鱼诱饵,利用 OAuth 2.0 设备码授权流程劫持 Microsoft 365 令牌并绕过多重要素认证。Kali365 不窃取用户凭证,而是诱导受害者在微软官方验证页面输入设备码,在无感知状态下授权攻击者设备访问账号,获取访问令牌与刷新令牌,实现对 Outlook、Teams、OneDrive 等服务的持久化控制。传统基于恶意 URL、伪造页面的检测机制对此类攻击失效,企业身份安全面临严峻挑战。本文以 FBI 预警与 TechRadar 报道为核心依据,结合 OAuth 2.0 RFC 8628 协议规范与 Microsoft Entra ID 安全机制,系统解析 Kali365 的运作模式、攻击链路、协议滥用原理与危害特征,对比设备码钓鱼与传统钓鱼的差异,构建覆盖协议管控、条件访问、令牌治理、异常检测、应急响应的闭环防御体系,并提供可直接部署的代码示例与配置规范。反网络钓鱼技术专家芦笛指出,Kali365 代表钓鱼攻击向低门槛、平台化、协议武器化演进,企业必须从凭证防护转向授权行为与令牌生命周期管控,才能有效抵御此类威胁。本文研究成果可为企业加固 Microsoft 365 身份安全、防范 OAuth 令牌劫持攻击提供理论支撑与实践方案。
1 引言
云办公普及推动 Microsoft 365 成为政企核心生产力平台,其身份认证与授权体系的安全性直接决定数据边界。OAuth 2.0 作为主流授权协议,设备码授权流程(Device Code Flow)为无浏览器、输入受限设备提供便捷接入方式,却因官方验证、无需密码、MFA 由用户自主完成等特性,被黑产武器化为新型钓鱼攻击载体。
2026 年 4 月出现的 Kali365 钓鱼工具,将设备码流程滥用推向产业化。FBI 与 TechRadar 同期披露,Kali365 以订阅式服务在 Telegram 分发,集成 AI 诱饵生成、自动化模板、实时追踪仪表盘,使无开发能力攻击者快速发起攻击,全程使用官方域名与合法流程,绕过 MFA 且不留传统恶意痕迹,实现长期无凭证访问。
当前研究多聚焦传统钓鱼、凭证窃取、恶意页面检测,对合法协议滥用型令牌劫持钓鱼的系统性分析不足,缺乏对 PhaaS 平台机理、设备码流程缺陷、闭环防御的深入研究。本文基于权威通报、协议规范与实战场景,完成五项研究:解析 Kali365 平台架构与攻击链;揭示设备码流程安全缺陷;构建设备码钓鱼与传统钓鱼对比模型;提出可落地防御体系并提供代码实现;明确企业防御优先级与运维规范。本文保持客观严谨,不夸大威胁、不喊口号,为企业提供可工程化的防御指南。
2 Kali365 钓鱼工具概述
2.1 平台基本属性与分发模式
Kali365 是 2026 年 4 月首次被发现的钓鱼即服务(PhaaS)工具,核心定位为低门槛 Microsoft 365 OAuth 令牌劫持服务,主要通过 Telegram 频道付费订阅,价格区间约 10 美元 / 月至 1000 美元以上,按功能分级,满足不同攻击者需求。该平台大幅降低攻击技术门槛,使无专业能力的黑产人员可快速实施高隐蔽攻击,推动令牌劫持从高级威胁转向规模化泛化攻击。
Kali365 核心功能模块:
AI 生成钓鱼诱饵:自动生成仿冒微软、共享文档、IT 运维等场景的邮件 / 短信,支持多语言与个性化替换,提升欺骗性;
自动化攻击模板:预置高频场景模板,导入目标列表即可一键启动;
实时追踪仪表盘:可视化展示邮件打开、代码输入、令牌捕获状态,支持目标实时监控;
OAuth 令牌自动捕获:对接 Microsoft Entra ID 设备码接口,自动申请、轮询、存储令牌;
持久化访问管理:支持令牌复用、批量登录、规则篡改、横向拓展等后续利用。
反网络钓鱼技术专家芦笛强调,Kali365 完成钓鱼攻击工具化→平台化→服务化演进,攻击成本下降、成功率提升、扩散加速,传统以用户意识为核心的防护模式已无法应对。
2.2 核心威胁能力与突破点
Kali365 的威胁本质是对合法机制的极致滥用,实现三大突破:
完全绕过 MFA:攻击中用户自主完成密码与 MFA 验证,攻击者不拦截凭证、不破解验证码,即可获取合法令牌;
全链路合法无痕迹:全程使用微软官方域名与标准协议,无恶意 URL、代码、伪造页面,传统网关、沙箱、信誉库失效;
持久化控制:刷新令牌有效期长,用户修改密码无法阻断访问,攻击者可长期潜伏控制账号。
FBI 明确指出,Kali365 可使攻击者在不获取凭证的情况下,长期控制 Microsoft 365 环境,实施数据窃取、内部钓鱼、账号勒索,危害远超传统钓鱼。
3 OAuth 2.0 设备码授权流程原理与安全缺陷
3.1 标准设备码授权流程(RFC 8628)
设备码授权流程由 IETF 在 RFC 8628 定义,适用于智能电视、IoT、CLI 等无浏览器 / 弱输入终端,核心是用户在可信设备完成授权,替代设备直接输入密码。标准流程共 6 步:
设备客户端向授权服务器(Microsoft Entra ID)/devicecode 端点请求,携带客户端 ID 与权限范围;
服务器返回设备码、用户码、验证 URI、过期时间、轮询间隔;
设备展示用户码与 URI,提示用户在可信设备访问;
用户在官方页面登录、完成 MFA、输入用户码并确认授权;
服务器标记授权状态,设备按间隔轮询 /token 端点;
轮询成功,设备获取访问令牌与刷新令牌,调用资源接口。
该流程平衡安全与便捷,但未考虑恶意客户端诱导授权场景,为 Kali365 提供攻击入口。
3.2 流程原生安全缺陷与武器化条件
设备码流程存在四项原生缺陷,构成 Kali365 攻击基础:
验证页面绝对可信:用户访问官方域名,无视觉特征区分恶意 / 合法授权,信任基础被利用;
无授权上下文校验:仅校验身份与用户码,不校验发起方 IP、设备、应用合法性;
短码易诱导传播:用户码 8–9 位字母数字,易嵌入邮件、短信、二维码;
刷新令牌长效机制:有效期通常 90 天且支持续期,泄露后可长期控制,密码重置无效。
反网络钓鱼技术专家芦笛指出,设备码流程核心矛盾是授权便捷性与主体不可控性,攻击者只需包装为合法需求,即可利用官方信任完成劫持,传统防护无法覆盖。
3.3 Kali365 对流程的武器化改造
Kali365 未破坏协议,而是全流程合规滥用,改造点如下:
恶意客户端伪装:使用合法客户端 ID 或仿冒应用,获取设备码请求权限;
诱饵替代设备展示:将用户码与 URI 通过钓鱼邮件发送,替代设备展示;
诱导官方授权:欺骗用户在官方页面输入代码,完成攻击者设备授权;
自动轮询窃令:后台轮询令牌接口,捕获并入库管理令牌;
持久化维持:用刷新令牌续期,篡改规则屏蔽告警,延长潜伏时间。
全程符合 RFC 8628 规范,是其高隐蔽、高成功率的核心原因。
4 Kali365 全流程攻击链解析
4.1 攻击前置准备
攻击者订阅 Kali365,获取平台权限与客户端配置;
选择攻击模板,导入目标邮箱列表;
平台调用 Microsoft Entra ID 设备码接口,批量申请设备码、用户码、验证 URI;
AI 生成个性化钓鱼邮件,嵌入用户码与官方地址,设置发送与追踪参数。
4.2 诱饵投放与社会工程诱导
Kali365 通过邮件、企业通信工具投放诱饵,典型话术:
“您有共享文档待确认,请访问微软官方页面输入代码验证”;
“账号异常登录,需设备授权解除限制”;
“打印任务等待授权,输入设备码激活权限”。
诱饵核心特征:仅含官方地址与用户码,无任何可疑元素,用户无法通过域名、页面检查识别风险,与传统钓鱼本质不同。
4.3 用户误授权与令牌捕获
用户信任官方域名,正常登录并完成 MFA;
输入邮件中的用户码,点击确认,完成攻击者设备授权;
Kali365 后台轮询令牌接口,获取访问令牌与刷新令牌;
平台记录令牌、账号、时间、权限,提供可视化管理。
此阶段用户无异常感知,MFA 被合法绕过,安全防护完全失效。
4.4 持久化入侵与数据滥用
攻击者获取令牌后可实施:
无密码登录 Outlook、Teams、OneDrive、SharePoint;
读取、下载、删除业务文件与邮件;
添加转发 / 归档规则,屏蔽安全通知;
用被盗账号发起横向钓鱼,扩大攻击范围;
长期持有刷新令牌,实现数周 / 数月持久控制。
FBI 预警强调,此类攻击可导致核心数据泄露、通信监控、流程篡改,常规审计难以发现。
4.5 与传统钓鱼攻击对比
表格
对比维度 传统钓鱼 Kali365 设备码钓鱼
目标 密码 + MFA 验证码 OAuth 访问 / 刷新令牌
页面 伪造域名 / 仿冒页面 官方域名 + 合法流程
MFA 可绕过但留痕 完全绕过,用户自主完成
持久化 依赖密码有效性 长效令牌,改密码无效
检测难度 特征可识别 无恶意特征,日志隐蔽
门槛 需搭建站点 平台化,低技能可用
用户感知 易发现异常 全程无感知
反网络钓鱼技术专家芦笛指出,对比表明设备码钓鱼是合法协议恶意劫持,突破传统防护逻辑边界,威胁与防御难度指数级上升。
5 Kali365 攻击技术实现与代码示例
本节基于协议规范与实测,提供核心功能简化代码,仅用于安全研究与防御验证。
5.1 恶意客户端申请设备码(Python)
模拟 Kali365 向 Microsoft Entra ID 请求设备码,攻击起点。
import requests
def request_device_code():
"""模拟Kali365申请设备码"""
url = "https://login.microsoftonline.com/common/oauth2/v2.0/devicecode"
payload = {
"client_id": "d3590ed6-036b-45a7-98f1-1c9123456789",
"scope": "https://graph.microsoft.com/.default offline_access"
}
headers = {"Content-Type": "application/x-www-form-urlencoded"}
try:
resp = requests.post(url, data=payload, headers=headers, timeout=10)
result = resp.json()
if "user_code" in result:
return result
except Exception:
return None
# 执行
device_info = request_device_code()
if device_info:
print(f"用户码:{device_info['user_code']}")
print(f"验证地址:{device_info['verification_uri']}")
5.2 自动轮询获取 OAuth 令牌(Python)
用户授权后,轮询捕获访问令牌与刷新令牌。
import requests
import time
def poll_token(device_code, client_id):
"""轮询获取令牌"""
token_url = "https://login.microsoftonline.com/common/oauth2/v2.0/token"
headers = {"Content-Type": "application/x-www-form-urlencoded"}
max_wait = 600
start = time.time()
while time.time() - start < max_wait:
data = {
"grant_type": "urn:ietf:params:oauth:grant-type:device_code",
"client_id": client_id,
"device_code": device_code
}
resp = requests.post(token_url, data=data, headers=headers)
result = resp.json()
if "access_token" in result:
return result
elif "authorization_pending" in result.get("error", ""):
time.sleep(5)
else:
break
return None
# 调用
if device_info:
token = poll_token(device_info["device_code"], "d3590ed6-036b-45a7-98f1-1c9123456789")
if token:
print(f"访问令牌:{token['access_token'][:50]}...")
5.3 异常设备码请求检测(Python)
防御侧识别批量申请行为,实现早期预警。
import pandas as pd
def detect_abnormal_device_code(log_path, threshold=10):
"""检测高频设备码申请"""
logs = pd.read_csv(log_path)
logs['request_time'] = pd.to_datetime(logs['request_time'])
logs['window'] = logs['request_time'].dt.floor('5min')
stats = logs.groupby(['source_ip', 'window']).size().reset_index(name='count')
return stats[stats['count'] >= threshold].to_dict('records')
5.4 全局阻断设备码流(PowerShell)
FBI 推荐核心措施,全局阻止设备码流程,保留业务例外。
powershell
Connect-MgGraph -Scopes "Policy.ReadWrite.ConditionalAccess"
$params = @{
DisplayName = "Block-DeviceCodeFlow-Global"
State = "enabled"
Conditions = @{
Applications = @{ IncludeApplications = @("All") }
UserActions = @{ IncludeUserActions = @("urn:user:action:deviceCodeFlow") }
}
GrantControls = @{ Operator = "AND"; BuiltInControls = @("Block") }
}
New-MgIdentityConditionalAccessPolicy -BodyParameter $params
反网络钓鱼技术专家芦笛强调,代码化、自动化、策略化是抵御 Kali365 的关键,人工与意识培训仅为辅助。
6 Kali365 类攻击闭环防御体系构建
基于 FBI 建议、Microsoft 最佳实践与实战,构建五层闭环防御,覆盖全流程。
6.1 协议层:最小化攻击面(核心)
全局限制 / 禁用设备码流程:执行 5.4 策略,仅必要业务例外,阻断 90% 以上批量攻击;
阻止认证转移:防止会话跨设备转移,阻断跨设备诱导;
豁免紧急账号:避免全局阻断导致管理员锁死,保障运维。
6.2 身份层:强化令牌与应用管控
严格 OAuth 应用审批:禁止用户自主注册,管理员审批,建立白名单,定期审计;
缩短令牌生命周期:限制刷新令牌最大使用 / 空闲时间,降低泄露危害窗口;
令牌风险检测:监控跨地区、高频调用、批量下载,自动告警 / 撤销。
6.3 检测层:全维度威胁识别
邮件内容检测:正则识别含官方验证地址、用户码、授权话术的邮件,隔离高风险;
登录日志分析:监控异常 IP、匿名代理、短时间多设备授权,实时告警;
流量行为检测:识别批量申请、高频轮询、大量用户授权同一应用,联动阻断。
6.4 响应层:快速止损与清除
自动化令牌撤销:发现可疑授权,立即调用 Graph API 撤销刷新令牌,强制下线;
账号加固:重置密码、重新验证 MFA、清除恶意规则、删除可疑授权;
溯源取证:提取 IP、设备、令牌日志、诱饵模板,形成证据链。
6.5 认知层:针对性培训
传统培训无效,需升级:
明确:官方不会主动发送设备码要求输入;
任何设备码请求需通过可信渠道核实;
树立 “授权即风险” 意识,非主动请求一律拒绝;
建立快速举报机制。
反网络钓鱼技术专家芦笛强调,认知与技术同步落地,形成技术阻断为主、意识防范为辅的协同体系。
7 防御方案落地优先级与实施指南
按见效速度、难度、范围制定三级优先级,便于快速落地。
7.1 一级优先级(24 小时内,立即止损)
启用设备码流全局阻断;
审计并撤销非必要 OAuth 授权;
管理员启用 FIDO2/Windows Hello;
网关拦截设备码验证话术邮件。
7.2 二级优先级(1 周内,强化管控)
建立 OAuth 应用审批白名单;
配置令牌生命周期策略;
启用异常登录 / 令牌告警;
专项安全培训。
7.3 三级优先级(1 个月内,体系化防御)
接入 SIEM 集中审计;
开发自动化响应脚本;
定期渗透测试验证;
完善应急响应预案。
FBI 指出,上述措施可有效降低攻击成功率与危害,企业应优先完成一级配置。
8 讨论与未来趋势
8.1 研究价值与创新点
基于权威通报系统解析 Kali365 机理,填补设备码钓鱼研究空白;
明确攻击是协议滥用而非漏洞,纠正行业认知;
提供闭环防御与可部署代码,具备工程价值;
融入实战专家观点,平衡学术与实践。
8.2 局限性
未逆向 Kali365 后台架构与付费体系;
方案基于 Microsoft 365,其他云平台适配需验证;
未涉及 AI 诱饵对抗检测,为后续方向。
8.3 未来攻击趋势
PhaaS 深度集成大模型,诱饵更个性化、场景化;
令牌劫持扩展到授权码、静默授权流程,攻击面扩大;
攻击定向化,针对高价值账号精准实施;
形成 “窃取 — 交易 — 使用 — 清洗” 完整黑产链。
反网络钓鱼技术专家芦笛指出,企业必须从边界防护转向身份 - centric 防护,以零信任为核心,精细化校验每一次授权、每一枚令牌、每一次访问。
9 结语
Kali365 揭示云身份协议被武器化滥用的现实,依托 OAuth 设备码流程,以官方页面为掩护、社会工程为手段、令牌劫持为目标,绕过 MFA 并实现持久控制,对云办公安全构成重大威胁。本文基于权威通报、协议规范与实战,解析其架构、攻击链、机理与危害,构建五层闭环防御,提供代码与配置策略。
研究表明,抵御此类攻击的核心是放弃恶意页面 / URL 检测,转向授权行为与令牌全生命周期管控。企业应立即落实设备码阻断、OAuth 审计、令牌监控等措施,升级用户认知,形成技术与管理协同防御。随着钓鱼攻击平台化、服务化、智能化演进,身份安全成为防御核心战场,只有建立零信任、精细化、自动化机制,才能应对令牌劫持威胁,保障核心资产安全。
编辑:芦笛(公共互联网反网络钓鱼工作组)