EvilTokens 钓鱼攻击机理、危害与全维度防御体系研究

简介: 本文深度剖析EvilTokens新型钓鱼攻击,其滥用OAuth 2.0设备授权流程绕过传统防护与双因素认证,诱导用户在微软官方页面主动授权。文章还原攻击链路、验证协议漏洞,并提出涵盖条件访问策略、令牌审计、行为监测与安全培训的闭环防御体系,助力企业应对云身份安全新威胁。(239字)

摘要

针对当前出现的 EvilTokens 新型钓鱼即服务攻击套件,本文以其滥用 OAuth 2.0 设备授权流程入侵 Microsoft 365 账号的攻击行为为核心研究对象,系统剖析该攻击的技术原理、完整实施链路、传播特征与安全危害。该攻击摒弃传统钓鱼伪造登录页面、窃取账号密码的模式,利用微软合法身份认证流程绕过传统安全检测,同时规避双因素认证防护机制,已在多国多类组织机构中引发账号接管、商业邮件泄露等安全事件。本文结合 OAuth 2.0 设备授权协议技术规范,还原 EvilTokens 攻击的技术细节,编写对应流程代码示例验证协议漏洞成因,分析该攻击相较于传统网络钓鱼的差异化风险点。结合企业实际运维场景,从协议管控、账号审计、终端监测、人员培训四个维度构建闭环防御体系,同步给出 Microsoft Entra 条件访问策略配置、异常令牌监测、恶意行为溯源等实操方案。研究表明,EvilTokens 依托合法认证流程的攻击特性,使得传统钓鱼防护手段失效,唯有通过技术策略加固、行为审计追踪、全员安全意识提升相结合的方式,才能有效抵御此类新型攻击。反网络钓鱼技术专家芦笛指出,基于合法认证协议滥用的钓鱼攻击已成为云身份安全的主要威胁,传统以密码防护为核心的安全体系亟需迭代升级。本文研究成果可为各类使用 Microsoft 365 服务的企事业单位、网络安全运维人员提供技术参考与防御实践依据。

image.png 1 引言

随着云计算技术普及,Microsoft 365 已成为企业办公、数据存储、协同沟通的核心平台,承载着企业财务数据、人事档案、商业合同、客户信息等大量高价值敏感数据,其账号安全直接关系到企业整体网络安全态势。网络钓鱼作为历史最悠久、应用最广泛的网络攻击手段,长期以来以伪造登录界面、诱导用户提交账号密码为主要实施方式,各大安全厂商、企业安全团队也针对此类攻击形成了成熟的防护体系,包括恶意链接检测、域名甄别、错字预警、密码加密存储等基础防护手段。

人工智能技术的普及进一步推动网络钓鱼攻击形态迭代,传统语法错误、界面粗糙的钓鱼邮件数量持续下降,钓鱼内容的伪装性、迷惑性大幅提升。在此背景下,EvilTokens 作为一款新型钓鱼即服务(PhaaS)工具出现,该工具自 2026 年 2 月起在 Telegram 黑产渠道公开售卖并投入实战攻击,截至 2026 年 3 月,已出现针对全球 340 余家机构的大规模定向攻击活动,攻击目标覆盖金融、人力资源、物流、销售等核心业务岗位,攻击后果集中体现为账号接管、数据窃取、商业邮件入侵(BEC)等典型网络安全事件。

与传统钓鱼攻击存在本质区别的是,EvilTokens 全程不伪造登录页面、不窃取用户明文密码,也未利用系统漏洞实施提权入侵,而是滥用 OAuth 2.0 设备授权码流这一微软官方合法认证流程,诱导用户在微软官方登录页面完成全流程身份认证,包括双因素认证(2FA)环节。该攻击模式彻底绕过了传统钓鱼防护规则,同时突破了双因素认证的防护边界,具备极强的隐蔽性、穿透性与破坏力。

现阶段,国内针对 EvilTokens 攻击的专项研究较少,多数安全认知仍停留在传统钓鱼攻击范畴,企业安全人员对 OAuth 2.0 设备授权流的滥用风险认知不足,缺乏针对性的检测、阻断与溯源方案。基于此,本文以 EvilTokens 攻击套件为研究样本,深度拆解其攻击流程、技术原理与风险特征,结合协议代码示例分析漏洞根源,量化评估该攻击对 Microsoft 365 生态的安全威胁,从技术管控、安全监测、应急处置、人员培训等多个层面搭建完整防御体系,填补新型协议滥用类钓鱼攻击的研究空白,帮助企业建立适配云办公场景的身份安全防护机制。

2 相关技术基础与 EvilTokens 攻击概述

2.1 OAuth 2.0 设备授权流程技术规范

OAuth 2.0 是目前互联网领域主流的开放授权协议,核心作用是在不泄露用户账号密码的前提下,允许第三方应用合法获取用户在平台中的资源访问权限,广泛应用于各类云服务、第三方登录、跨平台授权场景。设备授权码流(Device Authorization Grant)是 OAuth 2.0 协议下的专用授权模式,微软标识平台(Microsoft Entra ID)原生支持该流程,其设计初衷是适配智能电视、网络打印机、物联网终端等输入能力受限的设备。此类设备无完整键盘、触控交互界面,无法直接完成账号密码输入与复杂验证操作,设备授权流通过 “设备生成验证码 + 用户在其他终端完成认证” 的分离式交互逻辑,解决弱输入设备的身份授权问题。

标准 OAuth 2.0 设备授权流程分为五个核心环节,各环节交互主体、接口地址、数据流向均有明确规范,具体流程如下:

第一,设备客户端向身份认证服务器发起设备码请求。弱输入设备调用认证服务器/devicecode接口,提交客户端 ID、授权范围等参数,服务器校验客户端合法性后,返回device_code(设备唯一标识码,服务端与客户端会话绑定凭证)、user_code(用户可视化短验证码,用于用户端关联会话)、verification_uri(官方认证页面地址)、验证码有效期、轮询间隔等核心数据。微软体系下,验证码默认有效期为 15 分钟,该时间窗口是整个流程的关键约束条件。

