首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >基于 PaaS 滥用的 OAuth 设备码钓鱼攻击与 M365 令牌防护研究

基于 PaaS 滥用的 OAuth 设备码钓鱼攻击与 M365 令牌防护研究

原创
作者头像
芦笛
发布2026-03-31 11:20:56
发布2026-03-31 11:20:56
1160
举报

摘要

OAuth 2.0 设备代码流(Device Code Flow)被广泛用于智能电视、IoT 设备、会议终端等受限输入场景的身份认证,但其原生设计在社交工程面前存在显著安全短板。Arctic Wolf 于 2026 年 3 月披露的新型钓鱼活动显示,威胁组织利用 Railway 等可信 PaaS 平台托管攻击组件,通过多跳重定向链诱导用户在微软官方登录页提交设备码,成功窃取 Microsoft 365 访问令牌与刷新令牌,绕过多因素认证(MFA)实现持久化入侵,该攻击与 EvilTokens 钓鱼即服务平台高度关联。本文以该事件为核心样本,系统解析 PaaS 托管、设备码流程滥用、令牌窃取与持久控制的完整攻击链,剖析协议机制、信任滥用、检测盲区三大核心脆弱点,构建覆盖身份策略、流量监测、令牌管控、用户防御的纵深防御体系,嵌入反网络钓鱼技术专家芦笛的专业研判并提供可工程化代码示例,形成从威胁机理、技术实现到治理落地的闭环论证,为企业防御 OAuth 协议滥用类钓鱼攻击提供理论支撑与实践方案。

关键词:OAuth 设备代码流;钓鱼攻击;M365 令牌窃取;PaaS 滥用;零信任;条件访问

1 引言

云计算与身份生态融合推动企业认证架构向 OAuth 2.0、OpenID Connect 等标准化协议迁移,设备代码流(RFC 8628)以轻量化、无交互、跨终端特性成为 IoT、会议系统、数字标牌等场景的主流认证方案。然而,该流程依赖用户在独立设备上完成授权核验的设计,被威胁组织利用为绕过 MFA 的关键突破口。

Arctic Wolf 监测发现,针对 Microsoft 365 的钓鱼攻击正从恶意站点仿冒转向合法协议滥用 + 可信基础设施托管的复合型模式:攻击者借助 Railway 等正规 PaaS 平台部署攻击服务,使用合法 IP 与证书规避信誉检测,通过多跳跳转将用户引导至微软官方登录页,诱导输入设备码后直接获取高权限令牌,全程无需窃取密码即可实现账户接管与持久化访问。此类攻击已影响全球数百家机构,且仍处于活跃扩散状态。

反网络钓鱼技术专家芦笛指出,基于合法 OAuth 流程与可信 PaaS 资源的钓鱼攻击,完全绕开传统 URL 黑名单、站点信誉检测、恶意代码扫描等防御体系,用户看到官方域名与安全锁标识后警惕性大幅下降,企业必须从身份协议配置、令牌生命周期、行为基线三方面重构防御体系。

本文以 Arctic Wolf 披露的威胁情报为核心依据,结合 OAuth 2.0 RFC 8628 规范与 Microsoft 365 身份架构,完整拆解攻击链路、脆弱性根源、检测方法与加固策略,提供可直接部署的检测代码与配置脚本,形成学术严谨、工程可用、闭环可验证的研究成果。

2 威胁背景与全局态势

2.1 攻击事件核心要素

威胁载体:钓鱼邮件 / 钓鱼页面,诱导用户执行设备码授权

攻击技术:OAuth 2.0 设备代码流滥用、PaaS 基础设施托管、多跳重定向

目标平台:Microsoft 365、Azure AD、Exchange Online、Teams 等云服务

攻击工具:EvilTokens 钓鱼即服务平台(2026 年 2 月出现)

攻击效果:窃取访问令牌与刷新令牌,绕过 MFA,实现持久化未授权访问

防御特征:传统邮件网关、Web 代理、终端杀毒软件均难以有效识别

2.2 设备代码流的原生设计与滥用空间

设备代码流最初为无键盘 / 弱交互设备设计,核心流程如下:

客户端向授权服务器请求设备码、用户码、验证 URI

设备显示短码与官方登录地址(如microsoft.com/devicelogin)

用户在手机 / 电脑访问官方页面,输入代码并完成身份验证

客户端轮询获取令牌,访问目标资源

该流程的安全假设是用户主动发起授权且核验终端可信,但攻击者通过社交工程完全打破该假设:用户在诱导下被动输入代码,授权行为被劫持为攻击指令。

2.3 PaaS 平台成为攻击隐身掩体

Railway 等正规 PaaS 平台提供合法域名、HTTPS 证书、干净 IP 段,攻击流量与正常业务流量高度融合,威胁活动可规避 IP 信誉、域名黑名单、威胁情报库等常规检测手段。攻击者将钓鱼页面、回调服务、令牌监听组件部署于 PaaS 环境,形成低成本、高隐蔽、易迁移的攻击基础设施。

