初识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操作- 可以使用
FindFirstStreamW和FindNextStreamW枚举$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-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特性,同时也能有效防御潜在的恶意使用。