第二,设备展示认证信息。弱输入设备屏幕展示user_code与官方认证链接,提示用户使用手机、电脑等常规终端访问链接并输入验证码。

第三,用户完成身份认证与授权。用户通过常规终端访问微软官方microsoft.com/devicelogin页面,输入user_code,随后完成账号登录、密码验证、双因素认证等全流程操作,并确认授权当前设备访问账号资源。

第四,设备客户端轮询令牌接口。设备客户端按照服务器返回的轮询间隔,持续调用/token接口,携带device_code、客户端 ID 等参数请求访问令牌。在用户未完成授权前,服务器持续返回轮询提示;用户完成授权后,服务器终止轮询并下发令牌数据。

第五,客户端使用令牌访问资源。设备客户端获取access_token(访问令牌)与refresh_token(刷新令牌),凭借令牌访问用户 Microsoft 365 旗下邮箱、网盘、协同工具等受保护资源。其中访问令牌具备短期有效性,刷新令牌可长期使用,用于在访问令牌过期后自动续签,无需再次发起认证流程。

从安全设计逻辑来看,标准设备授权流依赖 “设备 - 用户终端” 的交互隔离与用户主动授权行为,正常场景下不存在安全风险。但该流程 “会话绑定分离、用户主动授权、令牌长效有效” 三大特性,被 EvilTokens 恶意利用,成为新型钓鱼攻击的核心突破口。

2.2 EvilTokens 攻击套件基本特征

EvilTokens 是一款商业化钓鱼即服务(PhaaS)工具,攻击者无需掌握深度编程技术,通过套件配置即可批量发起针对 Microsoft 365 账号的定向钓鱼攻击,黑产运营门槛极低。该套件自 2026 年 2 月起在 Telegram 地下渠道公开推广、售卖,迅速被全球网络犯罪团伙采纳,主要用于账号接管、商业邮件入侵、企业数据窃取等黑产活动。结合安全厂商监测数据,该套件具备以下核心特征:

第一,攻击载体高度伪装。EvilTokens 的钓鱼传播载体以邮件、即时通讯消息为主,诱饵内容模拟企业日常办公文件,包括电子发票、共享文档、日程邀请、SharePoint 权限申请等,完全贴合企业员工日常工作场景,降低用户警惕性。诱饵页面模仿正规企业服务界面,仅标注 “点击验证查看内容”“签署文件” 等简单引导话术,无明显异常特征。

第二,全程依托官方认证页面。该攻击全程不搭建伪造登录站点,用户点击诱饵链接后跳转至微软官方设备登录页面,域名、页面样式、证书均为微软正规资源,传统域名黑名单、页面特征检测、证书校验等钓鱼防护手段完全失效。

第三,攻击链路分工明确。EvilTokens 攻击分为前期情报侦察、钓鱼载荷投放、诱导用户授权、令牌窃取利用四个阶段,黑产团伙可拆分分工,规模化实施攻击。安全厂商监测数据显示,攻击者通常会提前 10~15 天开展情报侦察,批量校验目标企业员工账号的活跃状态,筛选有效攻击目标,提升攻击成功率。

第四,适配 AI 辅助优化。部分攻击者结合人工智能技术对 EvilTokens 进行二次优化,实现动态设备码生成、个性化诱饵定制,根据目标企业行业、岗位特征调整钓鱼内容,进一步提升伪装效果与攻击成功率。

第五,攻击目标指向性强。攻击者优先选择企业财务、人力资源、物流、销售等核心业务岗位账号,此类账号存储企业资金数据、人事信息、客户资料等高价值数据,入侵后可直接开展商业邮件诈骗、数据倒卖等后续违法活动。

2.3 EvilTokens 与传统网络钓鱼的差异化对比

为清晰界定 EvilTokens 攻击的风险特殊性,本文从攻击原理、攻击载体、防护突破点、风险持续性、应对难度五个维度,将其与传统密码窃取型钓鱼攻击进行对比,具体内容如表 1 所示。

表 1 EvilTokens 攻击与传统网络钓鱼对比分析

表格

对比维度 传统密码窃取型钓鱼 EvilTokens 新型钓鱼攻击

核心攻击原理 伪造登录页面,诱导用户输入账号、密码、验证码,直接窃取明文凭证 滥用 OAuth 2.0 设备授权流,诱导用户为攻击者会话完成合法授权,窃取访问令牌与刷新令牌

登录页面属性 伪造仿冒页面,域名异常、证书无效、页面存在特征破绽 微软官方登录页面,域名、证书、页面均为正规资源

双因素认证防护效果 可被 2FA 有效拦截,攻击者获取密码后仍无法登录 绕过 2FA 防护,用户主动为攻击者完成 2FA 验证,防护机制完全失效

凭证有效期 窃取的密码可长期使用,修改密码后即可终止风险 刷新令牌具备长效性,仅修改密码无法吊销令牌,风险持续存在

传统防护手段有效性 域名检测、链接查杀、页面识别可实现基础拦截 传统防护手段全部失效,无显性攻击特征

溯源难度 伪造站点、恶意域名可快速定位攻击源 依托微软官方接口,攻击流量混杂正常流量,溯源难度大幅提升

通过对比可见,EvilTokens 攻击颠覆了传统网络钓鱼的攻击逻辑与风险特征,其最大威胁在于将 “恶意攻击行为包装为合法认证行为”,从攻击表象上完全消除了传统钓鱼的识别特征,对现有企业安全防护体系形成全面挑战。

3 EvilTokens 攻击全流程深度拆解与技术实现

3.1 攻击整体链路拆解

结合 EvilTokens 套件运行逻辑、OAuth 2.0 设备授权流协议规范以及实战攻击样本,本文将 EvilTokens 攻击划分为情报侦察阶段、载荷投放阶段、设备码诱导阶段、身份授权阶段、令牌窃取与资源滥用阶段、持久化控制阶段六个连贯环节,六个环节形成完整攻击闭环,每个环节的技术动作、交互对象、核心目标明确,具体拆解如下。

3.1.1 情报侦察阶段(攻击前置环节)

