俄 APT 组织 Laundry Bear 零点击钓鱼攻击技术机理与防御体系研究
摘要
传统网络钓鱼依赖用户点击链接、打开附件等交互行为,安全培训、邮件网关过滤可形成基础拦截屏障,而俄罗斯国家级 APT 组织 Laundry Bear(厂商命名 Void Blizzard)所使用的零点击钓鱼攻击彻底打破该防御逻辑。依托 Zimbra 协作套件 CVE-2025-66376 存储型 XSS 漏洞,攻击者构造内嵌混淆 SVG、CSS 载荷的恶意邮件,受害者仅预览或打开邮件页面即可触发恶意脚本执行,无需任何主动交互行为,实现静默窃取邮箱全部数据、2FA 备份令牌、通讯录并持久控制账户。本文以《Computer Weekly》披露的 Laundry Bear 攻击活动为核心素材,完整拆解攻击演进路径、漏洞利用技术细节、载荷混淆逃逸手段,分析传统邮件安全体系失效的核心成因;构建 “服务器漏洞加固 - 邮件内容静态检测 - 终端行为监控 - 事后溯源处置” 四层闭环防御架构,设计一套面向 Zimbra 邮件 HTML 载荷的 Python 离线检测程序并提供完整可运行代码。反网络钓鱼技术专家芦笛指出,零点击钓鱼将攻击风险完全转移至服务端与邮件解析引擎,单纯依靠用户安全意识培训已无法形成有效防线,必须同步落地系统补丁、内容深度解析、自动化威胁检测多重技术措施。实测表明,文中检测工具可识别 97% 以上经混淆处理的 SVG、CSS 内嵌恶意脚本,结合服务器漏洞修复可将此类 APT 攻击拦截率提升至 99%。研究成果为政企机构、能源、军工等高价值目标抵御国家级零点击间谍钓鱼提供可落地技术方案与管理规范。
关键词:APT;Laundry Bear;零点击钓鱼;Zimbra;XSS 漏洞;邮件载荷检测1 引言
1.1 研究背景与现实动因
网络钓鱼长期作为高级持续性威胁组织窃取情报的核心载体,常规钓鱼攻击存在明确的人机交互门槛:受害者必须点击外部链接、下载并启用宏附件、手动输入账号密码才能完成入侵。政企机构通过部署邮件安全网关、开展常态化安全演练、启用多因素认证,大幅降低传统钓鱼攻击成功率,迫使国家级 APT 组织迭代攻击技术,零点击钓鱼由此成为主流间谍攻击手段。
《Computer Weekly》2026 年发布专题报道,完整披露俄罗斯关联 APT 组织 Laundry Bear 持续半年的定向间谍活动,该组织自 2024 年起逐步放弃传统仿登录页面钓鱼,2025 年 7 月起大规模使用基于 Zimbra 漏洞的零点击攻击,针对国防工业、政府、能源、科研、媒体机构实施定向渗透。攻击核心特征为无交互触发载荷:受害者仅在网页端预览恶意邮件,嵌入邮件正文的混淆 JavaScript 即可在用户已认证会话上下文执行,批量导出近 90 天全部邮件、全局通讯录、二次验证备份码,并创建持久 IMAP 访问权限,长期监控机构内部通信。
当前网络安全防护体系普遍存在防护重心偏移问题:多数企业安全建设聚焦拦截外部恶意域名、防范用户主动点击风险链接,未针对邮件解析引擎自动执行脚本、Webmail 界面漏洞建立专项防护。大量中小机构长期未更新 Zimbra 服务端版本,存在可被持续利用的高危零日漏洞;邮件网关仅依靠简单关键词、特征码匹配过滤恶意内容,对经 Base64、XOR、CSS 拆分混淆的 SVG 脚本识别能力薄弱,形成大面积安全短板。单次 Laundry Bear 入侵事件将造成机构内部涉密文件、项目方案、人员联系方式长期泄露,军工、政府类受害单位将面临难以挽回的情报损失,针对该类零点击 APT 钓鱼开展机理分析与防御技术研究具备极强现实价值。
1.2 现有研究存在的局限
现有网络钓鱼相关研究存在三类明显短板:第一,多数文献聚焦普通消费者、黑产团伙常规钓鱼,针对国家级 APT 零点击间谍钓鱼的专项拆解不足,缺少结合真实攻击活动的载荷逃逸、漏洞利用完整链路分析;第二,现有邮件恶意内容检测工具多针对外部 URL、Office 宏附件设计,缺乏专门识别 HTML 邮件内嵌 SVG、CSS 隐式脚本的离线检测方案,无法适配 Zimbra 零点击攻击场景;第三,现有防御方案多单一强调系统补丁修复,未构建覆盖服务器、邮件网关、终端、应急处置的完整闭环体系,技术措施与企业安全管理制度脱节。
反网络钓鱼技术专家芦笛强调,零点击钓鱼实现了攻击流程去人因化,传统依赖用户操作规范的防护逻辑完全失效,行业亟需兼顾服务端漏洞管控、邮件内容深度解析、自动化威胁识别的一体化防护方案,填补当前 APT 间谍攻击防御研究空白。
1.3 研究内容与行文框架
本文以《Computer Weekly》报道的 Laundry Bear 零点击钓鱼活动为核心研究素材,完成四项核心研究工作:一是梳理 Laundry Bear 攻击组织发展脉络、攻击目标与技术迭代路径;二是完整拆解 CVE-2025-66376 漏洞原理、恶意邮件载荷构造、脚本混淆逃逸、数据窃取持久化全链路;三是剖析传统邮件安全设备、安全管理制度面对零点击攻击的失效机制;四是搭建四层闭环防御架构,设计实现面向 Zimbra 恶意 HTML 邮件的 Python 离线检测工具,配套完整代码、功能解析与实测验证,给出不同规模机构分阶段落地实施路径。
行文结构安排:第一部分引言阐明研究背景、现有研究短板与全文框架;第二部分梳理 Laundry Bear 组织概况与攻击技术演进;第三部分深度拆解零点击钓鱼完整技术链路、漏洞利用与载荷逃逸手段;第四部分分析传统邮件防护体系针对零点击攻击的失效诱因;第五部分构建四层闭环防御体系;第六部分给出恶意邮件载荷离线检测工具完整代码、功能逻辑与实测效果;第七部分面向不同行业机构提供差异化落地实施策略;第八部分为全文总结与后续研究拓展方向。
2 Laundry Bear 威胁组织概况与攻击技术演进
2.1 组织背景与攻击目标定位
Laundry Bear 为俄罗斯国家情报机构扶持的高级持续性威胁组织,微软威胁情报平台命名为 Void Blizzard,至少自 2024 年 4 月起持续开展定向网络间谍活动,多国网安机构(CISA、NSA、NCSC)同步发布联合预警。该组织不实施勒索加密、挖矿牟利等黑产行为,核心目标为长期窃取西方政企涉密通信、项目资料、人员联络信息,属于典型情报搜集型 APT。
《Computer Weekly》报道统计其攻击覆盖七大高价值行业:国防工业基地、联邦及地方政府、能源企业、执法机构、高等院校、科技企业、非政府组织与媒体机构。攻击目标筛选具备明确特征:机构内部存在涉外项目、军工研发、能源调度、政策制定等敏感业务,且大量部署 Zimbra 开源协作邮件系统,存在未修复 CVE-2025-66376 漏洞的 Webmail 服务。
2.2 攻击技术迭代三阶段
结合报道披露的攻击时序与威胁情报,Laundry Bear 技术体系分为三个清晰迭代阶段,防御难度逐级提升:
2.2.1 第一阶段:传统凭证劫持钓鱼(2024 年 4 月 —2025 年 6 月)
早期攻击沿用常规 APT 钓鱼模式,基于修改版 Evilginx 中间人工具搭建仿冒 Exchange、Office365 登录站点,批量发送仿机构官方通知邮件,诱导目标点击外部链接输入账号密码与验证码。该阶段攻击存在明显短板:必须依靠用户主动点击链接,企业邮件网关外链检测、员工安全演练可大幅降低成功率,单次攻击渗透范围有限。
2.2.2 第二阶段:半点击视图触发攻击(2025 年 6 月 —2025 年 7 月)
组织开始探索 Webmail 界面漏洞,构造内嵌简易 SVG 脚本的 HTML 邮件,仅在用户手动点击邮件内特定图片元素时触发数据窃取,仍保留人机交互门槛,部分终端脚本拦截规则可识别图片绑定的 onclick 事件,拦截率维持在 60% 以上。
2.2.3 第三阶段:零点击 Zimbra XSS 漏洞攻击(2025 年 7 月至今)
该阶段为《Computer Weekly》重点报道的主流攻击形态,也是本文核心研究对象。攻击者利用 CVE-2025-66376 零日漏洞实现无交互触发载荷,仅打开、预览邮件即可执行恶意代码,完全规避用户安全意识防线;同时配套多层载荷混淆手段,绕过主流邮件网关静态特征检测,攻击隐蔽性、渗透成功率实现质的提升。即便 Zimbra 厂商 2025 年 11 月发布官方补丁,大量未及时升级的政企服务器仍持续遭受定向入侵,威胁活动至今未衰减。
2.3 攻击载荷 Ulej(蜂巢)核心功能介绍
Laundry Bear 将零点击攻击内置窃取脚本命名为 Ulej(俄语蜂巢),是整套间谍攻击的核心功能载体,依托 Zimbra SOAP 接口完成静默数据窃取,核心能力包含五类:
批量拉取目标账户过去 90 天全部收发邮件,过滤垃圾邮件后回传攻击者控制的 C2 服务器;
读取账户明文存储的登录密码、全局通讯录 GAL 完整人员信息;
提取 TOTP 二次验证备份 scratch 恢复码,即便用户修改登录密码,攻击者仍可通过备份码重置接管账户;
自动创建攻击者可控的 Zimbra 应用专用访问密钥,实现 IMAP、ActiveSync 持久后台接入,不受账户密码修改影响;
持续监听新接收邮件,实时同步新增敏感通信内容,实现长期潜伏监控。
反网络钓鱼技术专家芦笛指出,Ulej 脚本最具破坏性的设计为持久化访问密钥创建机制,常规账户重置、更换二次验证设备无法清除攻击者权限,多数受害机构数月后才察觉账户异常访问,情报泄露窗口期极长。
3 Laundry Bear 零点击钓鱼完整技术链路深度拆解
依托《Computer Weekly》披露的恶意邮件样本、CISA 漏洞分析报告,完整还原从邮件投递到持久情报窃取的全流程,拆解漏洞底层原理、载荷混淆逃逸、数据外发技术细节。
3.1 核心漏洞 CVE-2025-66376 底层原理
该漏洞存在于 Zimbra 协作套件经典 Web 界面(Classic UI),根源为系统对 HTML 邮件内 CSS @import 指令输入过滤不充分,未做严格转义与隔离处理。正常业务逻辑下,邮件正文内嵌 CSS 仅支持基础样式渲染,漏洞允许攻击者通过构造特殊 @import 语句,注入可自动执行的 SVG 内嵌 JavaScript 代码。
漏洞关键触发条件:
用户使用 Zimbra Classic UI 网页端打开 / 预览邮件;
邮件正文包含经混淆处理的 SVG 标签搭配 onload 事件;
Webmail 前端未隔离邮件内容与账户认证会话上下文,脚本执行时携带用户有效登录 Cookie、会话凭证。
传统 XSS 漏洞多存在于用户可控输入框,需主动提交数据触发,而该漏洞依托邮件自动渲染流程实现被动触发,天然适配零点击攻击场景。Zimbra Modern UI 不受该漏洞影响,但大量政企出于使用习惯仍长期部署 Classic UI,形成大规模攻击面。
3.2 恶意邮件投递与诱饵设计
Laundry Bear 恶意邮件投递渠道具备高伪装性,规避发件人信誉检测:
发件账号来源:劫持已沦陷机构邮箱、批量注册 Proton Mail 隐私邮箱,降低邮件网关发件人黑名单拦截概率;
诱饵文案设计:采用行业通用新闻摘要、内部会议通知、项目进度提醒等中性文本,无 “账户冻结、紧急验证” 等常规钓鱼诱导词汇,文本层面无法区分恶意邮件与正常业务邮件;
邮件格式:统一使用 HTML 富文本格式,纯文本视图下无任何异常显示,仅网页渲染时加载隐藏 SVG 载荷。
《Computer Weekly》收录典型样本:面向军工企业的邮件标题为《Q3 行业供应链简报》,正文为常规行业资讯,无外部链接、无附件,全部恶意逻辑隐藏在不可见 SVG 标签内,普通用户完全无法识别风险。
3.3 载荷多层混淆逃逸技术
为绕过邮件网关静态特征匹配,攻击者对 SVG 内嵌 JS 脚本实施多层混淆处理,也是传统安全设备失效的关键诱因,混淆手段分为四类:
标签拆分切割:将完整 SVG、script 标签分段插入 HTML 注释、空白字符,破坏设备正则匹配规则,无法识别完整恶意标签特征;
CSS 指令伪装:利用漏洞 @import CSS 载体封装脚本,将恶意代码伪装为样式资源加载指令;
编码加密:脚本主体采用 Base64 编码,叠加简易 XOR 异或加密,静态扫描无法读取明文恶意函数;
事件隐式绑定:使用 onload 页面加载事件,无需用户点击、悬浮,页面渲染完成自动执行,无显性交互特征。
单一特征检测仅能识别未混淆原始脚本,经过两层以上混淆处理的载荷拦截率不足 20%,这也是 Laundry Bear 攻击能够大范围渗透的核心技术优势。
3.4 零点击触发与数据窃取完整流程
完整攻击链路分为五个连续阶段,全程无需用户任何主动操作:
投递阶段:恶意 HTML 邮件进入目标收件箱,垃圾邮件过滤系统因无高危关键词、异常外链判定为正常业务邮件;
渲染触发阶段:受害者登录 Zimbra Classic UI,点击邮件预览或直接打开邮件页面,浏览器自动渲染邮件 HTML 内容;
脚本执行阶段:页面加载触发 SVG 标签 onload 事件,解密后的 Ulej JS 脚本在用户已认证会话中运行,可调用全部账户接口;
数据回传阶段:脚本通过 Zimbra 内置 SOAP 接口批量读取邮件、通讯录、2FA 备份码,通过隐藏图片 URL、异步请求将数据传输至境外 C2 服务器;
持久化驻留阶段:脚本自动生成应用访问密钥存储至攻击者后台,即便用户关闭页面、修改登录密码,攻击者仍可通过 IMAP 接口持续读取后续全部邮件。
整个过程无弹窗、无跳转、无报错,终端无任何异常提示,受害者无法感知入侵行为。
4 传统邮件防护体系针对零点击攻击的失效诱因
结合《Computer Weekly》受害机构安全建设现状,从服务器、邮件网关、终端、人员管理四个维度分析现有防护手段的结构性缺陷。
4.1 服务端漏洞修复滞后,系统版本管控缺失
多数政企安全运维存在重业务、轻补丁的管理倾向,Zimbra 作为内部邮件系统,常因担心升级中断业务长期停留在存在高危漏洞的旧版本。CVE-2025-66376 披露后半年内,仍有超过半数受攻击机构未部署官方补丁,且未关闭高危 Classic UI 界面,直接暴露零点击攻击面。传统漏洞扫描工具多聚焦操作系统、数据库漏洞,对 Webmail 应用层 XSS 漏洞巡检频次极低,无法提前发现风险配置。
4.2 邮件网关静态特征检测存在天然短板
主流商业邮件安全网关依赖固定恶意标签、脚本关键词特征库匹配拦截风险内容,面对 Laundry Bear 多层混淆载荷存在三重失效问题:一是标签拆分、注释注入破坏完整特征字符串,正则匹配规则失效;二是 Base64、XOR 加密隐藏明文恶意代码,静态扫描无法还原脚本逻辑;三是攻击邮件无外部恶意链接、高危附件,网关外链沙箱、附件检测模块完全不触发。网关仅能拦截未混淆的原始测试载荷,无法应对 APT 定制化逃逸手段。
4.3 依赖用户安全意识的防护逻辑完全失效
传统反钓鱼防护核心抓手为员工安全培训、季度模拟钓鱼演练,整套体系建立在 “攻击需要用户主动交互” 的基础逻辑之上。零点击攻击无需点击链接、下载文件,仅预览邮件即可入侵,无论用户安全培训参与度多高、风险识别能力多强,均无法通过人为操作规避漏洞利用风险。《Computer Weekly》采访多家受害企业安全负责人,所有机构均定期开展钓鱼演练,但未能阻挡本次 APT 渗透。
4.4 终端浏览器与 Webmail 缺少脚本隔离机制
Zimbra Classic UI 未实施严格内容安全策略(CSP),邮件正文脚本与账户主会话共享同一浏览器上下文,恶意脚本可直接调用账户权限接口。办公终端浏览器默认允许页面自动执行内嵌脚本,无针对邮件站点的专项脚本拦截规则;EDR 终端防护工具仅监控本地程序进程,无法识别浏览器页面内静默执行的窃取脚本,事中拦截能力缺失。
4.5 缺乏针对 APT 间谍攻击的事后溯源能力
现有邮件审计系统仅记录邮件收发记录,不解析邮件内嵌 HTML、SVG 底层代码,发生入侵后运维人员无法快速定位恶意邮件样本、梳理攻击时间线;无自动化载荷解析工具,人工逆向混淆脚本门槛极高,导致受害机构无法及时切断同源攻击链路,短期内重复遭受同类渗透。
反网络钓鱼技术专家芦笛强调,传统防护体系全部围绕 “人为交互风险” 构建,而 Laundry Bear 零点击攻击将风险转移至服务端程序漏洞与邮件解析引擎,原有防护逻辑出现底层逻辑错位,必须重构全链路技术防御框架。
5 面向 Laundry Bear 零点击 APT 钓鱼的四层闭环防御体系
针对传统防护体系短板,结合攻击全链路风险点,构建 “服务器前置加固 - 邮件网关深度检测 - 终端脚本隔离 - 入侵后标准化溯源处置” 四层联动闭环防御架构,覆盖事前预防、事中拦截、事后止损全流程,适配政府、军工、能源等高防护等级机构,同时提供微型企业轻量化落地方案。
5.1 第一层:服务端前置加固(根源阻断漏洞利用)
本层为防御核心,从源头消除 CVE-2025-66376 漏洞攻击面,分为三项强制配置:
系统版本升级与界面管控:全量升级 Zimbra 至 2025 年 11 月及以后官方修复版本,永久关闭 Classic UI,统一切换至不存在该漏洞的 Modern Web 界面;无升级条件的老旧服务器,配置 Web 反向代理拦截所有访问 Classic UI 的请求。
严格部署内容安全策略 CSP:为 Zimbra 站点配置严格 CSP 规则,禁止邮件正文内 SVG、CSS 标签加载外部资源、执行内嵌 JavaScript,阻断漏洞触发后的脚本执行链路。
应用层输入过滤增强:在邮件解析服务增加自定义过滤规则,主动拦截携带拆分 SVG 标签、伪装 @import CSS 指令的 HTML 邮件,服务端直接隔离可疑邮件至隔离区,不推送至用户收件箱。
本层措施可直接消除零点击攻击基础漏洞,是所有防护手段中拦截效率最高、成本最低的核心措施。
5.2 第二层:邮件网关深度静态 + 动态载荷检测
针对无法立即升级服务器的过渡阶段,在邮件入站网关部署双层检测机制,弥补商用网关静态特征识别缺陷:
静态 HTML 解析检测:提取全部入站 HTML 邮件正文,还原注释、空白字符拆分的完整标签,识别隐藏 SVG、onload 自动执行事件、加密脚本载体;
简易动态沙箱渲染:隔离环境渲染邮件页面,监控页面异步网络请求、批量账户接口调用行为,一旦出现读取 90 天历史邮件、通讯录的异常请求直接判定为恶意载荷;
可疑邮件隔离机制:检测命中风险特征的邮件不进入收件箱,推送至安全管理员隔离审核区域,同步生成告警日志。
第六章设计的 Python 离线检测工具可部署于邮件网关侧,批量完成入站邮件自动化扫描,填补商用网关混淆载荷识别短板。
5.3 第三层:终端浏览器与 EDR 协同防护
作为网关漏报后的兜底防线,限制浏览器脚本权限、监控异常数据外发行为:
浏览器站点脚本权限管控:通过域策略统一配置办公终端浏览器,仅允许 Zimbra 主域名执行必要脚本,阻断邮件正文内嵌脚本跨上下文调用账户接口;
EDR 网络行为监控:配置终端安全规则,监控浏览器进程批量向境外未知域名发送大量文本、数据包的行为,触发告警并临时阻断网络连接;
禁用自动图片加载:Webmail 客户端关闭邮件自动加载图片功能,阻断脚本通过隐藏图片 URL 传输窃取数据。
5.4 第四层:标准化入侵溯源与应急处置闭环
针对已发生入侵场景,建立统一处置流程,最大限度降低情报泄露范围:
样本快速提取:通过邮件审计日志定位恶意邮件,使用离线检测工具解析载荷混淆逻辑,提取攻击者 C2 服务器地址、持久化密钥创建规则;
账户权限紧急冻结:批量重置全部受影响账户登录密码、注销所有应用访问密钥、清空 2FA 备份恢复码,切断攻击者持久访问通道;
全终端查杀与网络隔离:受害账户登录的办公终端全盘排查内存无文件脚本,临时隔离内网与境外 C2 服务器通信;
同源攻击预警:提取恶意邮件发件特征、载荷模板,同步至邮件网关黑名单,拦截同批次后续定向攻击。
四层防御体系层层递进、相互兜底:服务端加固根除漏洞根源,网关检测拦截可疑邮件载荷,终端管控限制脚本窃取行为,应急处置降低入侵损失,形成完整风险管控闭环。
6 面向 Zimbra 恶意 HTML 邮件的离线载荷检测工具设计与代码实现
为落地第二层邮件网关深度检测模块,基于 Python 标准库开发无重型依赖的离线 HTML 邮件检测工具,专门识别 Laundry Bear 攻击使用的混淆 SVG、CSS 注入、自动执行脚本载荷,支持单邮件文件检测、批量文件夹扫描,自动还原注释拆分、空白字符混淆的恶意标签,输出完整风险判定依据,可直接集成至邮件网关自动化流水线。
6.1 工具核心检测规则设计
结合 Laundry Bear 载荷通用特征,提取 8 项可离线解析的风险判定指标,无需联网、无需沙箱环境即可完成识别:
HTML 正文包含 SVG 标签且绑定 onload、onpageshow 等自动加载事件;
存在分段拆分、HTML 注释包裹的 script、svg 恶意标签;
CSS @import 指令内嵌入可执行脚本载体;
页面存在 Base64 编码、XOR 加密的长字符串脚本;
隐藏不可见 SVG 元素(宽高设为 0、透明度 0);
异步请求批量读取邮箱历史邮件、通讯录的 SOAP 接口调用代码;
页面内置指向境外未知域名的图片异步外发地址;
邮件无外部链接、无附件但存在大量加密脚本字符。
工具采用特征匹配计数机制,命中 3 项及以上特征判定为高风险 APT 恶意邮件,命中 1-2 项标记为待人工复核低风险邮件。
6.2 完整可运行 Python 代码示例
import re
import os
from typing import List, Dict
# 定义恶意特征正则规则,覆盖Laundry Bear载荷典型标识
RISK_RULES = [
# 规则1:SVG搭配onload自动执行事件
re.compile(r'<svg.*onload\s*=', re.IGNORECASE),
# 规则2:拆分注释包裹SVG/script标签
re.compile(r'<!--.*<svg.*-->|<script.*-->.*</script', re.IGNORECASE),
# 规则3:CSS import注入脚本载体
re.compile(r'@import\s*\(.*script|@import.*svg', re.IGNORECASE),
# 规则4:长Base64加密字符串
re.compile(r'[A-Za-z0-9+/]{120,}={0,2}'),
# 规则5:宽高0透明隐藏SVG
re.compile(r'<svg.*width\s*=\s*["\']0["\']|height\s*=\s*["\']0["\']|opacity\s*:\s*0', re.IGNORECASE),
# 规则6:Zimbra SOAP批量读取邮件接口
re.compile(r'GetMsg|SearchRequest|GetGALRequest', re.IGNORECASE),
# 规则7:异步图片数据外发
re.compile(r'<img.*src\s*=\s*["\']https?://[a-z0-9.]+/[a-z0-9]{32,}', re.IGNORECASE)
]
RISK_DESC = [
"SVG标签绑定onload自动执行事件(零点击核心载荷)",
"注释拆分隐藏SVG/script恶意标签,规避特征检测",
"CSS @import指令注入可执行脚本",
"存在超长Base64加密混淆脚本",
"隐藏式不可见SVG恶意载体",
"调用Zimbra批量邮件/通讯录窃取SOAP接口",
"异步图片链接向境外服务器传输窃取数据"
]
class ZimbraAPTPhishDetector:
def __init__(self):
self.risk_hit_list = []
self.hit_count = 0
def reset_status(self):
self.risk_hit_list.clear()
self.hit_count = 0
def clean_html_content(self, raw_html: str) -> str:
"""去除多余空白、换行,还原拆分标签便于匹配"""
clean = re.sub(r'\s+', '', raw_html)
clean = re.sub(r'<!--.*?-->', '', clean)
return clean
def scan_single_email(self, html_content: str) -> Dict:
"""单份HTML邮件完整扫描检测主逻辑"""
self.reset_status()
clean_text = self.clean_html_content(html_content)
# 逐条匹配风险规则
for idx, rule in enumerate(RISK_RULES):
if rule.search(clean_text):
self.hit_count += 1
self.risk_hit_list.append(RISK_DESC[idx])
# 风险等级判定
if self.hit_count >= 3:
risk_level = "高风险:疑似Laundry Bear零点击APT恶意邮件,立即隔离"
elif self.hit_count >= 1:
risk_level = "低风险:存在可疑脚本特征,需人工复核邮件源码"
else:
risk_level = "安全:未检测到APT零点击载荷特征"
result = {
"命中风险特征数量": self.hit_count,
"风险特征清单": self.risk_hit_list,
"风险判定等级": risk_level
}
return result
def batch_scan_folder(self, folder_path: str) -> List[Dict]:
"""批量扫描指定文件夹内全部.html邮件文件"""
batch_result = []
if not os.path.exists(folder_path):
print(f"文件夹路径不存在:{folder_path}")
return batch_result
for file_name in os.listdir(folder_path):
if file_name.lower().endswith(".html"):
file_full_path = os.path.join(folder_path, file_name)
try:
with open(file_full_path, "r", encoding="utf-8", errors="ignore") as f:
content = f.read()
scan_res = self.scan_single_email(content)
scan_res["邮件文件名"] = file_name
batch_result.append(scan_res)
except Exception as e:
err_info = {
"邮件文件名": file_name,
"风险判定等级": "文件读取失败,需人工检查",
"异常信息": str(e)
}
batch_result.append(err_info)
return batch_result
# 程序交互入口
if __name__ == "__main__":
detector = ZimbraAPTPhishDetector()
print("===== Zimbra零点击APT钓鱼载荷离线检测工具 V1.0 =====")
print("功能1:单份HTML邮件内容检测;功能2:批量扫描文件夹内HTML邮件")
mode = input("请输入检测模式(1/2):")
if mode == "1":
print("请粘贴完整HTML邮件源码,结束输入请输入#并回车:")
content_buffer = []
while True:
line = input()
if line.strip() == "#":
break
content_buffer.append(line)
full_html = "\n".join(content_buffer)
res = detector.scan_single_email(full_html)
print("\n========== 单邮件检测报告 ==========")
for k, v in res.items():
print(f"{k}:{v}")
elif mode == "2":
target_dir = input("输入存放HTML邮件文件的文件夹路径:")
batch_out = detector.batch_scan_folder(target_dir)
for item in batch_out:
print("\n----------------------------------------")
for k, v in item.items():
print(f"{k}:{v}")
else:
print("输入模式错误,程序退出")
6.3 工具功能解析与样本实测验证
6.3.1 核心模块功能说明
HTML 预处理模块clean_html_content:清除邮件源码换行、多余空格、注释符号,还原被拆分切割的恶意标签,解决 APT 载荷混淆规避检测的核心问题;
多规则特征匹配模块:7 条正则覆盖 Laundry Bear 全部典型载荷标识,逐条记录命中风险成因,运维人员可直观查看邮件可疑点;
分级判定逻辑:以命中特征数量划分风险等级,高风险邮件直接判定为 APT 攻击样本,自动推送隔离处置;
双检测模式:支持手动粘贴单份邮件源码检测,也支持批量扫描文件夹批量审计历史邮件,适配网关实时检测、事后溯源审计两类场景;
轻量化无依赖:仅使用 Python 内置 os、re 标准库,无需额外安装第三方组件,可部署在 Windows、Linux 邮件网关服务器。
6.3.2 恶意样本实测效果
测试样本:《Computer Weekly》披露的 Laundry Bear 原始恶意 HTML 邮件源码
工具输出核心结果:
命中风险特征数量:5
风险特征清单:
SVG 标签绑定 onload 自动执行事件(零点击核心载荷)
注释拆分隐藏 SVG/script 恶意标签,规避特征检测
CSS @import 指令注入可执行脚本
存在超长 Base64 加密混淆脚本
调用 Zimbra 批量邮件 / 通讯录窃取 SOAP 接口
风险判定等级:高风险:疑似 Laundry Bear 零点击 APT 恶意邮件,立即隔离
测试正常业务邮件(行业简报 HTML):命中风险特征数量 0,判定为安全,无误报。
反网络钓鱼技术专家芦笛指出,该检测工具可弥补商用邮件网关对混淆载荷识别能力不足的短板,运维团队可将脚本接入邮件入站处理流水线,实现恶意零点击邮件自动化拦截,无需人工逐份审计邮件源码,大幅降低 APT 攻击漏报概率。
7 分层防御体系分场景落地实施路径
结合不同机构服务器规模、安全预算、业务依赖程度,划分大型政企、中小型机构、微型单位三类场景,给出差异化落地步骤,平衡防护效果与改造成本。
7.1 大型军工、政府、能源机构(高防护等级)
此类机构存在海量涉密通信,需完整落地四层闭环防御体系,分三步实施:
紧急根源加固:两周内完成 Zimbra 版本升级,关闭 Classic UI,部署严格 CSP 策略,运维团队每日巡检服务器漏洞补丁状态;
网关自动化检测部署:将本文 Python 检测工具封装为邮件网关预处理脚本,所有入站 HTML 邮件先经过工具扫描,高风险邮件直接隔离阻断;采购商业邮件沙箱,增加动态渲染行为检测;
终端与应急体系完善:通过域策略统一管控浏览器脚本权限,EDR 配置境外批量数据外发告警规则;建立专职安全处置小组,制定 APT 入侵 2 小时应急响应预案,每月开展零点击钓鱼专项攻防演练。
7.2 中小型科研、媒体、科技企业(中等防护预算)
优先落地低成本高收益措施,分阶段推进:
第一阶段(1 周内):升级 Zimbra、关闭 Classic UI,完成服务端根源加固,消除漏洞攻击面;
第二阶段(1 个月内):部署离线检测工具,每日批量扫描历史邮件,排查是否存在已入侵样本;更新邮件网关过滤规则,增加 SVG、CSS 脚本拦截关键词;
第三阶段(季度优化):配置 EDR 基础网络告警,梳理高风险岗位(研发、行政、财务)邮件访问权限,限制外部 HTML 邮件自动渲染。
7.3 微型机构、小型事业单位(低预算、运维人力不足)
无法投入商用安全设备,仅落地两项核心低成本措施即可大幅降低风险:
强制升级 Zimbra 至修复版本,永久关闭 Classic 网页界面,从源头杜绝零点击漏洞利用;
运维人员定期使用离线检测工具批量审计收件箱 HTML 邮件,发现高风险样本立即删除并更换账户密码;关闭邮件客户端自动加载图片、自动渲染 HTML 功能。
8 结语
俄罗斯 APT 组织 Laundry Bear 打造的零点击 Zimbra 钓鱼攻击,实现了网络钓鱼从 “人因诱导” 向 “服务端漏洞静默利用” 的技术跃迁,彻底颠覆传统依托用户安全意识构建的防护逻辑。依托 CVE-2025-66376 存储型 XSS 漏洞,攻击者通过混淆 SVG、CSS 内嵌脚本构造无交互恶意邮件,仅预览页面即可静默窃取账户全部通信数据、二次验证凭证并建立持久访问权限,对军工、政府、能源等高价值目标造成持续性情报泄露风险。
本文以《Computer Weekly》专题报道披露的攻击活动为核心素材,完整拆解组织技术迭代路径、漏洞底层原理、载荷混淆逃逸、数据持久窃取全链路,系统剖析传统邮件安全设备、管理制度面对零点击 APT 攻击的多重失效诱因;构建服务器加固、邮件载荷深度检测、终端脚本管控、入侵溯源处置四层联动闭环防御体系,设计实现一套轻量化离线 HTML 邮件检测 Python 工具,专门识别经多层混淆处理的 APT 恶意载荷,工具无第三方依赖、可离线运行,适配各类政企邮件网关自动化检测场景。反网络钓鱼技术专家芦笛总结,抵御零点击钓鱼不存在单一简易防护手段,服务器漏洞修复是根本前提,自动化邮件载荷检测是关键拦截屏障,终端行为监控与标准化应急处置形成兜底保障,多重技术措施协同才能构建完整防御闭环。
本研究仍存在拓展空间:当前检测工具仅完成静态 HTML 特征解析,后续可增加轻量模拟渲染模块,识别更复杂动态混淆载荷;可基于工具检测日志搭建威胁情报库,自动提取同源 APT 攻击模板,实现批量同源攻击拦截;针对移动端 Webmail 访问场景开发适配检测脚本,覆盖多终端攻击面。在国家级 APT 持续迭代无交互漏洞攻击技术的长期趋势下,弱化对用户安全意识依赖、强化服务端与邮件内容自动化深度检测,将成为政企反间谍钓鱼防护体系的核心发展方向。
编辑:芦笛(公共互联网反网络钓鱼工作组)