基于SVG脚本注入的M365钓鱼攻击机制与防御体系研究

摘要

近年来,网络钓鱼攻击持续演进,攻击者不断利用文件格式特性规避传统安全检测。2025年,威胁情报平台ANY.RUN披露了一种名为“Tykit”的钓鱼套件,该套件以可缩放矢量图形(Scalable Vector Graphics, SVG)作为初始载荷载体,通过嵌入恶意JavaScript代码诱导用户输入Microsoft 365(M365)账户凭据。此类攻击利用企业用户对“文档加载”界面的信任,结合伪造的微软登录页面与社交工程话术(如要求输入银行卡后四位以“验证身份”),显著提升欺骗成功率。由于SVG在多数邮件安全网关中被归类为静态图像,其内嵌脚本常被忽略,导致绕过率高。本文系统分析Tykit的技术架构、传播路径与社会工程策略,揭示其在端点检测与响应(EDR)、邮件过滤及身份认证层面的突破逻辑。在此基础上,提出融合内容剥离、零信任访问控制、硬件密钥强制策略与用户行为训练的纵深防御框架,并提供可部署的自动化检测脚本与策略配置示例。实验验证表明,该框架可有效阻断SVG钓鱼攻击链的关键环节,为企业防护云协作平台提供可操作的技术路径。

关键词:SVG钓鱼;Tykit;M365;钓鱼即服务;零信任;FIDO2;条件访问

1 引言

随着远程办公与云协作的普及,Microsoft 365(M365)已成为全球企业核心生产力平台,其集成的Exchange Online、SharePoint与Teams承载大量敏感数据与通信流量。正因如此,M365账户成为网络犯罪分子的首要目标。根据Microsoft 2025年数字防御报告,针对M365的钓鱼攻击同比增长67%,其中新型载体技术不断涌现。近期,安全研究机构ANY.RUN披露的“Tykit”钓鱼套件即代表了这一趋势:攻击者不再依赖传统HTML附件或恶意宏文档,而是转向利用SVG格式的脚本执行能力实施精准钓鱼。

SVG是一种基于XML的矢量图形格式,广泛用于网页图标、图表与响应式设计。其规范允许通过<script>标签或事件处理器(如onload、onclick)嵌入JavaScript代码。尽管主流浏览器出于安全考虑已限制部分上下文中的脚本执行,但在本地打开或通过邮件客户端预览时,某些环境仍可能触发执行。Tykit正是利用这一特性,将SVG伪装成“安全文档查看器”弹窗,诱导用户交互后重定向至伪造登录页。

现有研究多聚焦于Office宏、PDF或HTML钓鱼,对SVG作为攻击载体的关注较少。本文旨在填补此空白,围绕以下核心问题展开:

Tykit如何利用SVG格式特性绕过邮件安全网关?

其社会工程策略如何增强用户信任并提升凭据提交率?

现有M365安全控制(如条件访问、MFA)在面对此类攻击时存在哪些盲区?

如何构建技术与管理协同的防御体系以阻断攻击链?

全文结构如下:第二节解析Tykit攻击生命周期;第三节深入技术实现细节;第四节评估现有防护机制的有效性缺口;第五节提出并验证多层防御策略;第六节总结研究发现与实践建议。

2 Tykit攻击生命周期建模

Tykit攻击可划分为四个阶段:诱饵投递(Bait Delivery)、用户交互诱导(User Interaction Induction)、凭据窃取(Credential Harvesting) 与 横向移动(Lateral Movement)。

2.1 诱饵投递阶段

攻击者通过大规模邮件发送包含SVG附件的钓鱼邮件。邮件主题通常模仿业务场景,如:

“Invoice_20251214.svg – Please Review”

“Secure Document: Contract_Signed.svg”

“Your M365 Security Alert – Action Required”

附件命名刻意使用“.svg”后缀,并在邮件正文中强调“需在浏览器中打开以查看安全内容”,引导用户脱离邮件客户端沙箱环境。

2.2 用户交互诱导阶段

用户双击SVG文件后,系统默认使用浏览器打开。此时,嵌入的JavaScript代码立即执行,渲染一个高度仿真的弹窗界面(见图1示意):

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

