跳到主要内容

SYLK 文件格式的武器化滥用:基于 Excel 4.0/XLM 宏的隐蔽攻击链分析

· 阅读需 14 分钟
ICE Lab
Institute of Cyber Environment

摘要

SYLK(Symbolic Link)文件格式诞生于 1980 年代,设计目标为仅使用可显示 ANSI 字符实现跨应用程序的表格数据交换。该格式至今仍被 Microsoft Office 默认映射至 Excel 应用程序。本文揭示了一个被广泛忽视的攻击面:SYLK 文件可直接承载 Excel 4.0/XLM 宏指令,且在当前安全生态中几乎未被充分认知与检测。与受到层层监视的 VBA 宏不同,XLM 宏在 SYLK 容器中的复活为攻击者提供了一条低风险、高成功率的攻击通道。本文系统分析了 SYLK 格式在受保护视图豁免、邮件与浏览器网关绕过、AMSI 盲区等方面的安全缺陷,并提出了多层次防御建议。

关键词:SYLK;XLM 宏;Excel 安全;攻击面分析;AMSI 盲区

1. 引言

在攻击者与防御者的持续对抗中,一个反复出现的规律是:最新锐的攻击手法总是受到最严密的监控,而最古老的合法功能却常常成为完美的隐匿空间。SYLK 文件格式正是这一规律的最新注脚。

此前,安全研究员 Matt Nelson 已演示过将 DDE(动态数据交换)攻击与 SYLK 格式相结合的方法,且该技术已被多起真实恶意软件样本所采用。本文在此基础上进一步揭示一个更为严重的滥用维度:SYLK 可以直接承载 Excel 4.0/XLM 宏,且这一能力在当前安全检测体系中几乎未被充分覆盖。在 VBA 宏已受到 AMSI 扫描、受保护视图沙箱等多重监视的今天,XLM 宏在 SYLK 容器中的复活,为攻击者提供了一条完整的、从文件传输到代码执行的隐蔽攻击链。

本文的主要贡献包括:(1)梳理了 SYLK 格式在纵深防御体系中的特殊豁免地位;(2)分析了 XLM 宏在 SYLK 容器中的嵌入机制与执行约束;(3)研究了扩展名为 CSV 时的格式伪装攻击面;(4)评估了现有安全检测工具的有效性并分析了 AMSI 盲区产生的原因。

2. SYLK 文件格式概述

2.1 格式定义

SYLK 是一种基于 ANSI 文本的表格数据交换格式,设计于 1980 年代。其核心设计原则为仅使用可显示字符,确保在不同系统间的可靠传输。SYLK 文件以 .slk 为扩展名,至今仍被 Microsoft Office 默认映射至 Excel,覆盖版本包括 2010、2013、2016 及更新版本。

2.2 安全防御体系中的特权地位

SYLK 在网络防御体系中的特殊地位并非源自技术漏洞,而是源于"默认信任"的历史遗留问题。

受保护视图沙箱的豁免:当文件从互联网下载时,Windows 会为其附加"网络标记"(Mark of the Web, MotW)。对于常规 Office 文件,MotW 会触发受保护视图沙箱,阻止宏执行并显示安全警告。然而,SYLK 文件格式不适用此沙箱机制。用户双击打开恶意 .slk 文件时,不会经历受保护视图的安全屏障。

邮件与浏览器网关的通行证:SYLK 文件在传输阶段几乎不受拦截:

  • MS Outlook 阻止附件列表—不包含 .slk
  • OWA(Outlook Web Access)默认阻止扩展名列表—不包含 .slk
  • Chrome 安全浏览的文件类型黑名单—未将 .slk 标记为危险文件类型

这意味着经过武器化的 .slk 文件可以通过电子邮件附件或云存储链接,以极高的送达率出现在目标用户的收件箱中。

3. XLM 宏嵌入机制分析

3.1 嵌入原理

VBA 宏无法嵌入 SYLK 格式,但 Excel 4.0/XLM 宏可以通过手工构造记录行的方式原生嵌入。Excel 的"另存为"功能会主动剥离宏代码,但手工编写的 .slk 文件绕过了这一剥离过程——Excel 在解析时直接执行嵌入的宏指令。

以下为实验验证的基本构造示例:

ID;P
O;E
NN;NAuto_open;ER101C1
C;X1;Y101;EEXEC("CALC.EXE")
C;X1;Y102;EHALT()
E

逐行解析:

