1 引言
近年来,随着大型语言模型(Large Language Models, LLMs)在代码生成、文本创作等领域的广泛应用,其双刃剑特性在网络安全领域日益凸显。一方面,安全厂商利用AI提升威胁检测、自动化响应与情报分析能力;另一方面,攻击者亦开始借助LLM增强攻击载荷的隐蔽性、适配性与规避能力。2025年9月,微软威胁情报团队披露了一起新型钓鱼活动,首次明确将攻击载荷的混淆手法归因于LLM辅助生成。该活动以SVG(Scalable Vector Graphics)文件为载体,通过嵌入大量看似合法的“商业术语”构建语义伪装层,成功绕过传统基于签名或加密特征的静态检测机制。
与以往依赖Base64编码、字符串拼接或控制流扁平化的混淆技术不同,此次攻击的核心在于“语义合法化”——即利用自然语言生成能力,使恶意脚本在表层结构上呈现出业务逻辑合理性,从而欺骗人工审查与初级自动化分析工具。攻击者将JavaScript功能隐藏于不可见的SVG元素中,并通过映射“revenue”、“operations”、“risk”等词汇序列动态重构恶意指令,形成一种新型的非加密型混淆范式。此类手法不仅提升了载荷的抗逆向能力,也对现有邮件安全网关、终端防护系统及用户判断力构成严峻挑战。

本文围绕该样本展开深度技术剖析,系统阐述其攻击链构造、混淆机制实现原理、检测难点所在,并结合实际代码复现关键环节。在此基础上,评估当前主流安全产品(如Microsoft Defender for Office 365)的拦截逻辑,提出面向企业环境的多层防御策略,包括基础设施信号建模、行为上下文关联、条件访问强化及安全编排中的新型提示工程。全文旨在为安全研究者与防御方提供可操作的技术参考,推动对“AI生成型语义混淆”威胁的体系化认知与响应能力建设。

2 攻击链路与载荷构造
2.1 初始投递:伪装通知与邮箱滥用
攻击始于2025年8月18日,主要针对美国境内组织。攻击者首先入侵一家小型企业的办公邮箱,利用其作为跳板发送钓鱼邮件。邮件采用“自指地址”(self-addressed)策略——即发件人与收件人字段相同,真实目标隐藏于BCC字段中。此举旨在规避基于发件人-收件人关系异常的启发式规则。
邮件正文模仿典型的云存储文件共享通知,内容简洁,仅包含一句提示:“You have been granted access to a shared document.” 并附带一个名为 “23mb – PDF- 6 pages.svg” 的附件。该命名刻意模仿PDF文档的常见格式(大小+页数),诱导用户误认为是常规办公文件,而忽略其实际为SVG格式。

2.2 SVG载荷结构与语义伪装
SVG作为一种基于XML的矢量图形格式,支持内嵌JavaScript,长期以来被攻击者用于投递无文件(fileless)恶意载荷。然而,传统SVG钓鱼多依赖显式<script>标签或事件处理器(如onload),易被沙箱或静态分析识别。本次攻击则采用更为隐蔽的构造方式。
载荷开头部分模拟一个“业务绩效仪表盘”(Business Performance Dashboard),包含如下不可见元素:
<svg xmlns="http://www.w3.org/2000/svg" width="0" height="0">
<rect x="0" y="0" width="100" height="20" fill="transparent" opacity="0"/>
<text x="0" y="15" fill="transparent" opacity="0" font-size="12">
Business Performance Q3 Metrics
</text>
<g opacity="0">
<rect width="50" height="10" fill="#ccc"/>
<text>JUL</text><text>AUG</text><text>SEP</text>
</g>
</svg>
所有图形元素均设置opacity="0"和透明填充,确保用户打开时无任何视觉输出,但保留完整的DOM结构。这种“视觉无害化”设计可有效绕过基于渲染行为的沙箱检测。

2.3 语义混淆核心:商业术语映射机制
真正的恶意逻辑隐藏于一个不可见的<text>元素的自定义属性中:
<text data-analytics="
revenue operations risk compliance shares equity assets liabilities
turnover margin growth forecast budget audit valuation strategy
governance liquidity portfolio synergy acquisition divestiture
"></text>
该属性值由30余个高频商业词汇组成,表面看是用于“数据分析”的元数据。然而,嵌入的JavaScript会对此字符串进行多阶段解码:
分词与索引映射:将词汇列表按固定顺序映射为字符索引(如revenue → 0, operations → 1, …);
块重组与偏移校正:将索引序列分组,应用预设偏移量还原原始字节;
动态函数构造:使用Function()或eval()执行重构后的代码。
以下为简化版解码逻辑示例:
// Step 1: 获取伪装数据
const decoy = document.querySelector('text[data-analytics]').getAttribute('data-analytics');
const terms = decoy.split(/\s+/);
// Step 2: 定义词汇到字符的映射表(攻击者预置)
const termMap = {
'revenue': 104, // 'h'
'operations': 116, // 't'
'risk': 116, // 't'
'compliance': 112, // 'p'
'shares': 115, // 's'
// ... 其余映射
};
// Step 3: 重构URL
let urlChars = [];
for (let i = 0; i < 5; i++) { // 假设前5个词对应 "https"
urlChars.push(String.fromCharCode(termMap[terms[i]]));
}
const targetUrl = urlChars.join('') + "://kmnl.cpfcenters.de/verify";
// Step 4: 重定向
window.location.href = targetUrl;
此机制的关键在于:整个载荷不含任何可疑字符串(如eval、unescape、atob)或加密片段,所有操作均通过合法JavaScript语法完成,且变量名(如processBusinessMetricsf43e08)具有高度语义性,进一步增强迷惑性。