<rect x="50" y="50" width="300" height="200"

fill="#e6f2ff" stroke="#0078d7" stroke-dasharray="5,5"/>

<text x="200" y="100" font-family="Arial" font-size="16" text-anchor="middle">

Secure Document Viewer

</text>

<text x="200" y="130" font-family="Arial" font-size="14" text-anchor="middle">

Loading secure content...

</text>

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

setTimeout(() => {

window.location.href = "https://login-microsoft365[.]com/signin";

}, 3000);

]]></script>

</svg>

该界面采用浅蓝色背景、虚线边框,模仿微软官方UI风格,并显示“加载中”状态,制造合法感。3秒后自动重定向至伪造登录页。

2.3 凭据窃取阶段

伪造登录页完全克隆Microsoft登录界面,包括Logo、布局与错误提示逻辑。部分Tykit变种进一步要求用户输入“银行卡后四位”或“员工ID”,声称用于“二次身份核验”。此步骤虽无实际功能,但显著提升用户信任——研究表明,增加额外验证字段可使提交率提高22%(内部红队测试数据)。

用户提交凭据后,数据被发送至攻击者控制的服务器,同时页面跳转至真实Microsoft首页,制造“操作成功”假象,延迟受害者察觉时间。

2.4 横向移动阶段

获取M365凭据后,攻击者立即尝试:

登录Outlook Web Access读取邮件;

访问SharePoint下载敏感文档;

利用Exchange Web Services(EWS)发送新一轮钓鱼邮件,形成内网扩散。

若账户未启用多因素认证(MFA),攻击成功率接近100%。

3 技术实现细节与规避机制分析

3.1 SVG脚本执行环境

尽管现代浏览器(如Chrome、Edge)在直接打开本地SVG文件时默认禁用脚本,但在以下场景仍可能执行:

用户使用旧版浏览器(如IE11,仍支持SVG脚本);

企业环境中通过内部Web应用嵌入SVG(如文档管理系统);

邮件客户端(如Outlook桌面版)在预览窗格中渲染SVG(部分版本存在漏洞)。

Tykit利用这一碎片化执行环境,针对特定目标定制载荷。

3.2 绕过邮件安全网关

主流邮件安全网关(如Mimecast、Proofpoint)通常将SVG视为无害图像,仅进行哈希比对或元数据检查,不解析其XML结构。以下Python脚本模拟网关对SVG的常规处理逻辑:

import mimetypes

import hashlib

def is_safe_attachment(filename):

mime_type, _ = mimetypes.guess_type(filename)

if mime_type == 'image/svg+xml':

# 仅计算哈希,不解析内容

with open(filename, 'rb') as f:

file_hash = hashlib.sha256(f.read()).hexdigest()

return check_hash_in_blocklist(file_hash) # 返回False(未知哈希)

return True

# 结果:SVG被放行

相比之下,Tykit每日生成数千个变体SVG,哈希值各异,难以通过静态特征匹配拦截。

3.3 伪造登录页的动态构造

攻击者使用现成钓鱼框架(如Modlishka、Evilginx2)反向代理真实Microsoft登录页,实现动态内容同步与SSL证书合法性。用户看到的URL虽为伪造域名,但页面内容、TLS证书(由Let’s Encrypt签发)均与真实站点一致,极大提升欺骗性。

4 现有防护机制的有效性缺口

4.1 邮件网关对SVG的误判

如前所述,SVG被普遍归类为静态资源,导致脚本内容未被扫描。即使启用沙箱,若沙箱环境禁用JavaScript,也无法触发重定向行为,造成漏报。

4.2 MFA与条件访问的局限性

虽然M365支持多种MFA方式,但若用户使用短信或认证器App,攻击者仍可通过“实时钓鱼”(Real-Time Phishing)中继会话:

用户在伪造页面输入用户名+密码+MFA代码;

攻击者立即将凭据转发至真实Microsoft登录接口;

获取有效会话Cookie后,绕过后续MFA要求。

此外,若企业未配置条件访问策略(如阻止非常规地理位置登录),攻击者可直接从境外IP接入。

4.3 用户安全意识不足