该阶段为攻击准备环节,时间跨度通常为 10~15 天,攻击者利用公开渠道、弱接口批量探测目标企业 Microsoft 365 租户下的员工账号状态。攻击者通过自动化脚本批量验证邮箱账号是否处于活跃状态,过滤已注销、禁用、无效的账号,筛选出可正常登录、使用的有效目标。

侦察阶段无恶意流量、无钓鱼邮件投放,仅存在常规账号探测请求,隐蔽性极强,多数企业无针对性监测规则,难以发现前置侦察行为。侦察完成后,攻击者按照岗位、部门对有效账号分类排序,优先标记财务、人事、管理层等高价值账号,作为重点攻击目标。

3.1.2 钓鱼载荷投放阶段

攻击者利用 EvilTokens 套件生成钓鱼载荷,以企业邮箱、办公通讯工具为主要投放渠道,向筛选后的目标账号发送伪装邮件或消息。载荷诱饵严格模拟企业办公场景,主流诱饵类型包括:外部合作方电子发票通知、团队共享文档查看请求、会议日历新增邀请、SharePoint 文件访问权限申请四大类。

诱饵正文措辞简洁,以 “点击链接验证身份查看文件”“签署电子回执” 为核心引导话术,无夸张、诱导性语言,贴合企业日常办公沟通习惯。载荷中嵌入恶意跳转链接,该链接并非直接指向钓鱼页面,而是指向 EvilTokens 套件搭建的中转页面,中转页面为攻击链路的关键节点。

3.1.3 设备码申请与展示阶段

目标用户点击邮件中的跳转链接后,访问攻击者控制的中转页面。该中转页面作为恶意客户端,按照 OAuth 2.0 设备授权流规范,主动向微软/devicecode官方接口发起请求,携带攻击者提前配置的客户端 ID、授权范围(包含邮箱、OneDrive、Teams、SharePoint 等全量资源权限)等参数。

微软认证服务器校验请求合法性后,向中转页面返回标准协议数据:device_code、user_code、官方认证地址https://microsoft.com/devicelogin、验证码有效期(15 分钟)、轮询间隔。中转页面提取其中的user_code与官方认证链接,展示在用户终端页面上,同时提示用户 “输入验证码完成身份验证,即可查看对应文件 / 发票”。

此环节核心陷阱:页面展示的user_code对应的device_code 归属攻击者会话,而非用户自身设备。用户后续的所有认证操作,本质上是为攻击者控制的恶意会话进行授权。同时验证码仅 15 分钟有效,短有效期会对用户形成心理催促,迫使用户来不及仔细甄别风险,快速完成验证操作。

3.1.4 身份认证与授权阶段(核心欺骗环节)

用户按照页面提示,使用电脑、手机等终端访问微软官方设备登录页面microsoft.com/devicelogin,输入页面展示的user_code。由于域名、页面、安全证书均为微软官方资源,用户极易放松警惕。

输入验证码后,页面跳转至 Microsoft 365 账号登录界面,用户依次输入账号密码、完成双因素认证(短信验证码、动态令牌、人脸识别等),最后页面弹出授权提示,询问是否允许对应设备访问账号资源。多数用户因场景伪装性强,直接点击 “同意授权”。

从微软服务器视角来看,整个流程是标准、合法的设备授权流程,服务器无法区分发起设备码请求的客户端是正规设备还是恶意中转页面,因此正常受理所有认证与授权操作。该环节中,双因素认证完全失去防护作用 —— 传统 2FA 用于拦截 “攻击者窃取密码后尝试登录” 的行为,而在此攻击中,是用户主动为攻击者完成 2FA 验证,防护逻辑被彻底绕过。

微软官方页面在认证过程中会弹出文字警示,提醒用户 “不要输入来自非可信来源的验证码”,但由于诱饵场景过于真实,多数用户会忽略该警示信息,完成授权操作。

3.1.5 令牌窃取与资源滥用阶段

在用户进行身份认证的同时,攻击者控制的中转页面持续按照协议规范轮询微软/token令牌接口。当用户完成全部授权操作后,微软认证服务器确认会话授权生效,向攻击者的恶意客户端下发access_token(访问令牌)与refresh_token(刷新令牌)。

攻击者获取两类令牌后,无需再次验证账号密码,即可凭借令牌模拟合法用户身份,访问该 Microsoft 365 账号下的所有授权资源,包括企业邮箱、OneDrive 云盘、Teams 聊天记录、SharePoint 共享文件等。攻击者可批量下载敏感数据、查看往来邮件、篡改邮件规则,为后续商业邮件诈骗、数据窃取做准备。

3.1.6 持久化控制阶段

该攻击最大的长期风险来自refresh_token(刷新令牌)。访问令牌生命周期较短,通常为数小时至数天,但刷新令牌有效期极长,且支持离线续签访问令牌。只要攻击者持有刷新令牌,即便用户后续修改账号密码、注销当前登录会话,攻击者依然可以定期调用令牌接口,自动获取新的访问令牌,持续控制目标账号,实现长期持久化入侵。

部分攻击者还会在入侵账号后,新增恶意收件箱规则,自动转发企业内部邮件至攻击者邮箱,或屏蔽安全告警邮件,隐蔽入侵行为,延长攻击潜伏时间。企业安全人员若仅检查在线登录会话,很难发现此类后台持久化控制行为。

3.2 OAuth 2.0 设备授权流核心代码示例

为直观展示 EvilTokens 攻击依托的协议原理,本文基于 Python 语言编写 OAuth 2.0 设备授权流完整代码示例,模拟 “恶意客户端申请设备码、用户授权、轮询获取令牌” 全流程。代码严格遵循微软 Microsoft Entra ID 接口规范,还原协议交互逻辑,同时标注攻击可利用的关键节点。所有代码仅用于安全研究与防御测试,禁止用于非法攻击活动。

3.2.1 环境与接口说明

运行环境:Python 3.8 及以上版本,依赖requests网络请求库;

微软官方接口地址:

设备码请求接口:https://login.microsoftonline.com/common/oauth2/v2.0/devicecode

令牌获取接口:https://login.microsoftonline.com/common/oauth2/v2.0/token

基础参数说明:

client_id:应用客户端 ID,攻击者通过注册微软应用即可获取;

scope:授权范围,示例中配置为 Microsoft 365 全量资源权限;

