初识ADS
字数 1193 2025-08-29 08:30:36

NTFS Alternate Data Streams (ADS) 完全指南

1. ADS基础概念

ADS (Alternate Data Streams) 是NTFS磁盘格式的一个特性:

  • 在NTFS文件系统下,所有文件都是一个数据流
  • 默认都是未命名的流(主数据流)
  • NTFS允许创建额外的命名数据流

2. NTFS文件流命名规范

文件的完整名称格式:

<filename>:<stream name>:<stream type>
  • 文件名:主文件名
  • 流名称:自定义的流名称
  • 类型:流类型(如$DATA)

例如:

  • test.txt 实际上是 test.txt::$DATA
  • 可以创建如 test.txt:secret:$DATA 的命名流

3. ADS基本操作

创建ADS

使用重定向操作符创建命名流:

echo "隐藏内容" > test.txt:secret

查看ADS

使用DIR命令查看流:

DIR /R

这会显示文件及其所有数据流。

删除ADS

使用PowerShell删除指定流:

Remove-Item -Path test.txt -Stream secret

4. ADS高级操作

文件夹ADS

ADS特性同样适用于文件夹:

echo "文件夹隐藏内容" > myfolder:secret

Windows API操作

使用Windows API操作ADS:

  • CreateFile 支持ADS操作
  • 可以使用 FindFirstStreamWFindNextStreamW 枚举$DATA类型的流

读取ADS内容

使用重定向读取:

more < test.txt:secret

5. ADS执行技术

执行PE程序

使用wmic执行ADS中的PE程序:

wmic process call create "D:\path\to\file.exe:streamname"

注意:必须使用绝对路径。

执行DLL

使用control执行ADS中的DLL:

control.exe c:\test\test.dll:test

不需要绝对路径。

使用rundll32

rundll32也支持ADS:

rundll32 c:\test\test.dll:test,EntryPoint

使用Forfiles

遍历执行命令:

forfiles /C "cmd /c type @file"

使用/M参数指定搜索掩码:

forfiles /M *.txt /C "cmd /c type @file"

使用AppVLP

AppVLP也可以用于执行ADS中的程序。

6. 防御与检测

ADS检测方法

  • 使用DIR /R命令
  • 使用PowerShell的Get-ItemGet-Content命令
  • 使用专门的ADS检测工具

ADS删除方法

  • 如前所述使用PowerShell的Remove-Item
  • 将文件复制到非NTFS文件系统(如FAT32)会自动去除ADS
  • 使用type命令将主数据流重定向到新文件

7. 实际应用场景

  • 数据隐藏:将敏感信息存储在ADS中
  • 恶意软件:用于隐藏恶意代码
  • 文件元数据:存储额外文件信息
  • 版本控制:存储文件的不同版本

8. 安全注意事项

  • ADS可能被用于恶意目的,如隐藏恶意软件
  • 常规杀毒软件可能不扫描ADS内容
  • 文件完整性检查应考虑ADS
  • 跨文件系统传输时ADS可能丢失

9. 参考工具

  • Streams (Sysinternals工具)
  • LADS (List Alternate Data Streams)
  • NTFS Stream Explorer
  • PowerShell ADS相关cmdlet

通过掌握这些知识,您可以充分利用NTFS ADS特性,同时也能有效防御潜在的恶意使用。

NTFS Alternate Data Streams (ADS) 完全指南 1. ADS基础概念 ADS (Alternate Data Streams) 是NTFS磁盘格式的一个特性: 在NTFS文件系统下,所有文件都是一个数据流 默认都是未命名的流(主数据流) NTFS允许创建额外的命名数据流 2. NTFS文件流命名规范 文件的完整名称格式: 文件名:主文件名 流名称:自定义的流名称 类型:流类型(如$DATA) 例如: test.txt 实际上是 test.txt::$DATA 可以创建如 test.txt:secret:$DATA 的命名流 3. ADS基本操作 创建ADS 使用重定向操作符创建命名流: 查看ADS 使用DIR命令查看流: 这会显示文件及其所有数据流。 删除ADS 使用PowerShell删除指定流: 4. ADS高级操作 文件夹ADS ADS特性同样适用于文件夹: Windows API操作 使用Windows API操作ADS: CreateFile 支持ADS操作 可以使用 FindFirstStreamW 和 FindNextStreamW 枚举$DATA类型的流 读取ADS内容 使用重定向读取: 5. ADS执行技术 执行PE程序 使用wmic执行ADS中的PE程序: 注意:必须使用绝对路径。 执行DLL 使用control执行ADS中的DLL: 不需要绝对路径。 使用rundll32 rundll32也支持ADS: 使用Forfiles 遍历执行命令: 使用/M参数指定搜索掩码: 使用AppVLP AppVLP也可以用于执行ADS中的程序。 6. 防御与检测 ADS检测方法 使用 DIR /R 命令 使用PowerShell的 Get-Item 和 Get-Content 命令 使用专门的ADS检测工具 ADS删除方法 如前所述使用PowerShell的 Remove-Item 将文件复制到非NTFS文件系统(如FAT32)会自动去除ADS 使用 type 命令将主数据流重定向到新文件 7. 实际应用场景 数据隐藏:将敏感信息存储在ADS中 恶意软件:用于隐藏恶意代码 文件元数据:存储额外文件信息 版本控制:存储文件的不同版本 8. 安全注意事项 ADS可能被用于恶意目的,如隐藏恶意软件 常规杀毒软件可能不扫描ADS内容 文件完整性检查应考虑ADS 跨文件系统传输时ADS可能丢失 9. 参考工具 Streams (Sysinternals工具) LADS (List Alternate Data Streams) NTFS Stream Explorer PowerShell ADS相关cmdlet 通过掌握这些知识,您可以充分利用NTFS ADS特性,同时也能有效防御潜在的恶意使用。