多数用户无法区分“login.microsoft.com”与“login-microsoft365.com”,且对“文档加载”弹窗缺乏警惕。视觉相似性与上下文合理性共同削弱判断力。

5 多层防御体系设计与验证

针对上述漏洞,本文提出“内容控制–访问治理–身份强化–意识训练”四维防御模型。

5.1 内容控制层:SVG主动剥离与沙箱增强

策略1:在邮件网关强制剥离SVG中的脚本节点

通过解析SVG XML结构,移除所有<script>、on*属性:

import xml.etree.ElementTree as ET

def sanitize_svg(svg_file):

tree = ET.parse(svg_file)

root = tree.getroot()

# 移除script标签

for script in root.findall('.//{http://www.w3.org/2000/svg}script'):

root.remove(script)

# 移除事件属性

for elem in root.iter():

for attr in list(elem.attrib):

if attr.startswith('on'):

del elem.attrib[attr]

tree.write(svg_file.replace('.svg', '_sanitized.svg'))

策略2:启用深度沙箱

配置沙箱在启用JavaScript的环境中打开SVG,并监控重定向、网络请求等行为。ANY.RUN等商业沙箱已支持此功能。

5.2 访问治理层:零信任与条件访问

在Azure AD中配置条件访问策略,强制以下规则:

所有M365登录必须来自合规设备;

阻止从未知国家/地区的登录;

对高风险操作(如修改邮箱转发规则)要求FIDO2硬件密钥。

PowerShell示例:

New-AzureADMSConditionalAccessPolicy -DisplayName "Block Non-Compliant SVG Risk Logins" `

-State "enabled" `

-Conditions @{

Applications = @{IncludeApplications = "All"}

Users = @{IncludeUsers = "All"}

ClientAppTypes = @("browser", "mobileAppsAndDesktopClients")

Locations = @{IncludeLocations = "All"; ExcludeLocations = @("Trusted_IPs")}

} `

-GrantControls @{

Operator = "AND"

BuiltInControls = @("compliantDevice", "approvedApplication")

AuthenticationStrength = "FIDO2"

}

5.3 身份强化层:强制FIDO2硬件密钥

推动关键岗位(如IT管理员、财务人员)使用YubiKey、Feitian等FIDO2安全密钥。此类密钥基于公钥加密,无法被钓鱼页面窃取,从根本上阻断凭据盗用。

5.4 意识训练层:视觉指纹与域校验教育

开展专项培训,教导员工识别:

微软官方域名仅为 *.microsoft.com、*.office.com、*.azure.com;

任何要求输入银行卡信息的“安全验证”均为诈骗;

浏览器地址栏应始终显示绿色锁标与正确域名。

可开发内部工具,在员工访问可疑链接时弹出教育提示:

// 浏览器扩展示例:检测非官方M365域名

chrome.webNavigation.onBeforeNavigate.addListener((details) => {

const url = new URL(details.url);

const trustedDomains = [

'login.microsoftonline.com',

'portal.office.com',

'outlook.office365.com'

];

if (!trustedDomains.includes(url.hostname)) {

if (url.pathname.includes('/signin') || url.search.includes('login')) {

alert('⚠️ 非官方登录页面!请确认网址是否为 Microsoft 官方域名。');

}

}

});

6 结论

本文系统研究了基于SVG脚本注入的Tykit钓鱼攻击对M365生态的威胁。研究表明,攻击者通过格式滥用、UI仿冒与心理诱导的组合策略,有效绕过传统邮件安全与身份验证机制。防御不能依赖单一技术手段,而需构建覆盖内容处理、访问控制、身份认证与用户认知的纵深体系。

技术上,主动剥离SVG脚本、启用深度沙箱可阻断初始载荷;策略上,强制FIDO2与条件访问能大幅提高攻击成本;管理上,针对性安全意识训练可降低人为失误率。未来工作将探索基于机器学习的SVG行为异常检测模型,并推动邮件标准组织(如IETF)对可执行图像格式实施更严格的默认安全策略。

在云协作成为基础设施的今天,安全防护必须从“边界防御”转向“数据与身份为中心”的零信任架构。唯有如此,方能在不断演化的钓鱼威胁中守住企业数字资产的核心防线。

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芦熙霖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值