3 AI生成痕迹与归因分析
微软安全团队通过Security Copilot对样本进行逆向推断,确认其极可能由LLM生成。主要依据包括:
冗余命名模式:函数与变量名均为“描述性英文短语 + 随机十六进制后缀”(如initializeAnalytics4e2250),符合LLM为避免命名冲突而自动附加哈希的典型行为;
过度模块化:代码被拆分为多个职责单一的函数(解析、转换、验证、执行),结构工整但实际并无必要,体现AI“过度工程化”倾向;
通用注释:包含如“Advanced business intelligence data processor”等泛化描述,缺乏具体业务上下文;
技术冗余:强制包含XML声明与CDATA包裹,虽非SVG执行所必需,但符合LLM从文档示例中学习的“完整性偏好”。
这些特征共同构成“合成代码指纹”,可作为新型检测信号。

4 检测挑战与现有防御局限
传统邮件安全方案在面对此类攻击时存在明显盲区:
静态分析失效:因无加密、无混淆函数调用,YARA规则或字符串扫描难以触发;
沙箱绕过:由于SVG无可见输出且延迟重定向,部分轻量级沙箱判定为“无害”;
文件类型信任偏差:SVG常用于图标或图表,企业策略对其限制弱于JS/EXE;
语义理解缺失:现有引擎缺乏对“业务术语是否合理用于脚本上下文”的判断能力。
即便启用高级威胁防护,若仅依赖载荷内容本身,仍可能漏报。

5 多维度防御体系构建
5.1 基础设施与行为信号融合
微软Defender for Office 365之所以成功拦截,关键在于不依赖载荷内容,而是综合以下信号:
发件模式异常:自指邮件 + BCC群发;
附件命名欺诈:.svg伪装为.pdf;
重定向域信誉:kmnl.cpfcenters.de为新注册域名,无合法业务背景;
网络行为特征:落地页包含CAPTCHA + 浏览器指纹采集脚本。
企业应确保邮件网关启用多维信号关联分析,而非仅做附件内容扫描。
5.2 终端与身份层加固
启用Safe Links:对邮件中所有URL实施点击时重检,即使初始为合法域名;
部署条件访问(Conditional Access):对访问敏感应用(如O365、Entra ID)强制要求FIDO2安全密钥或多因素认证(MFA),防止凭据窃取后直接登录;
限制SVG执行环境:通过Intune或组策略禁止浏览器直接打开来自邮件的SVG文件,或强制在隔离容器中渲染。

5.3 安全编排中的新型检测提示
在SOC平台(如Microsoft Sentinel)中,可构建针对“语义混淆”的检测规则。例如,通过正则匹配SVG中是否存在高密度商业术语序列:
// KQL 查询:检测SVG附件中的可疑术语簇
EmailAttachment
| where FileName endswith ".svg"
| extend Content = tostring(parse_json(AttachmentContent).content)
| where Content has "revenue" and Content has "operations" and Content has "compliance"
| where array_length(split(Content, " ")) > 20 // 术语数量阈值
| project TimeGenerated, Sender, Recipient, FileName, ThreatLevel = "High"
此外,可训练轻量级NLP模型,计算SVG脚本中“业务词汇占比”与“控制流关键词占比”的比值,异常高值即告警。
6 代码级缓解与用户教育
6.1 自动化解包与动态监控
安全团队可开发自动化工具,在隔离环境中执行SVG并监控其行为:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
def analyze_svg(svg_path):
opts = Options()
opts.add_argument("--headless")
opts.add_argument("--no-sandbox")
driver = webdriver.Chrome(options=opts)
try:
driver.get(f"file://{svg_path}")
# 等待5秒观察重定向
time.sleep(5)
final_url = driver.current_url
if "cpfcenters.de" in final_url:
return {"malicious": True, "redirect": final_url}
except Exception as e:
return {"error": str(e)}
finally:
driver.quit()
该脚本可集成至邮件网关后端,实现SVG附件的动态行为分析。
6.2 用户侧最佳实践
警惕CAPTCHA跳转:合法服务极少在文件下载前要求完成CAPTCHA;
核对文件扩展名:操作系统应显示完整扩展名,避免“.svg”被误认为“.pdf”;
禁用邮件中自动加载远程内容:防止SVG触发外连。
7 结语
LLM辅助生成的语义混淆钓鱼攻击,标志着网络对抗已进入“AI vs. AI”的新阶段。攻击者不再追求代码的不可读性,而是转向语义的合理性伪装,利用人类对“业务逻辑”的天然信任降低警惕。此类手法虽未突破底层执行模型,却有效绕过了当前以加密特征和可疑API调用为核心的检测范式。
防御的关键在于跳出载荷内容本身,转向对投递上下文、基础设施信誉、用户行为基线的综合建模。同时,安全产品需引入对“合成代码风格”的识别能力,并将自然语言处理技术融入威胁分析流程。对于组织而言,技术控制必须与用户意识提升同步推进——在AI生成内容泛滥的时代,“看起来合理”已不再是安全的充分条件。唯有构建覆盖邮件、终端、身份、网络的纵深防御体系,方能在AI赋能的攻防博弈中保持主动。
编辑:芦笛(公共互联网反网络钓鱼工作组)
292

被折叠的 条评论
为什么被折叠?



