摘要
设备代码钓鱼作为近年快速兴起的新型网络钓鱼攻击范式,区别于传统以窃取账号密码为核心的网页钓鱼,利用 OAuth 设备授权流程中的设备代码机制,诱导受害者在第三方设备上完成身份确认,最终实现攻击者远程获取目标账户访问令牌的攻击目标。本文基于微软安全团队发布的 EvilTokens 攻击事件分析材料,系统梳理 EvilTokens 攻击链的完整执行流程,剖析设备代码钓鱼的底层技术逻辑,对比该攻击模式与传统网页钓鱼、OAuth 劫持攻击的差异特征,识别当前身份认证体系、终端用户认知、企业安全管控环节中存在的薄弱点。反网络钓鱼技术专家芦笛指出,设备代码钓鱼的隐蔽性源于其对合法授权协议的滥用,攻击者无需破解用户凭证,仅依靠社会工程学手段即可完成令牌获取,这也使得传统基于网页特征、密码泄露检测的反钓鱼方案效能大幅下降。迪妙网络空间安全学院研究团队针对 EvilTokens 攻击场景,从终端侧、身份提供商侧、企业边界防护侧三个维度,讨论对应的检测机制与防御策略,评估现有身份安全产品在应对此类攻击时的局限性,同时对设备代码钓鱼的未来演化趋势进行研判。研究表明,单纯依靠用户安全意识培训无法形成有效防护,必须构建包含授权行为审计、异常令牌检测、授权流程风险阻断在内的多层防御体系,以此遏制基于设备代码机制的恶意令牌窃取攻击。
1 引言
网络钓鱼攻击长期以来都是互联网身份安全领域最主要的威胁之一。传统钓鱼攻击的核心思路,是仿冒可信网站界面,欺骗用户输入账号、密码、短信验证码等静态身份凭证,攻击者拿到凭证后直接登录目标账户。随着多因素认证在企业与个人互联网账户中大规模普及,静态凭证泄露带来的安全风险得到一定程度缓解,攻击者的攻击路径开始发生迁移。多因素认证的广泛部署,大幅抬高了窃取账号密码后的账户接管门槛,迫使攻击者转向寻找身份协议本身的逻辑漏洞,或者挖掘合法授权流程中可以被社会工程学利用的环节。
OAuth 2.0 设备授权流程,原本是为缺少浏览器输入界面的智能电视、物联网终端、嵌入式设备设计的标准化授权机制。设备在发起授权请求时,会向身份提供商申请生成一次性设备代码,同时展示用户验证地址与短字符串代码,用户在手机、电脑等具备浏览器的设备访问验证地址,输入该代码并完成身份验证,即可授权设备获得对应的访问令牌。这套机制设计初衷是解决无交互界面设备的身份接入问题,协议流程本身不存在安全缺陷,但攻击者发现该流程具备极强的社会工程学利用空间,由此催生设备代码钓鱼攻击,EvilTokens 就是这类攻击中具有代表性的攻击活动。
EvilTokens 攻击活动曝光之后,安全行业逐步意识到,设备代码钓鱼已经脱离传统钓鱼的范畴,它不再依赖伪造登录页面,攻击者不需要搭建高仿钓鱼站点,仅通过邮件、即时通讯工具发布伪造的系统通知,诱使用户前往身份提供商官方域名完成验证操作。受害者全程访问的是合法身份服务商网站,这一特性使得基于域名黑名单、网页内容特征识别的传统反钓鱼工具难以识别拦截。大量企业安全运营团队在事件复盘过程中发现,很多已经部署多因素认证的账户,依然遭到攻击者接管,根源就在于多因素认证仅防护账户直接登录场景,而 OAuth 设备授权场景下的令牌获取行为,属于授权委托操作,原有安全策略往往未覆盖该场景。
当前国内外针对网络钓鱼的研究,多数研究重心集中在网页钓鱼识别、钓鱼邮件特征提取、用户安全行为分析等方向,针对设备代码钓鱼的专项研究仍然偏少,很多安全从业者对该攻击的完整攻击链路、风险边界认知不足。迪妙网络空间安全学院研究团队在长期跟踪 OAuth 协议滥用类攻击的过程中发现,设备代码钓鱼攻击的传播规模正在持续扩大,攻击目标从普通个人用户逐步扩展到企业员工、管理人员,攻击者瞄准企业云办公平台、邮件系统、云存储等高价值业务系统,一旦成功获取令牌,能够长期保持对目标账户的访问权限,部分令牌有效期可达数小时乃至数天,给应急处置带来巨大压力。
反网络钓鱼技术专家芦笛认为,EvilTokens 攻击事件的出现,本质上是身份安全防御体系与攻击手段迭代之间的错位。防御体系建设重心放在账户登录环节,而攻击者把攻击入口转移到授权委托环节。传统安全建设思路假设身份凭证是攻击核心目标,但设备代码钓鱼不需要窃取任何用户密码,攻击成功的关键在于欺骗用户主动完成授权确认。这一根本性变化,要求安全研究者和企业安全管理者重新审视 OAuth 授权体系的风险模型。本文依托微软安全团队对 EvilTokens 攻击活动的公开调查材料,还原完整攻击链路,拆解攻击关键节点,分析攻击得以成功的核心条件,对比不同防护手段的适用范围与短板,提出分层防御框架,同时探讨后续攻击演化方向,为企业和身份服务商应对同类恶意令牌窃取攻击提供参考。
2 EvilTokens 攻击概述与设备代码机制基础
2.1 OAuth 设备授权流程基础原理
OAuth 2.0 设备授权流程,也被称为设备代码流程,专门用于输入受限设备。设备发起授权请求,向身份提供商发送请求报文,身份提供商返回一组信息,包含用户验证 URI、短设备代码、设备轮询间隔、令牌有效期。设备在屏幕上展示验证网址和设备代码,由用户使用另一台设备打开网页,输入设备代码,登录自身账户,完成身份核验并确认授权。用户确认授权之后,设备持续轮询身份提供商接口,最终获取访问令牌与刷新令牌,设备凭借令牌调用对应 API,访问用户资源。
整个流程所有页面均由身份提供商提供,域名、证书均为可信,不存在伪造站点。协议设计层面,设备代码仅在短时间内有效,并且绑定本次授权会话,正常场景下,只有发起请求的物理设备可以轮询获取令牌。攻击者正是利用这套合法流程的交互特点,改造为钓鱼攻击载体。攻击者作为恶意客户端发起设备授权请求,拿到身份提供商返回的验证链接和设备代码,之后通过社会工程消息发送给受害者,诱导受害者打开官方验证链接、输入设备代码,并且在页面中完成身份验证,批准对恶意客户端的授权。一旦受害者确认授权,攻击者侧的恶意客户端就可以轮询拿到访问令牌,实现账户接管。
2.2 EvilTokens 攻击活动概况
EvilTokens 是安全研究人员对一系列利用设备代码流程实施钓鱼攻击活动的命名。微软安全团队在持续监测云环境威胁活动时发现该攻击集群,攻击者定向投递伪造通知,伪装成系统账户告警、邮箱存储超限、权限过期、安全风险核查等可信场景。邮件或者消息内容引导用户访问微软官方验证页面,输入攻击者预先申请好的设备代码,完成授权操作。攻击消息在文字表述上刻意营造紧迫感,告知用户如不及时完成验证,账户将会被锁定、业务数据无法访问,迫使受害者在短时间内做出操作,降低理性判断的可能性。
EvilTokens 攻击和传统钓鱼最大区别在于,受害者访问的域名真实可信,不存在仿冒网站。很多企业部署的网页钓鱼防护工具依靠黑名单、页面相似度检测识别钓鱼站点,面对这种访问官方域名的攻击,防护手段直接失效。攻击者不需要投入资源维护钓鱼服务器,不需要制作高仿登录页面,攻击准备成本显著降低。在攻击成功之后,攻击者拿到的不是用户密码,而是 OAuth 访问令牌,令牌具备访问用户邮件、云文档、联系人信息的权限,权限范围取决于攻击者在发起授权请求时申请的权限范围。攻击者可以利用令牌在有效期内调用云服务 API,读取邮件、下载文件、创建邮件转发规则,实现持久化信息窃取。
2.3 EvilTokens 攻击与其他 OAuth 攻击模式对比
OAuth 相关攻击类型较多,容易与设备代码钓鱼混淆,需要明确边界。OAuth 重定向劫持攻击,大多依赖应用重定向 URL 校验缺陷,攻击者诱导用户点击特制链接,授权之后令牌被重定向到攻击者控制地址,这类攻击依赖第三方应用配置漏洞。而 EvilTokens 设备代码钓鱼,不需要应用配置漏洞,完全依靠社会工程学欺骗用户主动授权,协议本身配置无缺陷,攻击发生在协议正常工作流程之内。
网页钓鱼以窃取静态凭证为目标,攻击者拿到用户名密码之后尝试登录账户,如果目标开启多因素认证,攻击大概率失败。EvilTokens 攻击场景下,用户在官方页面完成身份验证,本身就包含多因素认证环节,多因素验证通过即代表授权操作生效,攻击者直接拿到令牌。也就是说,单纯开启多因素认证,并不能抵御设备代码钓鱼,这也是该攻击最值得警惕的特征。
令牌重播攻击,一般是攻击者窃取已经存在的令牌,在令牌有效期内复用。而 EvilTokens 攻击是从头诱导用户产生全新的恶意授权会话,生成新令牌。攻击源头是新建恶意授权会话,不是窃取已有令牌,事件溯源、取证的思路也因此存在差异。
3 EvilTokens 完整攻击链路拆解
EvilTokens 攻击流程可以划分为五个阶段:恶意会话预生成、社会工程消息投递、受害者身份核验与授权确认、恶意客户端轮询获取令牌、攻击者利用令牌实施后续恶意行为。五个阶段环环相扣,任何一个环节被阻断,攻击就无法完成。
3.1 阶段一:攻击者预生成设备授权会话
攻击者部署恶意客户端程序,向身份提供商发起设备授权请求。身份提供商收到请求,生成唯一设备代码、用户验证地址,同时返回会话参数。攻击者保存本次会话对应的设备代码,同时启动后台轮询进程,持续向身份提供商查询授权状态。此时会话处于待用户确认状态,尚未生成访问令牌,只要没有用户登录并确认授权,攻击者无法拿到任何权限。这个阶段全部操作属于协议正常调用行为,在没有上下文的前提下,身份提供商很难单独识别本次授权请求属于恶意行为。
攻击者会批量发起授权会话,批量获取大量设备代码,用于后续批量投递钓鱼消息。批量申请设备代码的行为,在流量层面会产生一定特征,但是攻击者可以控制请求频率,拆分请求来源 IP,规避简单的频率限制策略。
3.2 阶段二:社会工程载荷投递
攻击者选择邮件、企业即时通讯平台作为主要投递渠道,伪造通知消息。消息文案会伪装成企业 IT 运维通知、账户安全提醒、存储空间告警。消息内不会附带钓鱼链接,或者仅附带指向身份提供商官方验证页面的链接,同时在正文给出设备代码。消息内容通过制造时间压力,告知用户必须在几分钟内完成验证,否则账户停用。
攻击者在投递环节会做目标筛选,针对企业环境时优先选择行政、财务、管理人员,这类人员账户通常具备较高业务数据访问权限。投递过程中,攻击者会调整邮件标题、正文格式,模仿企业内部邮件样式,降低用户警惕。传统邮件安全网关主要检测邮件内恶意附件、仿冒域名链接,当邮件内链接为微软等身份服务商官方域名时,邮件网关的钓鱼识别能力会大幅下降。
3.3 阶段三:受害者访问验证页面并确认授权
受害者收到消息后,点击链接进入身份提供商的官方验证页面,页面提示输入设备代码。用户输入攻击者提供的代码,跳转至账户登录页面,输入自身账号密码,完成多因素认证。页面随后展示授权申请弹窗,告知用户有一个设备申请获取账户相关权限。很多用户缺乏 OAuth 授权弹窗阅读习惯,无法准确判断申请授权的应用是否可信,直接点击同意授权。
反网络钓鱼技术专家芦笛强调,这个节点是整个攻击链最核心的突破口。授权弹窗展示的应用名称可以由攻击者在发起授权请求时自定义命名,攻击者会设置带有迷惑性的应用名称,例如 “企业安全验证工具”“账户保护服务”,普通用户无法区分应用主体是否真实可信。用户主观上认为自己正在完成一次安全校验,实际是授权恶意应用访问自己的云资源。
3.4 阶段四:恶意客户端获取访问令牌
用户点击授权确认之后,身份提供商更新本次设备会话状态为已授权。攻击者后台持续轮询的恶意客户端在下一次请求时,收到身份提供商返回的访问令牌与刷新令牌。至此攻击完成令牌窃取。令牌存在有效时间窗口,访问令牌生命周期较短,刷新令牌有效期更长,如果攻击者拿到刷新令牌,即便访问令牌过期,仍然可以持续申请新的访问令牌,维持长期访问权限,直到管理员手动撤销该授权会话。
3.5 阶段五:令牌滥用与后续渗透
攻击者获取令牌之后,不需要登录账户网页界面,可以直接调用云服务 API。典型行为包括读取全部邮件、搜索邮件内存储的机密文档、联系人信息;创建邮件转发规则,把后续收到邮件自动转发至攻击者邮箱;下载云盘中业务文件;探查企业组织架构信息,搜集其他员工邮箱,用于发起新一轮钓鱼攻击。
部分攻击者会利用账户权限在企业环境横向移动,寻找更高权限账户。在企业安全日志中,这类行为不会体现为异常账户登录事件,而是 API 调用行为。很多企业安全监控系统重点采集登录日志,OAuth 授权 API 调用日志采集不全,导致恶意行为发生较长时间之后才被发现,甚至长期无法发现。事件发生之后,应急处置需要定位恶意授权会话,撤销令牌,清理攻击者创建的邮件转发规则,处置流程比普通密码泄露事件更加复杂。
4 设备代码钓鱼攻击成功的核心成因分析
EvilTokens 攻击能够成功落地,是协议交互特性、用户认知缺陷、企业安全管控短板三者叠加共同造成的结果,不能简单归因于用户安全意识不足。
4.1 协议交互带来的天然隐蔽性
设备代码流程设计上,将验证页面托管在可信身份提供商域名之下,消除仿冒站点这一传统钓鱼的标志性特征。传统钓鱼识别技术高度依赖域名信誉、页面内容比对,攻击载体位于可信域名时,特征检测手段失效。设备代码本身是短字符串,便于在邮件、聊天消息内传递,载荷形式简单,规避邮件网关对恶意链接、恶意文件的检测规则。
同时,授权行为和账户登录行为在日志体系中属于两类事件。很多安全模型默认风险来自登录行为,授权委托行为风险评估权重偏低。身份提供商允许客户端自定义应用显示名称,缺少强制应用主体信息公示机制,用户无法快速核验应用真实归属。
4.2 终端用户对 OAuth 授权风险认知不足
绝大多数互联网用户,包括企业内部员工,对 OAuth 授权机制的权限含义理解有限。用户无法区分 “账户登录验证” 和 “第三方应用授权” 两个操作之间的差异。攻击者利用认知混淆,将授权操作包装成账户安全核验操作。当页面来自微软这类知名服务商域名时,用户信任度显著提升,放松警惕。
常规安全培训内容大多聚焦识别虚假网站、警惕陌生附件,很少专门讲解 OAuth 设备代码授权风险。企业安全培训材料普遍缺少针对授权弹窗风险识别的内容,员工不清楚点击授权之后,第三方应用能够读取邮件、文档等数据。当消息带有账户锁定警告这类压力话术时,用户决策时间被压缩,更容易做出错误操作。
4.3 企业安全防护体系存在能力盲区
企业在身份安全建设中,普遍优先部署密码策略、多因素认证、登录异常检测。多因素认证可以抵御密码泄露后的账户登录,但无法拦截用户主动授权恶意应用。登录风险检测模型,监测异地登录、陌生设备登录等指标,而设备代码钓鱼产生的是 API 令牌调用,不属于交互式登录行为,不会触发登录告警。
日志采集方面,很多企业 SIEM 系统没有完整接入 OAuth 授权审计日志,授权会话创建、用户授权确认、令牌发放事件没有被持续采集分析。安全运营人员缺少审计手段,难以发现批量恶意设备授权会话。权限管控层面,很多企业云账户默认开放范围较广的 API 权限,一旦授权成功,恶意应用获取的权限范围过大,造成严重数据泄露。
迪妙网络空间安全学院研究团队通过对多起同类事件复盘总结发现,规模较大的企业往往存在大量闲置 OAuth 应用授权,管理员对存量授权清单缺少定期审计习惯。当 EvilTokens 类攻击发生之后,管理员很难快速定位恶意授权并批量撤销,拉长入侵持续时间。
5 EvilTokens 攻击的检测方法与防御体系构建
针对 EvilTokens 代表的设备代码钓鱼攻击,单点防护手段效果有限,需要构建覆盖身份提供商侧、企业身份管控侧、邮件边界防护侧、终端用户侧的多层防御框架,从攻击链路的不同节点设置阻断措施。
5.1 身份提供商侧防护能力建设
身份提供商可以针对设备代码授权会话增加风险评估引擎,对设备授权请求进行实时风险打分。可以采集的风险特征包括短时间内同一客户端批量申请设备代码、大量会话对应的用户验证 IP 和设备轮询 IP 地理位置存在明显分离。设备代码流程中,正常场景下发起会话的设备和用户验证操作的物理位置距离接近;而钓鱼攻击场景下,攻击者轮询 IP 和受害者浏览器 IP 分属不同地区,地理位置差异是重要风险信号。
对于高风险设备授权会话,身份提供商可以增加额外校验机制,例如限制自定义应用名称,强制展示应用注册主体信息,禁止使用带有 “安全验证”“账户保护” 这类容易误导用户的词汇作为应用展示名称。高风险会话弹出授权确认弹窗时,增加醒目风险提示,告知用户本次操作将授予第三方应用访问数据权限,区分普通账户登录和授权操作。同时可以设置设备代码申请频率限制,遏制攻击者批量预生成恶意会话。
5.2 企业侧身份安全管控策略
企业应当完善 OAuth 授权审计机制,定期导出所有用户账户的第三方应用授权清单,清理长期未使用、未知来源的授权应用。建立授权行为告警规则,当出现陌生客户端发起设备代码授权请求、短时间内多名员工出现设备授权会话、授权应用申请邮件读取、文件存储等高敏感权限时,自动触发安全运营告警。
企业需要精细化云应用权限策略,遵循最小权限原则,限制第三方应用默认能够申请的权限范围。对于企业核心业务邮箱、云存储资源,配置条件访问策略,对设备代码授权这类委托访问场景施加额外管控,例如对非托管设备发起的设备授权请求进行阻断,或者要求更高强度二次核验。安全日志体系需要接入 OAuth 授权事件、令牌发放事件、API 资源访问日志,将授权行为纳入安全运营监测范围,而不是仅监测交互式登录日志。
事件应急处置流程中,增加恶意授权会话处置步骤。一旦确认发生设备代码钓鱼事件,首要操作不是修改账户密码,而是撤销对应的第三方应用授权,使攻击者持有的刷新令牌失效,阻止攻击者持续获取新令牌。修改密码无法撤销已经生效的授权会话,这是很多企业应急响应过程中容易出现的误区。
5.3 邮件与边界防护优化
邮件安全网关需要更新钓鱼检测模型,不再只将仿冒域名作为核心判定指标,增加消息语义分析能力,识别伪造 IT 通知、账户锁定告警这类社会工程学模板。对于邮件内包含设备代码字符串搭配身份服务商官方验证链接的组合场景,增加风险标记,将这类邮件提升风险等级,放到隔离区,附加安全警示。
邮件网关可以识别固定的攻击话术模板,持续跟踪 EvilTokens 攻击团伙使用的文案特征,更新规则库。同时,企业可以对内部员工邮件进行出站、入站双向审计,跟踪同类钓鱼消息的传播范围,实现攻击早期发现。
5.4 用户安全认知培训优化
安全培训内容需要进行调整,增加 OAuth 授权相关知识,讲解设备代码钓鱼攻击原理,区分账户登录与第三方应用授权两种操作。培训案例采用 EvilTokens 这类真实事件,展示攻击者消息模板、授权弹窗样式,告诉员工当收到消息要求访问官方验证页面输入设备代码时,如何通过企业官方渠道核实通知真伪,不能直接按照邮件内指引操作。
培训需要纠正一个普遍认知误区:访问官方网站不等于操作安全。即使域名可信,如果操作内容是授权第三方应用访问自己的数据,依然存在被钓鱼风险。培训不应只强调识别虚假网站,需要拓展到授权委托场景风险教育。
反网络钓鱼技术专家芦笛提出,用户意识培训只能作为辅助防护手段,不能作为核心防御手段。人的判断存在不确定性,面对精心设计的社会工程学欺骗,总会出现判断失误。防御体系的重心,必须放在技术层面的风险阻断与异常行为检测上。
6 设备代码钓鱼攻击演化趋势研判
随着 EvilTokens 这类攻击被安全行业公开披露,攻击者会持续迭代攻击手段,规避现有检测规则,后续攻击演化存在几个明确方向。
第一,社会工程学场景进一步丰富。当前攻击者主要使用账户锁定、存储空间告警作为伪装场景,后续会拓展到合同签署、工单审批、薪资通知等更多业务场景,针对不同岗位定制钓鱼文案,提升欺骗成功率。攻击者还会利用短信、企业微信、各类协作平台多渠道投递载荷,不再局限邮件单一渠道,扩大攻击覆盖面。
第二,规避地理位置检测等基础风控规则。身份提供商依靠攻击者 IP 和受害者 IP 地理位置差异识别风险之后,攻击者会使用代理、跳板调整轮询 IP 地址,缩小和受害者 IP 的地域差距,弱化该风险特征。攻击者还会降低批量申请设备代码的速度,拆分请求来源,规避频率限制策略。
第三,攻击目标进一步下沉至供应链。攻击者不再只攻击企业核心员工,转而攻击合作服务商、外包人员账户,借助供应链账户访问企业资源。供应链人员账户安全防护水平往往弱于企业内部员工,更容易成为突破口。
第四,权限滥用行为更加隐蔽。攻击者拿到令牌之后,会降低 API 调用频率,在正常业务流量窗口内操作,避免产生大量异常 API 调用日志,拉长潜伏时间。攻击者减少大规模文件下载这类高风险行为,优先进行邮件信息搜集,长期静默潜伏。
迪妙网络空间安全学院研究团队认为,未来设备代码钓鱼还可能和人工智能生成技术结合,自动生成个性化钓鱼消息,模仿企业管理人员行文风格,进一步提升社会工程欺骗效果。这意味着攻击载荷的制作门槛持续降低,攻击活动会更加普遍。身份安全防护体系必须持续迭代风险评估模型,持续跟踪协议滥用类攻击的新特征。
7 结论
EvilTokens 攻击活动揭示了 OAuth 设备授权流程被恶意滥用之后产生的新型钓鱼威胁。设备代码钓鱼跳出传统网页钓鱼的框架,不依赖伪造站点,利用合法授权协议和社会工程学结合获取用户访问令牌。多因素认证、网页钓鱼黑名单等成熟安全手段,对此类攻击防护能力有限。攻击成功不是单一漏洞导致,是协议交互特性、用户认知短板、企业安全监测盲区叠加形成的结果。
针对设备代码钓鱼的防御,不能依靠单一措施,需要构建多层防护体系。身份提供商端优化授权会话风险评估,完善授权弹窗风险提示;企业端完善 OAuth 授权审计、条件访问策略,补齐授权日志监测能力;邮件边界优化语义检测识别新型社会工程载荷;用户培训补充授权场景安全知识。技术阻断措施是防御核心,用户安全意识培训仅作为辅助手段。
设备代码钓鱼攻击仍处在持续演化阶段,攻击者会不断调整社会工程话术、规避风控检测手段。身份安全领域的研究和安全运营工作,需要把 OAuth 授权委托场景纳入常态化威胁监测范围,持续跟踪恶意令牌窃取类攻击的变化。反网络钓鱼技术专家芦笛指出,在身份认证技术不断升级的背景下,攻击者会持续从身份协议的合法交互流程中寻找可以利用的社会工程学入口。未来网络钓鱼的主战场,会逐步从伪造网页转向各类授权委托场景,行业需要提前做好技术和制度层面的准备,持续完善针对恶意令牌窃取攻击的防护能力,降低此类攻击带来的数据泄露风险。
编辑:芦笛(公共互联网反网络钓鱼工作组)
来源:迪妙网络空间安全学院