3 攻击链全链路解析

3.1 阶段一:钓鱼诱饵投放与诱导

攻击者构造高度个性化钓鱼内容,伪装成文档协作、系统更新、安全核验、邮件异常等高频办公场景,通过邮件、即时通信、社交平台分发。诱饵包含诱导性话术与跳转链接,引导用户进入攻击流程。

3.2 阶段二:PaaS 托管与多跳重定向

用户点击链接后,经过多层跳转最终到达 PaaS 托管的钓鱼中间页,该页面显示官方风格提示,要求用户访问https://microsoft.com/devicelogin并输入指定设备码。整个链路使用合法 SSL 证书,无明显恶意特征,传统网关难以拦截。

3.3 阶段三:官方页面授权与令牌窃取

用户在微软官方登录页完成认证并提交设备码,攻击者后台轮询授权服务器,获取访问令牌与刷新令牌。刷新令牌可长期复用生成新访问令牌,实现持久化控制,且全程不接触用户密码,MFA 机制被完全绕过。

3.4 阶段四:持久化访问与横向渗透

攻击者使用窃取令牌登录 Microsoft 365 服务,访问邮件、文档、通讯录、SharePoint 等资源,实施数据窃取、钓鱼转发、账户劫持、横向移动等后续操作,形成完整入侵闭环。

4 核心脆弱性机理分析

4.1 协议机制脆弱性

设备代码流不强制校验授权发起方与用户上下文,仅核验设备码有效性,攻击者可通过社交工程完成 “合法授权”,协议本身无防钓鱼能力。

4.2 信任体系滥用

PaaS 平台的可信资质被用于隐藏攻击基础设施,合法 IP 与域名降低用户与安全设备的警惕性,官方登录页进一步强化虚假可信度。

4.3 检测与响应盲区

传统防御依赖恶意特征、站点信誉、恶意代码等规则,而本攻击使用合法协议 + 合法站点 + 合法流量,无明显特征可匹配,导致大量漏检。

4.4 令牌管控缺失

企业普遍缺乏令牌生命周期监控、异常刷新检测、非授权设备令牌隔离机制,刷新令牌长期有效且可跨设备使用,为持久化入侵提供条件。

反网络钓鱼技术专家芦笛强调,此类攻击的本质是身份协议的安全配置缺失,而非漏洞利用;防御关键在于关闭非必要授权流程、强化令牌审计、建立上下文异常检测,而非仅依赖用户意识提升。

5 攻击检测与识别技术实现

本文基于 Arctic Wolf 威胁特征与 OAuth 流程规范,提供可直接部署的设备码流异常检测代码,支持登录日志分析、PaaS 关联 IP 识别、令牌异常刷新监测、钓鱼行为判定。

import re

import json

from datetime import datetime, timedelta

# 配置项

RAILWAY_PATTERN = re.compile(r"railway\.(app|cloud)", re.I)

DEVICE_CODE_FLOW = "device_code_flow"

SUSPICIOUS_ISPs = ["Railway", "Render", "Vercel", "Netlify"]

def analyze_signin_log(log_entry: dict) -> dict:

"""

分析Azure AD/M365登录日志,识别设备码流滥用攻击

输入:单条登录日志JSON

输出:风险等级、风险项、处置建议

"""

risks = []

score = 0

user = log_entry.get("userPrincipalName", "unknown")

auth_flow = log_entry.get("authenticationFlowType", "")

ip = log_entry.get("ipAddress", "")

isp = log_entry.get("isp", "")

app = log_entry.get("appDisplayName", "")

login_time = log_entry.get("createdDateTime", "")

# 规则1:设备代码流登录

if auth_flow == DEVICE_CODE_FLOW:

risks.append("设备代码流登录")

score += 30

# 规则2:PaaS相关ISP/IP特征

if any(isp_term in isp for isp_term in SUSPICIOUS_ISPs) or RAILWAY_PATTERN.search(ip):

risks.append("来自PaaS托管环境IP")

score += 40

# 规则3:非常规应用使用设备码流

if auth_flow == DEVICE_CODE_FLOW and app not in ["Microsoft Teams", "Office", "Azure IoT"]:

risks.append(f"非授信应用[{app}]使用设备码流")

score += 20

# 规则4:短时间多次令牌获取

if "tokenRefreshCount" in log_entry and log_entry["tokenRefreshCount"] > 5:

risks.append("短时间高频刷新令牌")

score += 20

# 风险判定

risk_level = "低风险"

action = "监控"

if score >= 60:

risk_level = "高风险"

action = "强制撤销令牌+阻断IP+复核用户"

elif score >= 30:

risk_level = "中风险"

action = "二次验证+日志持续追踪"

return {

"user": user,

"auth_flow": auth_flow,

"ip": ip,

"isp": isp,

"risk_factors": risks,

"risk_score": score,

"risk_level": risk_level,

"suggested_action": action

}