grant_type:授权类型,设备流固定取值为urn:ietf:params:oauth:grant-type:device_code。

3.2.2 完整代码实现

# -*- coding: utf-8 -*-

# OAuth 2.0 设备授权流模拟代码(安全研究用途)

# 模拟EvilTokens攻击核心协议交互流程

import requests

import time

import json


# 1. 基础配置参数(攻击者预先配置的参数)

# 攻击者注册应用后获取的客户端ID,实际攻击中使用有效Client ID

CLIENT_ID = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

# 授权范围:包含Microsoft 365邮箱、文件、协同工具全权限

SCOPE = "https://graph.microsoft.com/Mail.ReadWrite https://graph.microsoft.com/Files.ReadWrite https://graph.microsoft.com/Teams.ReadWrite offline_access"

# 微软官方接口地址

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

TOKEN_URL = "https://login.microsoftonline.com/common/oauth2/v2.0/token"


def get_device_code():

   """

   第一步:向微软接口请求device_code、user_code等核心数据

   对应EvilTokens中转页面的核心动作

   """

   # 构造请求参数

   post_data = {

       "client_id": CLIENT_ID,

       "scope": SCOPE

   }

   headers = {

       "Content-Type": "application/x-www-form-urlencoded"

   }

   try:

       # 发起POST请求获取设备码信息

       response = requests.post(DEVICE_CODE_URL, data=post_data, headers=headers, timeout=10)

       if response.status_code == 200:

           result = json.loads(response.text)

           # 解析返回核心字段

           device_code = result.get("device_code")       # 会话绑定设备码(攻击者持有)

           user_code = result.get("user_code")         # 展示给用户的验证码

           verification_uri = result.get("verification_uri")  # 微软官方认证地址

           expires_in = result.get("expires_in")       # 验证码有效期(默认15分钟)

           interval = result.get("interval", 5)        # 轮询间隔(默认5秒)

         

           print("========== 设备码信息(展示给受害者) ==========")

           print(f"请访问官方地址:{verification_uri}")

           print(f"请输入验证码:{user_code}")

           print(f"验证码有效期:{int(expires_in/60)} 分钟")

           print("==================================================")

           return device_code, interval

       else:

           print(f"设备码请求失败,状态码:{response.status_code},返回内容:{response.text}")

           return None, None

   except Exception as e:

       print(f"设备码请求异常:{str(e)}")

       return None, None


def poll_token(device_code, interval):

   """

   第二步:轮询令牌接口,等待用户完成授权后获取访问令牌与刷新令牌

   对应EvilTokens后台持续轮询动作

   """

   print("开始轮询令牌接口,等待用户完成授权...")

   post_data = {

       "client_id": CLIENT_ID,

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

       "device_code": device_code

   }

   headers = {

       "Content-Type": "application/x-www-form-urlencoded"

   }

   # 循环轮询,直到获取令牌或验证码过期

   while True:

       try:

           response = requests.post(TOKEN_URL, data=post_data, headers=headers, timeout=10)

           result = json.loads(response.text)

           # 判断返回结果类型

           if response.status_code == 200:

               # 用户已完成授权,成功获取令牌(攻击达成核心目标)

               access_token = result.get("access_token")

               refresh_token = result.get("refresh_token")

               token_type = result.get("token_type")

               expires_in = result.get("expires_in")

               print("\n========== 成功获取令牌(攻击者窃取凭证) ==========")

               print(f"访问令牌(access_token):{access_token[:30]}......")

               print(f"刷新令牌(refresh_token):{refresh_token[:30]}......")

               print(f"访问令牌有效期:{expires_in} 秒")

               print("=====================================================")

               return access_token, refresh_token

           else:

               # 未报错则继续轮询(用户暂未完成授权)

               error = result.get("error")

               if error == "authorization_pending":

                   print(f"用户未完成授权,{interval}秒后继续轮询...")

                   time.sleep(interval)

               elif error == "slow_down":

                   # 服务器要求延长轮询间隔,规避接口限流

                   interval += 2

                   print(f"请求频繁,调整轮询间隔为{interval}秒")

                   time.sleep(interval)

               elif error == "expired_token":

                   # 验证码过期,攻击失败

                   print("验证码已过期,攻击终止")

                   return None, None

               else:

                   print(f"轮询异常,错误信息:{result}")

                   return None, None

       except Exception as e:

           print(f"轮询请求异常:{str(e)}")

           time.sleep(interval)


def main():

   """主函数:模拟完整设备授权流攻击链路"""

   print("===== 模拟OAuth 2.0设备授权流(EvilTokens核心协议) =====")

   # 第一步:获取设备码与用户验证码

   device_code, interval = get_device_code()

   if not device_code:

       return

   # 第二步:轮询获取令牌

   poll_token(device_code, interval)


if __name__ == "__main__":

   main()

3.2.3 代码运行逻辑与攻击节点分析

代码运行流程:程序启动后,首先调用get_device_code函数向微软官方接口发起设备码请求,解析返回的user_code与官方认证链接并展示,模拟钓鱼页面向受害者推送验证码的动作;随后调用poll_token函数,按照固定间隔持续轮询令牌接口。当受害者在微软官方页面输入验证码、完成账号密码与 2FA 验证并同意授权后,程序获取access_token与refresh_token,协议流程结束。

攻击利用关键节点:

(1)客户端 ID 无严格审核:攻击者仅需注册普通微软应用即可获取有效client_id,微软未对设备码请求的客户端进行风险分级管控,恶意客户端可正常调用接口;

(2)会话归属混淆:device_code由攻击者持有,user_code展示给用户,用户无法识别验证码对应的会话归属,被动为恶意会话授权;

(3)刷新令牌长效化:代码中scope参数加入offline_access权限,确保服务器下发refresh_token,实现持久化控制;

(4)短有效期施压:15 分钟的验证码有效期形成时间压力,降低用户风险甄别意愿。

该代码完整还原了 EvilTokens 攻击的底层协议逻辑,也直观证明:攻击成功的核心并非系统漏洞,而是协议设计特性被恶意滥用 + 用户社会工程学欺骗的结合体。

