最近在翻威胁情报平台的时候,一个代号叫“量子路由”的钓鱼平台引起了我的注意。全网追踪到的攻击基础设施里,有超过1000个域名指向同一种假登录页,而且这个页面只针对企业邮箱系统。标题可能看着有点惊悚,但实际情况确实就是这样:一张做得足够像的假登录页,加上足够多个一次性域名,就能把现代邮件防御体系打出个大洞。
这篇文章想和你聊聊这类钓鱼平台的运作逻辑、绕过现代防御体系的关键节点,以及企业安全团队能直接拿来用的检测与响应思路。如果你负责邮件安全、终端安全或身份认证这块,这篇应该能帮你补上不少攻击视角的盲区。我不打算写成纯粹的科普稿,更多是站在“我怎么去追这批域名的痕迹、怎么落地检测规则”的角度来拆解。
1. 为什么是1000个域名:钓鱼平台的“弹药库”策略
很多人对钓鱼攻击的印象还停留在“一个恶意域名 + 一封垃圾邮件”的阶段。实际上,现在成熟的钓鱼平台,尤其是“量子路由”这类以企业邮箱为目标的平台,已经完全是“弹药库”式的运作:域名批量注册、动态切换、用完即弃。我们这边看到的1000多个域名,只是它能被威胁情报平台捕捉到的一部分,真实数量只会更多。
1.1 域名轮换如何绕过信誉过滤
现代邮件网关和URL安全网关几乎标配了“恶意URL信誉库”。一个域名初次被标记为恶意之后,网关就会拦截后续访问。理论上是这样,但这里有一个致命的时间差:域名从投递钓鱼邮件到被安全厂商拉黑,中间最短也要几个小时,最长可能超过48小时。攻击者只需要在邮件投递的时间窗口内让域名保持“干净”就够了。
“量子路由”的做法非常激进。它对每个目标域名或每个攻击Wave使用完全不同的域名,同一个域名大概率只使用一到两个小时。等到安全厂商的爬虫抓到页面内容、生成信誉并同步到网关端时,这个域名已经停止解析或切换到了另一个IP。单纯依赖信誉库的防护,在这种一轮域名战面前基本是失明的。
1.2 一次性域名的时效窗口
我们在追踪时发现一个规律:这类平台使用的域名寿命极短,但注册信息非常讲究。大部分域名会开启WHOIS隐私保护,注册商集中在几个风控相对宽松的海外渠道,注册时间通常是攻击前24到72小时。少数域名甚至走“先注册后弃用”的路线,攻击结束后直接不续费,让域名自然过期。
这里有个容易被忽略的细节:域名系统本身有DNS缓存机制。攻击者不需要让域名长时间稳定解析,只要在邮件点击高峰的几个小时内保持解析正常,就能完成任务。我们统计过“量子路由”的攻击窗口,从第一条钓鱼邮件发出到域名无法解析,平均只有5个小时左右。很多被钓鱼的邮箱用户在第二天看到邮件记录时去访问链接,页面早打不开了,这也导致企业内部自查时很难复现。
1.3 成本经济账:一个域名换一个入口
很多企业安全团队觉得“攻击者烧不起这么多域名”,这是误解。普通域名的注册成本在10到50元人民币之间,批量注册甚至更低。1000个域名意味着全量注册成本可能只有几万块钱,而一次成功的企业邮箱钓鱼造成的损失,远不止这个数。
在这套成本模型下,攻击者会把域名当作消耗品,而不是需要长期维护的资产。所以不要试图用“域名没有恶意历史”来判断安全性——在“量子路由”这类平台面前,几乎所有域名在被用于攻击之前,都是白纸一张。唯一能在早期发现异常的,是域名注册时间短 + 解析行为异常 + 页面内容与品牌高度相似这些组合特征。
2. 假登录页的“以假乱真”工程
域名只是敲门砖,真正骗人的是那张假登录页。“量子路由”之所以能逼真地诱导受害者输入账号密码,是因为它把克隆页面这件事做到了一定高度,不是随便拿个HTML拷下来就完事。
2.1 页面克隆的三种技术路线
我拆解过多个由“量子路由”生成的钓鱼页面,发现它们的实现方式主要有三类。
第一类是静态全量复制,攻击者爬取原登录页的所有CSS、图片、JS文件并放到自己的服务器上。这类页面最容易实现,也最容易被检测,因为页面结构会和官方原版完全一致,安全引擎可以直接做相似度比对。
第二类是反向代理漏斗,攻击者在钓鱼服务器上配置反向代理,让访客请求直接透传到官方的真实登录页面,再把官方的响应内容原样返回给受害者。这种方式的优势是页面永远和官方保持同步,但劣势是“行为特征”太明显:钓鱼域名和官方域名在同一会话中频繁交互,代理日志会暴露真实目标。
第三类也是“量子路由”这类高级平台最常用的做法:动态模板渲染。攻击者写一套模仿主流企业邮箱登录页的模板引擎,模板里的Logo、配色、企业名称、字符集都做成可配置项。他们可以通过后台管理系统选择要模仿的品牌,页面会自动生成一套几乎一模一样的克隆页。这套路线最大的优势是同一套代码可以批量生成成百上千个假页面,生产效率极高,配合1000个域名正好形成规模化攻击。
2.2 页面“隐身处”:只在特定条件下才显示恶意内容
除了克隆本身,这里更关键的是“隐藏逻辑”。我见过“量子路由”的钓鱼域名返回的内容是分环境的:直接访问URL返回404或一个无害的跳转页,只有带指定Referer、指定User-Agent或指定URL参数访问时,才会返回真正的钓鱼页面。
这样做是为了绕过安全扫描器。多数安全厂商的URL爬虫会用无头浏览器抓取页面内容,攻击者只要检测到访客来自数据中心IP或无头浏览器指纹,就返回正常页面。而真实用户通过邮件客户端点击链接时,携带的是企业出口IP、浏览器会带上完整的渲染指纹,这时攻击者才返回假登录页。这种“阴阳页面”技术让传统URL信誉检测的误判率大幅上升。
2.3 MFA绑架:不只是用户名和密码
更值得警惕的是,这类假登录页已经不满足于只采集用户名和密码。“量子路由”的页面会在用户提交账号密码后,自动进入“二次验证”流程,要求输入短信验证码、硬件令牌上的6位数字甚至企业App的推送批复。
这里的技术本质是一个中间人式的“凭证转发攻击”:钓鱼服务器收到受害者输入的账号密码和MFA动态码后,立即通过自动化脚本把这些数据转发给官方真实登录接口,完成一次真实的身份认证。一旦认证成功,攻击者就拿到官方会话Cookie,然后重定向到一个“加载中”或“系统繁忙”的页面,让受害者以为自己操作失败。而攻击者此时已经带着合法的登录态进入企业系统了。
这已经超出了传统“钓鱼骗密码”的范畴,本质上是绕过MFA的实时会话劫持。需要反复和业务团队强调的一个认知是:就算企业上了多因素认证,也不等于能从根上防御这类攻击。
3. 拆解攻击链路:从第一封钓鱼邮件到邮箱失陷
前面的分析偏静态,下面把整个攻击链串起来走一遍,看看“量子路由”是如何从投递邮件开始一步步控制企业邮箱的。整个过程可以用一个时间线来理解。
| 时间节点 | 攻击动作 | 企业侧现象 |
|---|---|---|
| T-72h | 批量注册域名、搭建钓鱼页 | 无明显异常 |
| T-24h | 收集目标企业员工邮箱、准备话术模板 | 无明显异常 |
| T-0h | 批量投递钓鱼邮件 | 邮件网关可能拦截部分,但漏网比例高 |
| T+5min | 受害者点击链接,访问钓鱼页 | 代理日志中出现异常域名访问 |
| T+10min | 受害者输入账号密码和MFA码 | 身份认证日志中出现外区登录或异常UA |
| T+15min | 攻击者接管会话,开始读邮件或发起内部钓鱼 | 邮箱登录记录出现二次认证后的陌生设备 |
| T+1h | 邮件被设置转发规则,或大量对外发送钓鱼邮件 | 企业收到的钓鱼邮件数量突然上升 |
3.1 投递阶段:绕过SPF、DKIM和DMARC的三种姿势
邮件网关首先会看的是SPF、DKIM和DMARC。SPF检查发件IP是否在域名的授权列表里,DKIM检查邮件头和内容是否被私钥签名,DMARC是决定对齐失败后怎么处理。
“量子路由”在投递阶段有三类绕过思路。
第一种,直接用与被仿冒企业域名相似但不同的发件域名。比如官方域名是company.com,攻击者注册company-verify.com,并在该域名下正确配置SPF、DKIM和DMARC,让这封邮件在技术上完全通过验证。这种邮件发件人看起来“合法”,只是域名肉眼看着有点不对劲。
第二种,利用邮箱服务商的“转发”信任链。先向一个允许任意发件的匿名邮箱服务发送目标内容,再利用该服务的自动转发功能将邮件转发到受害者邮箱。由于转发服务器和原邮箱域名在DMARC代发机制上是合法的,网关往往被绕过去。
第三种,直接伪造可信域名但同时也是最容易被查的。攻击者会找没有配置SPF或实际不加DMARC强制策略的冷门域名,伪造该域名发件人。这类域名通常本来就收不到邮件,所以DMARC对齐结果常常是“未知/中性”,部分网关策略会直接放行。
3.2 诱饵设计:从邮箱通知到人事变动,话术紧跟企业场景
技术绕过做得再好,邮件正文太粗糙也白搭。“量子路由”的话术库相当接地气,常见的主题包括“邮箱存储空间已满,请登录清理”“异常登录提醒,请立即验证身份”“下个月工资条已更新,请查看”。
最让我印象深刻的是一封仿冒企业IT部门的“假期后全量身份验证”邮件,正文里附带了员工的真实姓名、部门和工号。显然这些信息来自之前的数据泄漏或LinkedIn爬取。受害者一看,自己的姓名和部门都对得上,就下意识点了链接。邮件里还设计了“验证成功后你的登录状态将在未来24小时内保持有效”这类话术,降低受害者对二次登录的戒心。
3.3 利用阶段:拿到邮箱之后,攻击者不是只偷数据
在传统认知里,钓鱼得逞主要是为了窃取敏感数据。但接触“量子路由”这类平台后,我发现攻击者的后续动作更复杂。
一种常见的利用就是“内部钓鱼扩散”。攻击者控制受害者的企业邮箱后,会读取邮件通讯录,然后以这个受害者的名义向同事发送更可信的钓鱼邮件。因为对方的真实邮箱已经沦陷,邮件来自内部域名甚至还能通过内部加密通道送达,网关几乎不会拦截。
另一种是静默潜伏。攻击者只在邮箱里设置转发规则,凡是标题含“pass”“bank”“confidential”等关键词的邮件都自动转发到外部邮箱。这种静默规则非常隐蔽,受害者完全不知道邮件已经被外带,企业SIME/EDR设备也不会报警,因为邮箱系统本身的行为是合法的。
还有一种更直接的方式:利用Outlook和Exchange的“外发API权限”或企业在邮箱上集成的第三方应用。许多企业邮箱账号已经授权了云盘的读写权限,攻击者拿到会话后可以直接批量下载共享文档。
4. 现代防御体系为什么失效:三个结构性盲区
很多企业上了下一代邮件网关、把SPF/DKIM/DMARC都配置到了强制模式,甚至终端上都装了EDR,结果还是被钓鱼打了进去。邮件安全团队感到挫败是正常的——因为现代防御体系在下面三个环节存在结构性的盲区。
4.1 信誉引擎的“时间差”无法靠配置消除
前文提到过信誉引擎的时效问题,但它的影响比表面看起来更深。信誉引擎依赖的恶意URL库,来源包括安全厂商的主动爬虫、第三方情报源和各种客户回报。一个钓鱼域名从被用于攻击到被固化到黑名单,短则几小时长则几天。在这段“灰色时间窗”里,这个域名对网关而言就是干净的。
这就是“量子路由”这类平台愿意撒1000个域名的重要原因:它们在用概率学对冲安全厂商的检测能力。只要每100个域名里有10个逃过即时信誉检查,攻击就能继续。对安全团队来说,不能只调网关日志,还要主动引入“域名信誉实时查询接口”和“新注册域名可疑度评分”这类外部情报,把封堵时间从被动更新缩到分钟级。
4.2 URL重写和沙箱检测的盲区:静态爬虫打不到“暗门”
很多网关号称能“重写所有邮件中的URL并在点击时实时检测”。问题是,实时检测引擎在点击瞬间去访问钓鱼URL时,很可能就是一个404或空页面。攻击者通过IP、UA、Referer、Cookie甚至JavaScript执行能力来判断“这是真实用户还是安全扫描器”,从而决定是否渲染钓鱼页。
这种“有条件的渲染”让URL重写和多层沙箱形同虚设。我甚至见过一个钓鱼域名在其他任何环境下都返回“站点正在维护”,唯独当请求包里带着企业邮件网关重写后的Redirect时,才展示真正的登录框。攻击者就是靠这种“只针对真实用户生效”的设计,让安全设备和安全分析师看到的内容完全是另一套。
4.3 终端安全“信任客户端”思路的先天缺陷
现代身份认证体系普遍默认“企业设备是安全的”。一旦用户在浏览器里输入了账号密码并完成了MFA,后续的所有请求都会被视为可信会话。攻击者正是利用了这个信任模型:在钓鱼页上拿到真实的会话Cookie,就可以绕过终端上安装的任何安全产品。
这不是企业安全产品不够强,而是它们保护的是“终端”,不是“浏览器里的身份”。从平台视角看,“量子路由”这类钓鱼平台的核心价值就是骗到“可以被信任的身份凭据”。要应对这种钓鱼,仅靠终端防护不够,还要把重点放到连续身份验证、异常行为分析和访问策略收紧上。
5. 威胁狩猎:从域名到流量找出“量子路由”的痕迹
防御不能只停留在“等告警”,还要主动去环境里找痕迹。下面写一套我们在内网和公开情报侧都可以做的排查流程,步骤偏手动,适合安全团队应急和钓鱼专项排查时直接参考。
5.1 公开侧情报收集:从域名字段判断可疑信号
看到一条可疑域名时,先跑一轮基础情报判断是不是“量子路由”或类似平台的基础设施。常见步骤包括:
- 查WHOIS注册时间:域龄是否在72小时以内,注册邮箱是否是随机字符串或隐私保护。
- 查域名历史解析记录:是否频繁切换IP,是否有多个不同域名共用一个IP。
- 查证书透明日志:域名是否在短时间为多个类似命名模式批量申请过证书。
- 查网页内容快照:直接访问是否有“按环境条件渲染”的痕迹。
举一个特征性很强的例子:攻击者对“量子路由”品牌的域名偏好会用连字符和随机字符组合,比如account-verify-secure-xxxx.com。这种域名不是企业正常命名习惯,在邮件记录中出现基本可以直接标记高风险。
5.2 内网侧日志排查:三张表快速定位受影响用户
内网排查不能只盯着邮件网关,要同时看DNS日志、代理日志和身份认证日志。建议按下面三条线索展开:
- DNS日志:筛选解析量极少、解析时间集中在某个2小时窗口、且域名字符串符合可疑模式的请求。尤其关注短域名和以verify/login/claim开头的子域名。
- 代理日志:查找访问过这些可疑域名且同时携带Referer为邮件网关跳转链接的会话。这类会话十有八九来自用户点击了钓鱼邮件。
- 身份认证日志:查找同一用户在短时间内出现多个IP、UA或设备特征的情况。尤其是“已登录官方邮箱”和“刚访问过钓鱼域名”前后相差不到15分钟的组合,基本可以确认会话被截获。
5.3 告警检测规则示例:一段可落地的伪规则
下面我给一个Kusto/SPL风格的检测规则思路,实际部署时按你的平台语法调整。它的核心逻辑是把“短寿命域名访问”和“认证成功后的异常地理位置”绑定起来。
let suspicious = domain | where timestamp > ago(7d) | where dns_query matches regex @"^[a-z0-9]{8,15}\.(verify|secure|login|account|help)\." | where count() < 5 | project dns_query, src_ip; let risky_auth = authentication | where timestamp > ago(7d) | where Result == "Success" | where Country not in ("CN", "HK", "MO", "TW") | project User, src_ip, timestamp, Country; let joindata = suspicious | join kind=inner risky_auth on src_ip | where abs(datetime_diff("minute", joindata.timestamp, suspicious.timestamp)) < 15; joindata | project-away * | project User, timestamp, dns_query, src_ip, Country这类规则的价值不是它能直接抓到所有钓鱼,而是能帮你把“可疑域名访问”和“新鲜认证成功”这两个孤独的事件关联起来。很多安全设备单独看都正常,一关联就能看出攻击链。
6. 纵深防御的实践:让“二维码登录”和“条件访问”真正落地
前面讲了不少“为什么挡不住”,这一节聊聊我们从这场对抗里总结出的一些能落地的加固动作。不一定每个企业都适用,但优先级和思路可以参考。
6.1 邮件网关策略:与其查“已知”,不如拦“未知”
常规网关都靠“黑名单”和“指纹匹配”来拦截钓鱼链接。“量子路由”这类平台的页面动态生成,导致指纹库永远慢一步。我的建议是别过度依赖内容指纹,而是把“新域名权重”拉高。
在网关策略里增加一条:如果邮件中出现注册时间少于7天的域名,且邮件内链接指向的是登录类页面,直接隔离并转人工审核。这条策略不需要你知道域名是否恶意,只看两个客观事实——域名是新注册的、链接指向登录页。对正常业务邮件的误伤会有一些,但对钓鱼拦截的效果立竿见影。
6.2 加固登录侧:让假登录页拿到Cookie也没用
我们前文提到攻击者会通过假登录页获取官方会话Cookie。这时候最有效的反制手段就是缩短会话有效期+关键操作二次认证+异常位置阻断。
具体可以做三件事:
第一,把企业邮箱Web端的长会话改成短时令牌,默认30分钟无操作自动失效。攻击者即使拿到Cookie,在短时间内能做的事也有限。
第二,对邮件内的所有外部链接统一走安全网关重写。这不是为了阻止用户打开,而是让网关在链接被点击时再次扫描。即便用户在第一次点击时绕过,后续每一次重定向都会暴露攻击域名的痕迹。
第三,启用基于条件访问的策略。登录时必须满足“企业设备合规+可信IP段+地理位置符合”。一旦检测到非企业常用地区或非合规设备访问,即使账号密码正确,也要求走额外审批流程。这套策略能大大压降“量子路由”那种实时会话劫持的利用成功率。
6.3 员工演练:别只做“点没点钓鱼邮件”的测试
很多企业的钓鱼演练只统计“谁点了链接”,然后对点击者做通报处罚。这种演练没多大用。更好的做法是:演练邮件发出后,不管用户点没点,都要让用户自己学会“识别可疑邮件的信号”,比如发件域名和官方域名是否完全一致、链接指向的域名是否陌生、登录页是否在浏览器地址栏中显示预期域名。
再补充一个实战经验:把“钓鱼页面立即上报”作为与IT沟通的习惯。被钓鱼之后最恐怖的事不是输入了密码,而是用户没有告知安全团队。因为攻击者在拿到的会话窗口里可以读邮件、下载附件、设置转发规则,晚一小时发现,损失的就不是一个邮箱,而可能是整个通讯录和内部系统权限。给员工一个“上报不追责”的流程,效果比任何安全标语都好。
6.4 事件响应:发现被钓后的黄金1小时
如果确认有用户被钓鱼了,不要只改个密码就认为结束。按下面最小步骤来:
- 撤销该用户的活跃会话:要求该用户重新登录,同时撤销所有登录令牌和App专用密码。
- 检查邮箱转发规则和自动回复:把Outlook/Exchange的规则列表导出来,重点看有没有自动转发到外部域名。
- 检查近期登录记录:找出攻击者在会话中访问过的文件和应用,评估数据泄露范围。
- 对攻击域名做取证:保留钓鱼页面源码、证书、DNS记录,尝试反查同一IP背后的其他域名。
- 通知重点同事:如果攻击者处于活跃会话中,很可能已经看到通讯录,向高管、财务等账号发起第二轮钓鱼。要把受害邮箱的通讯录快速锁定,提前给重点目标预警。
这些步骤别等到“平台告警”才做,往往就是安全团队发现晚的十几分钟里,攻击者已经完成了最有价值的操作。
最后聊几句实操体会
“量子路由”这类钓鱼平台之所以能得手,本质上不是技术手段多高深,而是把“数量+信任+时间差”三个因素组合到了极致。1000个域名不是炫耀,是在缓解检测引擎的响应速度;假登录页不是简单复制,是在等待真实用户通过自定义信任验证。
我自己的体会是,对付这类需要保持灵活性的攻击,静态规则永远在“追着打”,最好用的还是让基础设施自己产生“可疑信号”:大量新注册域名、频繁换IP、同一个模板批量克隆页面、登录请求与访问钓鱼域名在时间上高度重合。把这些信号做成自动关联告警,比单纯更新黑名单靠谱得多。
最后分享一个小技巧:排查此类钓鱼平台时,多用“反向图像搜索”去看钓鱼页面里那套冒充企业Logo的图片素材。很多钓鱼平台会复用素材库里的Logo文件,一旦你识别出某张Logo同源关联的多个钓鱼域名,基本就能顺藤摸瓜找到同一轮攻击的基础设施群。这个思路在“量子路由”的跟踪里帮我们挖出了不少隐藏域名,你也可以试试。