摘要
近年来,Phishing-as-a-Service(PhaaS)生态的成熟显著降低了网络钓鱼的技术门槛,使大规模、高仿真的凭证窃取活动成为常态。2025年11月,安全厂商KnowBe4披露了一款名为“Quantum Route Redirect”的新型钓鱼工具,该工具作为Quantum PhaaS平台的核心组件,专为针对Microsoft 365租户的全球性钓鱼攻击设计。其通过动态流量路由、多跳重定向、地理语言适配及会话Cookie转发等机制,有效规避传统安全检测,并支持绕过多因素认证(MFA)。本文基于公开技术分析与攻击样本重构,系统剖析Route Redirect的工作原理、攻击链构成及其对企业身份基础设施的威胁路径。在此基础上,提出涵盖身份策略强化、条件访问控制、终端行为监控与安全运营中心(SOC)检测规则的多层次防御体系。通过构建可部署的重定向链解析原型与异常登录检测逻辑,验证技术对策的有效性。研究表明,仅依赖传统邮件网关或静态URL黑名单已无法应对此类高度自动化的钓鱼攻击,必须结合零信任原则与实时行为分析,方能有效阻断凭证窃取与会话劫持风险。
关键词:Quantum Route Redirect;Microsoft 365;钓鱼即服务;多因素认证绕过;条件访问;会话Cookie转发;Impossible Travel
1 引言
Microsoft 365作为全球企业办公协作的核心平台,其身份凭证已成为网络犯罪分子的首要目标。据微软2024年数字防御报告,针对其云身份服务的钓鱼攻击同比增长67%,其中超过40%的事件涉及PhaaS工具的使用。传统钓鱼依赖静态页面与单一诱饵,而现代PhaaS平台如Quantum则将攻击流程模块化、商品化,提供从受害者识别、页面投递到战利品管理的端到端服务。
2025年8月,KnowBe4 Threat Labs首次监测到名为“Quantum Route Redirect”的流量调度组件在野外活跃。该工具并非独立钓鱼页面,而是作为中间代理层,部署于攻击者控制的基础设施前端,负责智能分发用户请求。其核心能力在于:根据访问者的IP地理位置、浏览器语言、User-Agent等特征,动态选择最匹配的仿冒登录模板(如美式英语版Office 365登录页、德语版Teams门户等),并通过多级HTTP 302重定向隐藏真实钓鱼地址。更值得关注的是,部分变体已集成会话Cookie捕获与转发功能,使攻击者在获取初始凭证后,可直接复用有效会话令牌,绕过基于短信或认证器App的MFA验证。
此类攻击不仅导致单点账户失陷,更因Microsoft 365租户间共享目录、邮件流与应用权限,引发横向移动与跨租户渗透风险。例如,攻击者可利用被盗邮箱发起线程劫持(Thread Hijacking),插入伪造发票诱导财务付款;或通过Exchange Web Services(EWS)导出敏感邮件与联系人数据。因此,深入理解Route Redirect的技术实现机制,并构建针对性防御策略,已成为企业云安全治理的紧迫课题。
2 Quantum Route Redirect的技术架构与攻击流程
2.1 核心组件与工作模式
Route Redirect采用轻量级反向代理架构,通常部署于廉价VPS或被入侵的Web服务器上。其运行流程如下:
入口拦截:受害者点击钓鱼邮件中的链接(如 hxxps://secure-login[.]xyz),请求首先到达Route Redirect实例。
上下文分析:工具提取HTTP请求头中的关键字段:
X-Forwarded-For 或源IP → 地理位置
Accept-Language → 用户偏好语言
User-Agent → 设备类型(桌面/移动)、操作系统、浏览器
动态路由决策:基于预设规则库,选择对应的钓鱼模板服务器。例如:
美国IP + en-US → 跳转至托管于Cloudflare Workers的美版Office 365克隆页
德国IP + de-DE → 跳转至德国本地化Teams登录页
多跳重定向:为规避URL扫描器,Route Redirect通常引入2–3次中间跳转。例如:
初始链接 → Route Redirect (VPS A) → 短链服务 (bit.ly) → 伪装为Google Analytics的JS跳转 → 最终钓鱼页 (VPS B)
每一跳均使用不同IP与域名,增加追踪难度。
凭证与会话捕获:钓鱼页面提交表单后,数据通过POST发送至攻击者API。高级变体还会执行JavaScript代码,读取浏览器中已存在的合法Microsoft 365会话Cookie(如 .AspNet.Cookies、x-ms-gateway-sso),并随凭证一并回传。
2.2 MFA绕过机制
尽管Microsoft 365广泛部署MFA,Route Redirect仍可通过以下方式实现绕过:
会话令牌复用:若受害者近期已通过MFA登录,其浏览器中存在有效会话Cookie。攻击者窃取该Cookie后,可在无密码情况下直接访问资源。
条件式挑战规避:部分企业未对“可信网络”外的登录强制MFA。攻击者若从与受害者同国家的代理出口发起请求,可能触发宽松策略。
OAuth授权钓鱼:部分变体引导用户授权恶意第三方应用,获取Mail.Read、User.Read等高危权限,无需直接获取密码。
3 攻击影响与横向移动路径
一旦成功窃取凭证或会话,攻击者可迅速展开后续行动:
邮箱接管与线程劫持:通过Outlook Web Access(OWA)或EWS API监控收件箱,识别正在进行的商务沟通(如合同、付款请求),插入伪造邮件延续对话。
发票欺诈:修改供应商银行账户信息,诱导企业向攻击者控制的账户转账。
数据外泄:批量下载OneDrive文件、SharePoint文档及Teams聊天记录,用于勒索或二次售卖。
跨租户蔓延:利用B2B协作功能,向合作伙伴租户发送钓鱼邮件,扩大攻击面。
KnowBe4报告显示,该工具已在全球90国造成影响,美国占76%,其余分布于欧洲、亚太及拉美,凸显其全球化运营能力。
4 防御体系构建
4.1 身份与访问管理强化
强制无密码认证:部署FIDO2安全密钥或Passkeys,彻底消除密码凭证窃取风险。示例配置(Azure AD PowerShell):
# 启用FIDO2注册策略
Set-MgPolicyAuthenticationMethodPolicy -Id "FIDO2" -State "enabled"
# 要求高风险用户使用FIDO2
New-MgPolicyConditionalAccessPolicy -DisplayName "Require FIDO2 for Finance" `
-Conditions @{
Users = @{ IncludeGroups = @("Finance-Team-GID") }
Applications = @{ IncludeApplications = @("Office365") }
} `
-GrantControls @{
Operator = "AND"
BuiltInControls = @("fido2")
}
禁用遗留协议:关闭IMAP、POP3、SMTP AUTH等不支持现代认证的协议,防止凭据在明文通道泄露。
4.2 条件访问策略优化
在Azure AD中配置基于风险的访问控制:
对来自匿名代理(Tor、数据中心IP)、高风险国家或Impossible Travel(短时间内跨洲登录)的请求,强制MFA或阻止访问。
示例策略逻辑(伪代码):
if login.risk_level == "high" or
ip.is_anonymous_proxy() or
geo_distance(login.prev_location, login.current_location) > 5000 km in <1 hour:
require_step_up_auth()
else:
allow_access()
4.3 终端与邮件层防护
点击时沙箱(Click-Time Sandboxing):部署支持URL动态分析的安全网关,在用户点击链接瞬间解析完整重定向链,识别最终落地页是否为已知钓鱼域。
内容隔离:通过远程浏览器隔离(RBI)技术,将邮件中所有链接在云端渲染,防止本地设备接触恶意内容。
4.4 SOC检测规则开发
基于Microsoft Graph Audit Logs与Identity Protection信号,构建以下检测用例:
会话Cookie异常使用:同一会话令牌在多个不同User-Agent或IP下活跃。
Token重放攻击:短时间内同一Refresh Token被用于申请多个Access Token。
不可用风险信号:登录事件标记为“impossible travel”、“anonymized IP”或“malicious IP”。
以下为KQL(Kusto Query Language)检测Impossible Travel示例:
// 检测1小时内跨大洲登录
let threshold_km = 3000;
SigninLogs
| where TimeGenerated > ago(1h)
| where ResultType == "0" // 成功登录
| project TimeGenerated, UserPrincipalName, IPAddress, Location
| join kind=inner (
SigninTimeLogs
| where TimeGenerated > ago(1h)
| where ResultType == "0"
| project TimeGenerated as PrevTime, UserPrincipalName as PrevUser, IPAddress as PrevIP, Location as PrevLocation
) on $left.UserPrincipalName == $right.PrevUser
| where TimeGenerated > PrevTime
| extend distance_km = geo_distance(Location, PrevLocation)
| where distance_km > threshold_km
| where datetime_diff('minute', TimeGenerated, PrevTime) < 60
| project UserPrincipalName, PrevLocation, Location, distance_km, PrevTime, TimeGenerated
5 技术验证:重定向链解析原型
为辅助安全团队快速识别Route Redirect流量,本文开发轻量级Python工具,模拟受害者行为并绘制跳转路径:
import requests
from urllib.parse import urlparse
import geoip2.database
# 加载GeoIP数据库(需自行下载)
reader = geoip2.database.Reader('GeoLite2-City.mmdb')
def resolve_redirect_chain(url, max_hops=5):
session = requests.Session()
session.headers.update({'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'})
history = []
current = url
try:
resp = session.get(current, timeout=10, allow_redirects=False)
while resp.status_code in [301, 302, 307, 308] and len(history) < max_hops:
next_url = resp.headers.get('Location')
if not next_url:
break
# 处理相对路径
next_url = requests.compat.urljoin(current, next_url)
history.append({
'url': current,
'status': resp.status_code,
'ip': get_ip_from_url(current),
'geo': get_geo_from_ip(get_ip_from_url(current))
})
current = next_url
resp = session.get(current, timeout=10, allow_redirects=False)
# 记录最终页面
history.append({
'url': current,
'status': resp.status_code,
'ip': get_ip_from_url(current),
'geo': get_geo_from_ip(get_ip_from_url(current))
})
return history
except Exception as e:
return [{'error': str(e)}]
def get_ip_from_url(url):
try:
domain = urlparse(url).netloc.split(':')[0]
return socket.gethostbyname(domain)
except:
return None
def get_geo_from_ip(ip):
if not ip:
return "Unknown"
try:
response = reader.city(ip)
return f"{response.country.name}, {response.city.name}"
except:
return "Geo Lookup Failed"
# 使用示例
chain = resolve_redirect_chain("hxxps://fake-login[.]xyz")
for hop in chain:
print(f"→ {hop['url']} [{hop['status']}] from {hop['geo']}")
该工具可集成至SOAR平台,实现自动化钓鱼链接研判。
6 讨论
需指出,Route Redirect的成功源于其对“用户体验”与“规避检测”的双重优化。攻击者不再追求一次性大规模轰炸,而是通过精准地理语言适配提升点击转化率,同时利用合法CDN(如Cloudflare)隐藏恶意负载。这要求防御方从“阻断已知坏”转向“识别异常好”。此外,会话Cookie的窃取暴露了当前MFA模型的局限——认证≠授权持续有效。未来应推动持续自适应风险评估(CARTA)模型,将设备健康度、行为基线、上下文风险纳入实时访问决策。
7 结语
Quantum Route Redirect代表了PhaaS攻击的新范式:自动化、全球化、会话感知。其通过动态路由与多跳混淆,有效穿透传统边界防御;通过会话复用,绕过看似坚固的MFA屏障。本文研究表明,有效防御必须超越邮件过滤与密码策略,深入到身份生命周期管理、实时风险评估与自动化响应层面。通过强制无密码认证、细化条件访问规则、部署点击时分析与构建基于行为的SOC检测能力,企业可显著提升对高级钓鱼攻击的韧性。随着云身份成为数字业务的核心枢纽,构建以零信任为指导、以行为分析为驱动的纵深防御体系,已成为保障Microsoft 365环境安全的必然路径。
编辑:芦笛(公共互联网反网络钓鱼工作组)