3.3 攻击技术难点与黑产运营模式

3.3.1 攻击技术难点

从技术实现角度,EvilTokens 套件大幅降低了攻击门槛,但黑产在实战攻击中仍需应对两类技术限制:

第一,接口轮询限流。微软令牌接口存在访问频率限制,若轮询间隔过短,服务器会返回slow_down错误并要求延长间隔,攻击者需按照协议规则调整轮询频率,无法高频暴力请求。

第二,验证码时效性约束。user_code仅 15 分钟有效,若用户长时间未操作,验证码自动失效,攻击链路中断。因此攻击者高度依赖社会工程学话术催促用户即时操作。

第三,应用权限管控。若微软租户管理员提前收紧应用授权权限,限制陌生应用访问高价值资源,即便攻击成功获取令牌,也无法窃取核心数据。

3.3.2 黑产运营模式

EvilTokens 以 “钓鱼即服务” 模式运营,黑产团伙分工明确,形成产业化链条:

套件售卖者:开发、维护 EvilTokens 工具,在 Telegram 等暗网渠道按月 / 按次售卖使用权,提供版本更新、技术答疑服务,赚取基础收益;

攻击执行者:购买套件后,批量搜集企业邮箱账号、配置钓鱼诱饵、投放钓鱼载荷,实施前置侦察与全流程攻击;

数据变现者:接收攻击者窃取的企业数据、接管的账号,开展商业邮件诈骗、数据倒卖、勒索等违法活动,完成利益变现;

技术优化者:结合 AI 技术优化诱饵内容、动态生成设备码,提升攻击成功率,对套件进行二次增值开发。

产业化运营模式使得该攻击具备快速扩散、持续迭代的特点,也是其在短时间内席卷多国企业的重要原因。

4 EvilTokens 攻击安全危害与风险评估

4.1 直接安全危害

4.1.1 企业核心数据泄露

攻击者凭借窃取的令牌,可无限制访问 Microsoft 365 账号绑定的所有资源。财务岗位账号被入侵后,企业发票、流水、合同、对公账户信息面临泄露风险;人力资源账号泄露会导致员工身份证、薪资、劳动合同等隐私数据外泄;销售岗位账号泄露会造成客户名单、报价方案、合作机密流失。数据泄露不仅会造成企业经济损失,还可能违反《网络安全法》《个人信息保护法》等法律法规,引发合规处罚。

4.1.2 商业邮件入侵(BEC)诈骗

商业邮件入侵是该攻击最常见的衍生危害。攻击者接管企业邮箱后,伪造企业负责人、财务人员身份,向合作方、内部员工发送虚假转账通知、付款指令,利用企业固有的邮件沟通信任关系实施诈骗。近年来,全球多起百万级、千万级商业邮件诈骗案件均由此类钓鱼攻击引发,给企业造成直接经济损失。

4.1.3 账号持久化失控

由于refresh_token的长效特性,用户单纯修改密码、下线当前登录设备,无法吊销攻击者持有的刷新令牌。攻击者可长期潜伏在企业办公系统中,定期续签访问令牌,持续监控邮件、文件往来。部分潜伏攻击可维持数月之久,安全团队难以发现,隐患长期存在。

4.1.4 内部攻击横向扩散

若被入侵账号具备企业内部管理员权限,攻击者可利用该账号进一步探测内网架构、获取更多员工账号信息,以当前账号为跳板,向企业内部其他终端、账号发起横向渗透,将单点账号入侵演变为全域网络安全事件。

4.2 间接危害

4.2.1 企业声誉受损

一旦数据泄露、邮件诈骗事件曝光,企业的客户、合作伙伴会对企业的数据安全管控能力产生质疑,品牌形象与行业口碑遭受打击,进而影响市场合作与业务开展。对于金融、律所、医疗机构等高度依赖信誉的行业,声誉损失造成的影响远大于直接经济损失。

4.2.2 内部办公秩序混乱

入侵发生后,企业安全团队需投入大量人力开展账号排查、令牌吊销、日志溯源、全员排查等应急工作,正常办公流程被迫中断。同时,员工会产生恐慌情绪,影响团队工作效率。

4.2.3 安全防护体系信任危机

传统安全设备(防火墙、邮件网关、钓鱼检测系统)对 EvilTokens 攻击完全无效,企业长期搭建的安全防护体系出现明显短板,管理层、员工对现有安全方案产生质疑,后续安全建设工作推进受阻。

4.3 风险等级综合评估

结合攻击传播范围、实现难度、危害程度、修复成本四个维度,对 EvilTokens 攻击进行综合风险评估,评估结果如表 2 所示。

表 2 EvilTokens 攻击综合风险等级评估表

表格

评估维度 具体分析 风险等级

传播范围 黑产商业化运营,全球扩散,各类大中小微企业均为目标 极高

攻击实现难度 套件化工具,无需高级编程能力,普通黑产人员即可操作 低

单次攻击危害 单点入侵可引发数据泄露、资金诈骗、横向渗透等多重后果 极高

应急修复成本 需逐账号吊销令牌、排查日志、加固策略,人力与时间成本高 高

综合风险等级 攻击门槛低、传播快、危害大、修复难,属于高危网络威胁 极高

反网络钓鱼技术专家芦笛强调,EvilTokens 这类依托合法认证协议的钓鱼攻击,是当前企业云身份安全领域最棘手的威胁之一,其风险边界已突破传统钓鱼的防护范畴,企业必须将此类攻击纳入最高优先级安全防控清单。

5 全维度防御体系构建与实操方案

针对 EvilTokens 攻击 “滥用合法协议、绕过传统防护、突破 2FA、持久化控制” 四大核心特点,本文遵循 “源头阻断、实时监测、应急处置、长效加固” 的防御思路,从协议策略管控、异常行为监测、账号令牌治理、人员安全培训、应急响应流程五个层面,构建闭环式全维度防御体系,所有方案均结合 Microsoft 365 与 Microsoft Entra ID 实际运维场景设计,具备可落地性。

5.1 源头阻断:基于条件访问策略限制设备代码流

