Netwrix 1Secure 提供跨数据和身份的统一可见性——免费试用14天,享有完全访问权限。开始免费试用

资源中心博客

为什么 NTFS Alternate Data Streams 是一种安全漏洞

为什么 NTFS Alternate Data Streams 是一种安全漏洞

Jun 26, 2025

你可能不太熟悉 NTFS 文件流,但在使用任何现代 Windows 系统访问文件时,你每天都在使用它。本文将解释 NTFS ADS 的这一特性,展示黑客如何在网络攻击中利用文件流功能,并提供保护组织的策略。

精选相关内容:

默认数据流和备用数据流

文件流(file stream)是一个字节序列,用于存储与文件相关的数据,例如关键词或创建该文件的用户身份。可以把数据流(data stream)想象成“文件中的文件”——存在于合法文件之中的隐藏文件。每个数据流都有自己的磁盘空间分配、自己的实际大小(正在使用的字节数)以及自己的文件锁。

在你的 NTFS 文件结构中,每个文件至少都有一个数据流,即它的默认数据流。default data stream 是正常且可查看的文件内容——例如,.txt 文件中的文本,或 .exe 文件中的可执行代码。这些信息存储在 $Data 属性中。由于该默认属性的名称为空(设置为 “”),默认数据流也常被称为 “unnamed data stream”。

文件还可以包含一个或多个 alternate data streams(ADS)。ADS 必须命名。注意:即使添加了备用数据流(alternate data streams),默认数据流也不会发生变化。

如何创建备用数据流(alternate data streams)

为文件创建备用数据流(alternate data streams)非常容易:只需在文件名或路径后追加一个冒号(“:”),再加上数据流名称即可。由于冒号是文件名中不允许使用的保留字符,因此不会与现有文件名冲突。

你可以为一个文件添加多个 ADS(备用数据流)。例如,下面展示了如何为一个文本文件创建两个备用数据流:

Myfile.txt:stream2

Myfile.txt:secretstuff

NTFS 文件流的优势

虽然像 FAT16 和 FAT32 这类较旧的 Windows 文件系统不支持多数据流,但 ADS 并不是一项新技术;它自 Windows NT 起就已存在于 Microsoft 的 NTFS 文件系统所有版本中。

在早期,使用多个数据流有助于让一台 Windows 服务器同时也能充当 Apple Macintosh 计算机的文件服务器。Mac 文件每个文件会使用两个数据流——一个用于数据,另一个用于资源信息。由于 NTFS 支持多数据流,Mac 用户可以将文件复制到 Windows 服务器,然后再复制回 Mac,而不会丢失资源流。换句话说,ADS 能够为两套系统及其应用程序提供兼容性。

在 Windows 中使用备用数据流(alternate data streams)也有一些正当的原因。例如,某些归档管理和备份软件会使用 ADS 来存储文件修订信息;而许多网络浏览器会在从互联网上下载的文件中添加一个数据流,其中包含有关该文件来源位置的安全信息。

ADS 的阴暗面

尽管 ADS 有许多正当用途,但黑客也可能将其滥用于恶意目的,例如恶意软件攻击。就像走私者用来在检查人员面前藏匿违禁品的手提箱内部的秘密隔层一样,威胁行为者可以利用 ADS 隐藏恶意代码,并在躲避基础安全检测的同时执行未来的攻击。ADS 可以存储任何类型的文件,包括音频、视频、图像,甚至像病毒、木马和勒索软件这样的恶意代码。由于备用数据流是隐藏的,用户无法通过目录列表命令来检测它们。

用于处理 NTFS 流的工具

有一些原生工具可用于更深入地了解 ADS。包括:

  • Echo 以及更多
  • Sysinternals Streams 实用程序
  • Dir 命令的 /R 选项。
  • PowerShell 3.0,其中包含 6 个 cmdlet,可直接操作用于 ADS 的内容

Echo 和 More

先从使用 Echo 和 More 开始。在下面的示例中,使用 Echo 命令将“:secret”追加到名为 test.txt 的文本文件中;然后使用 More 命令写入默认情况下无法查看的秘密消息。请注意,Dir 命令也看不到该秘密的 NTFS 流。

Image

数据流(Streams)

Streams 是一款可从 Sysinternals 获取的命令行工具。它用于显示文件夹中哪些文件会使用默认数据流之外的流。下面的截图表明,文件 test.txt 具有一个名为“secret”的备用流,其文件大小为 86 字节。请注意,这远多于前一个示例中 Dir 命令显示的 26 字节。

Image

Dir /R

自 Windows Server 2003 起,Dir /R 选项就已可用。如下面所示,当使用 Dir /R 选项时,我们的文件“test.txt”会出现两次。它还会分别显示默认文件流和“秘密”文件流的正确文件大小。

Image

PowerShell

您还可以使用 PowerShell 来识别文件中的备用数据流。下面的示例中,我们使用了带有 Stream 选项和通配符参数的命令 Get-Item。输出会同时显示我们文件的两个数据流;箭头突出显示备用数据流视图。

Image

您还可以使用 PowerShell 清除 NTFS 流。下面的截图中,我们使用了 clear-content 命令来删除与“秘密”数据流相关联的数据。随后立即运行 get-item 命令会确认:由于文件大小现在为零,流中的数据已被删除。

Image

我们还能做得更进一步:如下面所示,使用 remove-item 命令可以将该流彻底删除。get-item 命令用于确认该流已被删除。

Image

如何防范 ADS 威胁

对手可以并且确实会使用 ADS(Alternate Data Streams,替代数据流)在你的分层文件结构中隐藏恶意内容,包括勒索软件和其他恶意软件。不幸的是,Windows 文件资源管理器、Dir 命令以及相关工具只会报告文件的默认数据流信息。事实是,一个看似简单、报告只有 1k 数据的 .txt 文件或 Word 文档,实际上可能会在 ADS 中封装数兆字节的隐藏数据或可执行代码。

因此,在制定安全管理策略时,你需要提升对 ADS 的可见性。特别是,请考虑投资部署能够检测替代数据流(Alternate Data Streams)是否存在,并扫描未授权内容的防病毒产品、数据发现工具以及数据外传(数据泄露)检测器,以便你能够主动将其移除。毕竟,事件预防总是优于事件响应。

NTFS 权限管理最佳实践

了解更多



分享到

了解更多

关于作者

Asset Not Found

Joe Dibley

安全研究员

Netwrix 的安全研究员,并且是 Netwrix Security Research Team 的成员。Joe 是 Active Directory、Windows 以及各类企业软件平台与技术方面的专家;他/她研究新的安全风险、复杂的攻击技术,以及相应的缓解措施与检测方法。