行号记录含义
1ID;P声明文件类型为 SYLK,P 表示生产型文件
2O;E全局选项记录,E 子记录指明"此文档包含宏"
3NN;NAuto_open;ER101C1定义命名区域,将 R101C1 命名为 Auto_open(XLM 宏的自动执行事件触发器,等同于 VBA 的 Auto_Open
4C;X1;Y101;EEXEC("CALC.EXE")定义第 1 列第 101 行单元格,表达式值为 XLM 宏函数 EXEC("CALC.EXE")
5C;X1;Y102;EHALT()第 1 列第 102 行单元格执行 HALT(),终止宏执行
6E文件结束符

3.2 关键约束

行长度限制:SYLK 文件每行不得超过 260 字符,超过该限制时 Excel 将拒绝解析该行。这一约束对长 payload 的构造构成限制。

本地化适配Auto_open 是语言相关的触发器名称。在荷兰语版本中须写为 Auto_openen,德语中为 Auto_öffnen。跨语言攻击场景需适配对应的本地化名称。

3.3 XLM 宏的攻击能力

EXEC()HALT() 仅为 XLM 宏能力的极小一部分。完整的 XLM 宏指令集支持以下攻击原语:

  • 远程载荷加载:通过 URLDownloadToFile 结合 EXEC 实现动态下载与执行
  • 进程注入:调用 Windows API 向其他进程注入 Shellcode
  • 文件系统操作:包括文件写入、删除、编码与解码
  • 反分析检测:通过 GET.WORKSPACE 检测鼠标移动、最近文件列表等沙箱特征

SYLK 作为 XLM 宏的传输容器,直接继承了上述全部攻击能力。武器化的 .slk 文件等价于一个携带完整后门逻辑的轻量级恶意文档,且其攻击链中几乎每一步都享有防御豁免。

4. 攻击面扩展

4.1 CSV 格式伪装

SYLK 文件的一个特性是:Excel 会依据文件内容而非扩展名来识别格式。具体而言,若一个文件以 ID;P 开头,即使扩展名为 .csv,Excel 也会识别其为 SYLK 格式,并向用户弹出确认对话框。

攻击者可利用此特性:

  1. 制作以 ID;P 开头的恶意文件
  2. 将扩展名设为 .csv,伪装为"客户名单"、"交易记录"等看似无害的表格
  3. 利用用户对 CSV 文件的低警惕性(一般认为 CSV 是纯文本,不可能携带宏),配合 Excel 对话框的误导性提示,达成宏执行

4.2 跨平台覆盖

Microsoft Office for Mac 同样原生支持 SYLK 格式与 XLM 宏。.slk 扩展名默认映射至 Mac 版 Excel,且 Auto_open 触发器在 Mac 环境下完全有效。

值得注意的是,Microsoft Office for Mac 2011 存在一个已公开但不再修复的漏洞:打开包含宏的 SYLK 文件时不显示任何安全警告,宏直接静默执行。由于该版本已终止生命周期支持,此漏洞成为永久性零日。尽管 Office 2011 的用户量逐年下降,但仍构成一条持续开放的未修复攻击路径。

5. 检测规避与 AMSI 盲区

5.1 检测现状

SYLK 文件基于 ANSI 文本,结构简单,理论上应易于检测。然而实际测试表明,大多数主流安全产品对恶意 .slk 文件的检测签名和启发式规则均严重滞后。原因可归因于以下三点:

  • 样本稀缺.slk 在野样本量相对较小,未引起安全厂商充分关注
  • 语法异构:XLM 宏语法与 VBA 完全不同,基于 VBA 特征的检测引擎无法有效识别
  • 混淆空间:SYLK 文件可通过冗余记录、注释、空白填充等手段进行高度混淆,降低了启发式引擎的有效性

5.2 AMSI 盲区成因分析

反恶意软件扫描接口(AMSI)是 Windows 针对动态内容的关键防御层,为安全产品提供对脚本、宏、PowerShell 等执行上下文的可见性。然而在 SYLK 攻击场景中,AMSI 完全不起作用。

根本原因在于:AMSI 的宏扫描引擎仅与 VBA 运行时交互,无法理解 Excel 4.0/XLM 宏的语法与执行上下文。当恶意宏通过 SYLK 文件的 XLM 指令执行时,AMSI 无法感知任何可疑活动。这构成了一个完整的、从文件传输到代码执行的 AMSI 盲区攻击链。

6. 防御建议

6.1 组织层面

  • 通过组策略限制 Excel 对 SYLK 文件格式的处理,或配置信任中心禁止 XLM 宏的执行
  • 在邮件网关层将 .slk 加入阻止扩展名列表
  • 定期审计 Office for Mac 客户端版本,淘汰已终止支持的版本

6.2 检测层面

  • 安全产品应建立针对 XLM 宏语法的独立检测引擎,而非依赖 VBA 特征库
  • 对以 ID;P 开头的 .csv 文件进行内容类型检查与告警
  • 监控 Excel 进程对 EXECURLDownloadToFile 等敏感 API 的调用

6.3 用户行为层面

  • 对来源不明的 .slk.csv 文件保持警惕
  • 在 Excel 中检查文件的实际格式类型,而非仅依赖扩展名
  • 保持 Office 应用程序及操作系统的安全更新

7. 结论

SYLK 文件格式的滥用并非零日漏洞,而是一种对"历史信任"的利用。它仅需要一个被安全生态系统性忽视的古老文件格式,加上一层被现有检测工具忽略的宏执行引擎,即可构成完整的攻击链。

这一案例揭示了一个更深层的安全启示:在纵深防御体系的构建中,兼容性设计往往与安全设计存在根本性矛盾。每一层为维持向后兼容而保留的"历史豁免",都可能成为攻击者绕过多层防御的捷径。对安全研究者而言,系统性地审视那些因"过于老旧"而未被纳入威胁模型的协议与格式,可能是发现下一代攻击面的关键路径。

参考文献

[1] Microsoft Corporation. "SYLK File Format Reference." https://learn.microsoft.com/en-us/office/

[2] Nelson, M. "DDE Attacks in SYLK Files." https://posts.specterops.io/

[3] Microsoft Corporation. "Anti-Malware Scan Interface (AMSI)." https://learn.microsoft.com/en-us/windows/win32/amsi/

[4] Microsoft Corporation. "Excel 4.0 Macro Functions Reference." https://learn.microsoft.com/en-us/office/client-developer/excel/