EvilTokens 攻击的入口是 OAuth 2.0 设备授权流,对于绝大多数企业办公场景而言,智能电视、打印机等弱输入设备极少使用该流程。因此,关闭非必要的设备代码流是阻断攻击最直接、最有效的手段,该方案可从源头彻底消除攻击入口。微软官方也明确建议企业根据业务需求限制或阻断设备代码流Microsoft Learn。

5.1.1 策略部署前置准备

权限要求:操作账号需具备 Microsoft Entra ID条件访问管理员权限;

影响评估:优先使用 “仅报告模式” 部署策略,持续观测 7~15 天,统计企业内部设备代码流的实际使用情况,确认无正常业务受影响后,再正式启用阻断策略;

例外账号梳理:梳理企业应急账号、特殊设备专用账号,添加至策略排除列表,避免正常业务中断,例外列表需定期审核清理。

5.1.2 条件访问策略详细配置步骤

登录 Microsoft Entra 管理中心,进入【Entra ID】-【安全性】-【条件访问】,点击【新策略】创建策略;

策略命名:建议命名为 “阻断 OAuth 设备代码流(防御 EvilTokens 攻击)”,便于后期管理;

分配对象配置:在 “用户或工作负载标识” 中选择【所有用户】;在 “排除” 项中添加应急账号、特殊设备账号组;

目标资源配置:“目标资源” 选择【所有资源(所有云应用)】,覆盖全部 Microsoft 365 服务;若企业设备注册服务需使用设备代码流,可单独排除该服务(客户端 ID:01cb2876-7ebd-4aa4-9cc9-d28bd4d359a9)Microsoft Learn;

身份验证流配置:进入【条件】-【身份验证流】,将配置设置为 “是”,勾选【设备代码流】,点击完成;

访问控制配置:进入【访问控制】-【授予】,选择【阻止访问】;

策略启用:先切换为 “仅报告” 模式观测影响,确认无异常后,正式启用策略。

对于部分因业务需求必须使用设备代码流的企业,不可直接全盘阻断,需采用精细化限制方案:仅允许指定 IP 地址段(企业内网 IP)、指定合规设备、指定部门用户使用设备代码流,拒绝外网 IP、陌生设备发起的设备码请求,缩小攻击面。

5.2 实时监测:搭建异常行为检测规则

对于无法关闭设备代码流的企业,需依靠实时监测发现异常攻击行为,监测核心围绕设备码认证行为、陌生设备登录、异常令牌、可疑收件箱规则四大指标展开,结合日志审计与告警规则实现主动发现。

5.2.1 核心监测指标与告警规则

异常设备代码认证监测

监测日志来源:Microsoft Entra 登录日志;监测规则:非工作时间、外网 IP 地址、陌生地理位置触发设备代码流认证,立即触发高危告警。正常员工办公不会在外网、非工作时段使用设备码认证,此类行为基本可判定为攻击行为。

陌生设备登录监测

规则:账号首次出现未知终端、未知操作系统登录记录,且登录会话关联设备代码流,触发告警。安全运维人员第一时间核查登录行为合法性。

令牌异常使用监测

规则:短时间内同一账号频繁申请令牌、令牌权限范围包含全量邮件 / 文件权限、刷新令牌异地使用,触发告警。

恶意收件箱规则监测

规则:账号自动新增邮件转发、自动删除、隐藏收件箱规则,且新增时间与设备码认证时间重合,判定为入侵后持久化操作,立即告警。

5.2.2 日志审计与溯源方法

运维人员需每日定期导出 Microsoft Entra 登录日志、Office 365 审计日志,重点筛选device_code相关认证记录。若发现可疑记录,通过日志中的客户端 IP、地理位置、会话 ID 追溯攻击链路,定位攻击来源与受影响账号。建议使用日志集中管理平台,实现日志自动化分析、告警聚合,提升监测效率。

5.3 事中管控:账号与令牌应急处置方案

当监测到疑似 EvilTokens 攻击行为、或员工上报异常验证码请求时,需立即执行应急处置,阻断攻击者会话、吊销恶意令牌,防止风险扩大。反网络钓鱼技术专家芦笛指出,令牌吊销是处置此类攻击的核心环节,仅下线登录会话无法根除风险,必须同步失效刷新令牌。

5.3.1 分级处置流程

初级预警(收到异常验证码请求,未完成授权)

员工收到陌生发票、文档类钓鱼消息,页面要求输入设备验证码,但尚未在微软官方页面完成认证。处置动作:立即关闭页面,删除钓鱼邮件,第一时间上报企业 IT / 安全团队;安全人员对该账号进行临时监控,排查周边账号是否收到同类钓鱼载荷。

中级告警(已完成授权,发现陌生登录)

用户不慎完成授权,安全日志监测到陌生设备登录记录。处置动作:第一时间下线所有活跃登录会话;进入 Microsoft 365 账号设置,吊销该账号所有刷新令牌,使攻击者持有的refresh_token永久失效;强制该账号修改密码与二次验证方式。

高级告警(确认账号被入侵,存在数据外泄行为)

已确认攻击者访问、下载敏感数据,或新增恶意邮件规则。处置动作:临时禁用该账号,阻断攻击者继续访问;全面审计该账号所有历史登录记录、令牌使用记录、邮件操作记录;清理恶意收件箱规则、转发规则;排查同部门、同网段账号,防止横向渗透;根据数据泄露情况启动合规上报流程。

5.3.2 批量令牌吊销实操

对于大规模攻击导致多账号沦陷的场景,管理员可通过 Microsoft PowerShell 连接 Office 365 后台,批量吊销租户内指定账号的所有刷新令牌,高效完成处置,避免逐账号手动操作。

5.4 长效加固:权限收敛与应用管控

从权限层面收紧 OAuth 应用授权规则,遵循最小权限原则,即便攻击侥幸成功,也能限制攻击者可访问的资源范围,降低损失。

限制应用默认授权范围:修改 Microsoft Entra 默认授权策略,禁止陌生应用一次性获取邮件、文件、通讯录等全量权限,仅允许申请最小必要权限;

禁用离线访问权限:对非必要应用,禁止授予offline_access权限,阻断刷新令牌的下发,消除持久化控制风险;