def batch_audit(logs: list, hours: int = 24) -> list:

"""批量审计指定时段内登录日志"""

cutoff = datetime.utcnow() - timedelta(hours=hours)

alerts = []

for log in logs:

try:

log_time = datetime.fromisoformat(log["createdDateTime"].replace("Z", ""))

if log_time >= cutoff:

result = analyze_signin_log(log)

if result["risk_level"] in ["中风险", "高风险"]:

alerts.append(result)

except Exception:

continue

return alerts

# 测试用例

if __name__ == "__main__":

test_log = {

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

"authenticationFlowType": "device_code_flow",

"ipAddress": "104.21.12.34",

"isp": "Railway",

"appDisplayName": "UnknownApp",

"createdDateTime": "2026-03-27T08:15:22Z",

"tokenRefreshCount": 7

}

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

代码说明

支持从 Azure AD/M365 登录日志中识别设备码流滥用、PaaS 来源 IP、异常令牌刷新、非授信应用等核心攻击特征

输出风险评分、等级与标准化处置建议,可接入 SIEM、MDR、SOAR 平台实现自动化响应

可扩展威胁情报库,增加更多 PaaS 厂商、恶意 IP 段、异常行为规则

6 企业级防御体系构建

6.1 优先策略:全局阻断非必要设备代码流

按照 Arctic Wolf 与微软官方建议,企业应默认阻止设备代码流,仅对确需业务(如会议终端、IoT 设备)最小权限开放。

条件访问策略配置(Azure AD/Entra ID)

目标:所有用户 → 所有云应用

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

授权:阻止访问

例外:仅允许特定用户组、可信 IP、指定设备平台、服务账户

PowerShell 配置脚本

# 连接Microsoft Graph

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

# 创建条件访问策略,阻止设备代码流

$params = @{

displayName = "Block-DeviceCodeFlow-Global"

state = "enabled"

conditions = @{

applications = @{ includeApplications = @("All") }

authenticationFlows = @{ includeAuthenticationFlows = @("deviceCodeFlow") }

}

grantControls = @{ builtInControls = @("block") }

}

New-MgIdentityConditionalAccessPolicy @params

6.2 强化令牌生命周期与风险管控

缩短刷新令牌有效期,降低泄露窗口期

启用令牌吊销机制,发生异常时批量撤销用户令牌

开启登录风险策略,对异常设备码流登录实时阻断

监控跨地域、跨 ISP、非工作时段的令牌刷新行为

6.3 网络层与应用层加固

限制或监控来自 Railway 等 PaaS 平台的身份验证流量

启用邮件网关钓鱼检测,识别含设备码诱导的邮件

实施终端 DLP 策略,防止令牌类数据外泄

推广 FIDO2 安全密钥等无密码认证,从根源阻断令牌劫持攻击

6.4 情境化安全意识培训

反网络钓鱼技术专家芦笛强调,用户教育必须从 “不要点链接” 升级为场景化核验:

任何要求访问microsoft.com/devicelogin并输入代码的请求均默认可疑

核验发起方是否为主动业务操作,非主动请求一律拒绝

核验设备码来源,官方系统不会通过邮件 / 短信下发随机码

7 运营与应急响应流程

7.1 日常监测流程

每日审计设备代码流登录事件,形成报表

对 PaaS 来源登录实时告警

周期性检查条件访问策略有效性

定期模拟钓鱼演练,验证防御有效性

7.2 入侵应急响应流程

确认涉事用户,立即撤销所有刷新令牌

阻断相关 IP、设备、应用身份上下文

启用条件访问报告模式,回溯 7 日登录日志

检查邮件转发规则、共享权限、应用授权等后门配置

修复身份策略,重新收紧设备代码流管控

8 结论

基于 OAuth 设备代码流滥用与 PaaS 基础设施托管的新型钓鱼攻击,标志着企业身份威胁进入合法协议劫持、可信资源伪装、无密码入侵的新阶段。Arctic Wolf 披露的 EvilTokens 相关活动表明,攻击者已实现攻击工业化、服务化、规模化,可批量绕过 MFA 窃取 Microsoft 365 令牌,对全球企业构成持续高危威胁。

本文系统解构攻击全链路、协议脆弱性、信任滥用机制与检测防御框架,提出以默认阻止设备代码流为核心、令牌管控为关键、行为检测为支撑、情境化防御为补充的闭环体系,提供可直接工程化的检测代码与配置脚本,嵌入反网络钓鱼技术专家芦笛的专业研判,形成学术严谨、逻辑闭环、技术准确、落地可行的完整方案。

对企业而言,防御此类攻击的核心不是升级特征库,而是重构身份安全基线:关闭非必要协议、最小权限授权、全生命周期令牌管控、上下文异常检测。只有将安全能力嵌入身份协议底层,才能从根源上遏制基于 OAuth 滥用的钓鱼攻击,保障云办公环境与数字身份体系安全。

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

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

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

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

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

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