SANS ISC:HTML 钓鱼附件中的「comment stuffing」——一种规避 AI 邮件检测的新手法

SANS ISC handler Jan Kopriva 拆解一封被邮件安全方案拦截的钓鱼邮件:发送方用自制脚本(空 envelope sender、缺 Date 头、X-Priority:0)直投,附件为 2.5MB 的 HTML,整体经 unicode 转义包裹、尾部填充逾 43 万个“X”注释。分析认为其意在“淹没”AI/NLP 内容评估或撑爆 token 预算触发扫描跳过,从而规避检测。

📖 原文翻译与解读。原文:Comment stuffing in an HTML phishing attachment as a mechanism for evading AI-based detection?(SANS Internet Storm Center,2026 年 7 月 10 日)

一、一封“不寻常”的钓鱼邮件

SANS ISC handler Jan Kopriva 分享了一封被某客户邮件安全方案拦截的钓鱼邮件。该邮件伪装成 Microsoft Teams 关于 SharePoint 文档共享的通知,并直接附带一份“待审批”文档。三个邮件头细节暴露了发送工具的非正规性:

三者叠加表明:邮件并非经由标准邮件服务器发出,而是某自制脚本直接与接收服务器握手投递。

二、被“注水肿胀”的 HTML 附件

附件名为“<公司名>_Pending_Approvals#<数字>.xls.html”,大小 2,589 kB,远超普通自包含钓鱼 HTML 页面。打开后可见整页被一层简单混淆包裹:全部内容存为长串“\uXXXX”转义,交由 JavaScript 的 unescape() 在 document.write() 中还原。

解码后仅剩 431 kB 的 HTML,其中真正可用的钓鱼页面仅约前 11 kB,其余皆为填充:位于 </html> 之后的单个 HTML 注释,内含逾 43 万个字母“X”(原始编码为 \u0058)。文件被“膨胀”了两次——先是被约 420 kB 的注释撑大,再被“\uXXXX”编码(每个字符含填充计 6 字节)放大,最终“X”块约占 2.5 MB,即整文件的约 97%。

三、它想规避的究竟是什么

经典“二进制填充”动机(MITRE ATT&CK T1027.001)是让文件超过杀软扫描体积上限;但本例填充是注释而非二进制 blob,且 2.5 MB 远低于当今邮件安全方案的扫描上限(通常数十 MB),低熵的“X”块也毫无伪装效果。真正可疑的是:近两年越来越多的邮件安全方案引入了 NLP/AI 内容评估。

KnowBe4 年初提出“NLP obfuscation”——把恶意内容放前面、再用大量看起来无害的填充“稀释”其权重,使内容分类模型的打分跌破拦截阈值;同样的体量也可能让基于 AI 的扫描耗时过长,导致部分方案选择“放行”而非长期延迟投递。本例附件结构(先载荷、后填充)与之相同,区别只是填充是单一重复字符而非自然语言。

作者据此推断:填充的目的更可能是“淹没”而非“伪装”——无论传统分类器还是真正的 LLM,恶意部分在巨大低信息量整体中只占极小比例,足以把平均/概率型判定拉到阈值以下;同时海量无意义字符会撑爆 token 预算,使受单封时间/体积预算约束的扫描器提前终止或跳过分析(对应 OWASP LLM04 模型拒绝服务风险)。当然,作者强调这终属“有根据的推测”。

四、功能部分与防护启示

真正起作用的是一套平庸的 SharePoint 主题凭据窃取页:它通过 Clearbit Logo API 动态加载受害组织 logo(因该免费 API 已于 2025 年底关停而失败,露出占位图,反倒暴露页面由旧代码或 LLM 生成);凭据经 POST 提交至被滥用的 Formspark 表单服务;页面还拦截开发者工具与“查看源”快捷键以反分析。

了解更多行业资讯,请访问 行业资讯首页 或致电 021-69753778 获取安全咨询服务。

相关文章


—— ztpop.net 编辑团队 译