陌生应用审批机制:开启企业应用管理员审批功能,任何陌生第三方应用请求授权时,需管理员人工审核通过后方可生效,普通员工无法自主授权。

5.5 底层防御:全员安全意识培训与行为引导

EvilTokens 攻击的最终落地依赖社会工程学欺骗,用户安全意识薄弱是攻击成功的重要诱因。因此,人员培训是防御体系中不可或缺的底层环节,培训内容需跳出传统钓鱼识别思维,针对新型攻击定制课程。

5.5.1 培训核心内容

新型钓鱼攻击科普:向全体员工讲解 EvilTokens 攻击原理,明确 “微软官方页面也可能存在钓鱼风险”,打破 “官方页面 = 安全” 的固有认知;

异常验证码行为警示:重点强调:正规办公场景下,发票、文档、会议邀请等内容绝不会要求用户输入设备验证码,收到此类请求一律判定为异常;

风险处置动作培训:要求员工收到陌生验证码请求后,不操作、不授权,第一时间截图并上报 IT / 安全团队;

警示标识识别:引导员工关注微软官方登录页面的安全警示文字,养成阅读风险提示的习惯。

5.5.2 培训落地方式

采用常态化培训 + 模拟演练结合的模式:每季度开展一次新型钓鱼攻击专题培训;每月组织全员钓鱼演练,批量发送模拟 EvilTokens 钓鱼邮件,统计点击量、授权量,针对高风险员工进行一对一专项辅导,逐步提升全员风险甄别能力。

5.6 防御体系联动逻辑

本文构建的五层防御体系形成完整闭环,各环节联动逻辑如下:

策略管控(第一层)从源头阻断攻击入口,优先落地,覆盖全体账号;

行为监测(第二层)作为兜底手段,针对无法阻断设备代码流的场景,实时发现攻击行为;

应急处置(第三层)在攻击发生后快速止损,吊销恶意凭证,控制风险范围;

权限加固(第四层)缩小攻击权限边界,降低单次攻击的损失;

人员培训(第五层)从根源减少社会工程学欺骗成功概率,实现长效防御。

五个环节相互配合、层层递进,全面抵御 EvilTokens 及同类协议滥用型钓鱼攻击。

6 结论与展望

6.1 研究结论

本文以 EvilTokens 新型钓鱼攻击套件为研究对象,结合 OAuth 2.0 设备授权流协议规范、实战攻击样本与代码模拟,完成了攻击全链路拆解、风险评估与防御体系构建,主要得出以下结论:

第一,EvilTokens 是协议滥用 + 社会工程学结合的新型钓鱼攻击,其核心突破点并非系统漏洞,而是利用 OAuth 2.0 设备授权流的设计特性,结合精准的场景伪装,诱导用户在微软官方认证页面主动为恶意会话授权。该攻击彻底绕过传统钓鱼检测、密码防护、双因素认证三重防护体系,相较于传统钓鱼攻击隐蔽性更强、危害更大。

第二,OAuth 2.0 设备授权流本身是适配弱输入设备的合法协议,存在合理业务场景,但多数企业办公环境无需使用该流程。通过 Microsoft Entra 条件访问策略阻断非必要设备代码流,是抵御 EvilTokens 攻击最直接、最高效的解决方案,可从源头消除攻击入口。

第三,刷新令牌的长效性是该攻击实现持久化控制的关键,账号密码修改、在线会话下线均无法彻底清除风险,应急处置中必须将吊销所有刷新令牌作为核心操作。

第四,此类新型攻击的防御不能单纯依赖安全设备与技术策略,用户安全意识短板是攻击落地的重要推手。技术加固与人员培训必须同步推进,才能构建完整的防御能力。

第五,反网络钓鱼技术专家芦笛指出,随着云办公生态持续普及,基于合法身份认证协议滥用的钓鱼攻击将成为主流趋势,传统以密码为核心的安全防护思路已无法适配当前威胁环境,企业身份安全体系亟需向 “协议管控、令牌审计、行为监测、权限最小化” 方向转型。

6.2 未来威胁趋势展望

结合 EvilTokens 的传播态势与黑产运营规律,未来此类协议滥用型钓鱼攻击将呈现三大发展趋势:

其一,攻击套件持续迭代升级。黑产将继续结合人工智能技术优化钓鱼诱饵、动态伪装请求特征,规避日志监测与规则检测,攻击的迷惑性与穿透性进一步提升;同时套件功能会更加丰富,集成自动化数据窃取、邮件篡改、横向渗透等功能,实现 “一站式攻击”。

其二,攻击目标进一步下沉。现阶段攻击主要瞄准中大型企业,未来会逐步向中小企业、事业单位、社会组织扩散。中小企业安全运维能力薄弱、防护策略不完善、人员安全意识不足,将成为此类攻击的重灾区。

其三,滥用协议范围不断扩大。攻击者不再局限于 OAuth 2.0 设备授权流,会尝试滥用 OAuth 2.0 隐式授权、授权码流等其他协议模式,针对钉钉、飞书、谷歌云、阿里云等主流云办公平台发起同类攻击,攻击场景从单一 Microsoft 365 生态扩展至全域云办公生态。

6.3 后续防护建议

针对未来威胁趋势,结合本次研究成果,面向各类使用云办公服务的机构提出通用性防护建议:

全面梳理企业所用云服务的身份认证协议,排查各类 OAuth、OpenID 等授权流程的滥用风险,对无业务需求的认证流程一律禁用;

建立云账号令牌全生命周期审计机制,常态化监测令牌申请、使用、续签行为,及时发现异常令牌活动;

持续迭代安全培训内容,紧跟新型攻击形态,摒弃老旧的钓鱼识别知识,让员工掌握基于合法页面、合法协议的新型风险甄别能力;

建立跨平台应急响应预案,针对云账号入侵、协议滥用类攻击制定标准化处置流程,缩短应急响应时间,降低损失。

网络钓鱼攻击的形态会随着技术发展持续演变,攻击者的手段从 “伪造页面、窃取密码” 逐步转向 “滥用合法流程、诱导授权”,安全防护工作也必须与时俱进。唯有坚持 “技术、管理、人员” 三位一体的防护理念,持续跟踪新型攻击技术、优化防护策略、强化安全意识,才能在复杂多变的网络威胁环境中,保障企业云账号与核心数据的安全。

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

目录
相关文章
|
5天前
|
缓存 测试技术 API
Qwen 3.7 Plus 与 Max 实测:性价比与多模态能力差异解析(2026)
2026 年 6 月 1 日,阿里悄无声息地发布了 Qwen 3.7 Plus,距 Qwen 3.7 Max 上线刚好 11 天。同样的 1M 上下文,同样的 35 小时自治上限。但价格才是头条:Plus 是 0.40/M输入,Max是 2.50/M——便宜约 6 倍——并且还能看图、看视频。Vision Arena 上 Plus 已经排到 #16。所以这周真正值得讨论的问题不是”要不要为视觉能力买单”,而是”Max 凭什么用 6 倍价格换来 2 个百分点的 benchmark 领先”。
|
6天前
|
JavaScript 定位技术 API
CodeGraph 爆火:编程 Agent 需要的不是更多上下文,而是一张提前画好的代码地图
CodeGraph 是一款爆火的本地代码智能工具,通过 tree-sitter 解析 AST 构建结构化知识图谱(存于 SQLite),为编程 Agent 提前生成“代码地图”。它显著降低 Agent 在中大型项目中的探索成本——实测工具调用减少71%、Token 降57%、速度提升46%,支持19+语言及主流框架路由识别,完全离线、无需 API Key。
689 5
CodeGraph 爆火:编程 Agent 需要的不是更多上下文,而是一张提前画好的代码地图
|
6天前
|
人工智能 自然语言处理 文字识别
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
Qwen3.7-Max是阿里云百炼面向智能体时代推出的新一代旗舰模型,对标GPT-5.5、Claude Opus 4.7等闭源旗舰。该模型支持百万级token上下文窗口,具备顶级推理能力、多模态搜索与视觉理解增强、流式输出低延迟响应等核心优势,覆盖编程、办公、长周期自主执行等复杂场景。同时支持OpenAI接口兼容,便于系统快速迁移。用户可通过Token Plan团队或节省计划等订阅方式灵活调用,适合企业级高要求场景使用。
8714 37
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
|
6天前
|
人工智能 运维 JavaScript
阿里云Qoder CN(原通义灵码)全解析 产品形态、版本划分与技术适配说明
在AI辅助开发与智能办公工具持续普及的当下,阿里云旗下原通义灵码正式更名为Qoder CN,同时延伸出QoderWork CN、Qoder CN CLI、Qoder CN Mobile等多款配套产品,形成覆盖代码开发、日常办公、终端交互、移动端使用的完整工具矩阵。Qoder CN核心定位为AI智能编码助手,深度适配主流代码编辑器、集成开发环境以及终端场景;QoderWork CN则偏向桌面端综合办公辅助,二者面向不同使用场景,划分了多个版本档位,搭配差异化资源配额、功能权限与计费规则,同时兼容多款主流大模型。
686 5
|
6天前
|
存储 安全 Java
AgentScope Java 2.0:打造分布式、企业级智能体底座
AgentScope 2.0 面向分布式部署、稳定运行、权限安全等企业级需求全面升级,打造支持多租户隔离与长期稳定运行的企业级智能体底座。
|
6天前
|
数据采集 人工智能 前端开发
让 Coding Agent 从黑盒到透明:阿里云 Agent 观测审计数据采集实践
AI Agent 规模化落地带来执行黑盒、行为难追溯、成本难度量三大难题。阿里云基于 OTel 标准,面向 Coding Agent、个人通用助理和框架型 Agent,推出 LoongSuite Pilot、插件及探针等无侵入采集方案,让 Agent 实现可看见、可分析、可审计、可治理。
741 148
|
6天前
|
人工智能 运维 自然语言处理
阿里云百炼Qwen3.7-Max模型详解:综合能力、核心优势与订阅计划参考指南
2026年,大模型技术持续向通用化、高性能、场景化方向迭代,阿里云百炼作为一站式大模型服务平台,持续推出迭代升级的模型产品,Qwen3.7-Max便是当前主力旗舰级大模型之一。该模型依托深度优化的底层架构与大规模训练数据,在文本理解、逻辑推理、多模态交互、代码生成、长文本处理等多个维度实现能力升级,同时搭配灵活的订阅计划体系,能够适配个人开发者、中小企业、大型企业、政企机构等不同类型用户的使用需求。
578 2
|
6天前
|
JSON 缓存 安全
通过 CC Switch 本地路由让 Codex CLI 接入 DeepSeek 等第三方模型
CC Switch 通过本地路由(`127.0.0.1:15721`)实现协议转换:将 Codex 的 Responses API 请求自动映射为 DeepSeek 等厂商的 Chat Completions 接口,兼容流式响应与工具调用,无需修改 Codex 源码,安全隔离 API Key。(239字)
1748 3
通过 CC Switch 本地路由让 Codex CLI 接入 DeepSeek 等第三方模型
|
6天前
|
人工智能 缓存 自然语言处理
阿里Qwen3.7-Max评测:Agent能力显著提升,耗时与调用成本大幅下降
阿里云百炼推出面向智能体的旗舰大模型Qwen3.7-Max,具备长周期自主执行能力,显著提升编程、办公自动化等复杂任务处理水平;支持MCP集成与多框架兼容,并以限时5折+100万Tokens免费试用大幅降低使用门槛,助力企业高效落地AI应用。在阿里云百炼平台快速体验:https://t.aliyun.com/U/fPVHqY
1970 10
|
6天前
|
人工智能 运维 API
2026年阿里云百炼通义千问Qwen3.7-plus深度介绍 功能特性、使用优势及618大促订阅方案指南
大模型技术的普及,让AI能力逐步融入个人办公、内容创作、代码编写、企业运营、教育培训等各类场景。不同定位的模型对应不同使用需求,旗舰级模型性能强劲但使用成本偏高,轻量化模型价格低廉却难以胜任复杂任务,而介于两者之间的中端主力模型,凭借均衡的能力、亲民的定价、广泛的场景适配性,成为绝大多数个人用户、小型团队、中小企业的首选。
792 1