当前位置: 首页 > news >正文

学习黑客5 分钟深入浅出理解Alternate Data Streams (ADS)

5 分钟深入浅出理解Alternate Data Streams (ADS) 🔍

大家好!今天我们将探索Windows NTFS文件系统中一个鲜为人知却非常强大的特性——交替数据流(Alternate Data Streams,简称ADS)。这个隐藏在明处的功能既是系统设计的巧妙之处,也是安全专业人员需要充分了解的重要概念。对于TryHackMe等平台上的安全学习者,理解ADS既能帮助发现隐藏的恶意代码,也能学习高级的渗透测试技巧。让我们开始这场数据流的探索之旅吧!🚀

1. 什么是交替数据流(ADS)?💡

“在NTFS的世界中,文件远比它表面上看起来的要复杂得多。”

**交替数据流(ADS)**是NTFS文件系统的一个特性,允许文件包含多个数据"流"或内容部分。当你通常查看一个文件时,你看到的是其主数据流(也称为未命名流或默认流)。但一个文件可以有多个额外的命名流,每个流可以包含完全不同的内容。

ADS的历史与设计目的:

时间点发展目的
1993年随NTFS在Windows NT 3.1引入兼容Macintosh HFS的资源分叉
1995年+扩展应用存储文件元数据和附加信息
2000年+系统应用增加Internet区域标记、缩略图缓存等
现代Windows广泛应用存储元数据、安全信息和兼容性数据

ADS的基本概念:

文件结构
├── 主数据流 (默认,无名称)
│   └── 这是你通常看到的文件内容
└── 交替数据流 (可以有多个)├── stream1 - 隐藏内容1├── stream2 - 隐藏内容2└── streamN - 隐藏内容N

在文件资源管理器中,你看不到这些额外的流,但它们确实存在并占用磁盘空间。

2. ADS的基本操作与命令 ⌨️

交互式操作ADS需要特定的命令和语法:

创建和操作ADS:

# 创建一个包含ADS的文件
echo "这是主数据流内容" > test.txt
echo "这是隐藏在ADS中的内容" > test.txt:hidden.txt# 查看主数据流内容
type test.txt                # 显示"这是主数据流内容"# 查看ADS内容
more < test.txt:hidden.txt   # 显示"这是隐藏在ADS中的内容"
powershell Get-Content -Path test.txt:hidden.txt

查看文件的ADS:

# 使用dir命令的/r参数列出ADS
dir /r                      # 会显示文件后跟":stream_name:$DATA"# PowerShell方式
Get-Item test.txt -Stream *  # 列出所有流

复制ADS内容:

# 将ADS提取为独立文件
more < test.txt:hidden.txt > extracted.txt# 复制整个文件包括所有ADS
copy test.txt new.txt       # 在NTFS卷之间保留ADS

删除ADS:

# 删除特定ADS
del test.txt:hidden.txt     # 较旧系统可能不支持
powershell Remove-Item -Path test.txt -Stream hidden.txt# 完全删除文件及其所有ADS
del test.txt

3. 系统中的ADS应用 🖥️

Windows自身在多种场景中使用ADS存储重要信息:

ADS用途描述例子
区域标识符标记从互联网下载的文件file.exe:Zone.Identifier
摘要信息文档属性和元数据document.docx:SummaryInformation
缩略图缓存存储文件预览图像image.jpg:thumbnails
Office文档信息文档作者、版本等document.docx:DocumentSummaryInformation
资源内容图标、图像等资源.exe.dll文件中的资源

区域标识符详解:

当你从互联网下载文件时,Windows添加:Zone.Identifier流来标记文件来源:

[ZoneTransfer]
ZoneId=3
ReferrerUrl=https://example.com/
HostUrl=https://example.com/download/file.exe

ZoneId值代表不同的安全区域:

  • 0: 本地计算机
  • 1: 本地内联网
  • 2: 受信任站点
  • 3: 互联网
  • 4: 受限站点

4. ADS在安全领域的重要性 🔒

ADS在网络安全中具有双重意义——既可用于恶意目的,也是防御的重要知识点:

潜在威胁场景:

威胁类型描述示例
数据隐藏隐藏敏感或恶意数据将机密文档隐藏在普通图片的ADS中
恶意代码存储存储可执行恶意程序在合法文件ADS中保存恶意脚本
规避检测绕过基本安全扫描某些防病毒软件不检查ADS
持久化机制维持系统访问在系统文件ADS中植入自启动代码
取证对抗阻碍事件响应将证据隐藏在难以发现的流中

执行ADS中的代码:

# 在ADS中存储脚本并执行
echo calc > innocent.txt:evil.bat
wmic process call create "cmd.exe /c C:\path\to\innocent.txt:evil.bat"# 从ADS加载DLL
rundll32 C:\path\to\normal.txt:evil.dll,DllMain# PowerShell执行存储在ADS中的代码
powershell -command "Get-Content -Path 'C:\path\to\normal.txt:evil.ps1' | Invoke-Expression"

5. 在TryHackMe和安全测试中的ADS应用 🏆

ADS在安全测试和CTF挑战中有多种应用场景:

场景1:隐藏工具和数据

# 在一个看似无害的文件中隐藏渗透工具
type mimikatz.exe > legitimate.txt:mimi.exe# 在渗透测试中提取并执行
more < legitimate.txt:mimi.exe > mimikatz.exe
.\mimikatz.exe

场景2:查找隐藏线索(CTF挑战)

# 搜索可能包含flag的ADS
dir /r /s C:\* | findstr ":$DATA"# 检查特定文件是否包含ADS
dir /r suspicious.txt# 提取可能的flag
more < suspicious.txt:hidden_flag.txt

场景3:检测恶意ADS(蓝队防御)

# 查找包含可执行扩展名的ADS
dir /r /s C:\ | findstr ":\.exe" | findstr ":$DATA"
dir /r /s C:\ | findstr ":\.dll" | findstr ":$DATA"
dir /r /s C:\ | findstr ":\.ps1" | findstr ":$DATA"# 检查常见隐藏位置
dir /r /s "C:\ProgramData" | findstr ":$DATA"
dir /r /s "C:\Users" | findstr ":$DATA"

6. ADS检测与取证 🕵️

识别和分析ADS对于安全专业人员至关重要:

检测工具与方法:

工具/方法描述用途
dir /r内置命令基本ADS检测
streams.exe (Sysinternals)微软官方工具高级ADS检测和删除
PowerShell Get-Item -Stream内置PowerShell cmdlet详细流信息分析
LADS(List Alternate Data Streams)第三方工具扫描整个系统的ADS
Autopsy/FTK取证工具深入取证分析

使用Sysinternals Streams工具:

# 安装Sysinternals Suite或单独下载Streams工具# 检查单个文件
streams.exe -s suspicious.txt# 扫描整个目录
streams.exe -s C:\Users\username\Documents# 删除所有ADS
streams.exe -d suspicious.txt

PowerShell检测脚本示例:

# 检查目录中所有文件的ADS
function Find-ADS {param ([string]$Path = ".")Get-ChildItem -Path $Path -Recurse -File | ForEach-Object {$streams = Get-Item -Path $_.FullName -Stream * | Where-Object { $_.Stream -ne ':$DATA' }if ($streams) {[PSCustomObject]@{File = $_.FullNameStreams = $streams.Stream -join ', '}}}
}# 使用示例
Find-ADS -Path "C:\Users\username\Documents"

7. ADS的限制与技术细节 📝

理解ADS的技术限制对于有效使用和检测非常重要:

限制/考虑描述影响
仅限NTFS只在NTFS文件系统上可用复制到FAT32/exFAT会丢失ADS
网络传输某些方法不保留ADS通过网络共享可能丢失ADS
备份限制部分备份软件不保留ADS可能导致信息丢失
电子邮件限制电子邮件附件通常不保留ADS影响通过邮件传输的文件
压缩限制ZIP等压缩格式不保留ADS打包后丢失ADS数据
大小限制理论上与文件系统相同实际受磁盘空间限制

ADS内部存储:

NTFS如何存储ADS:

  • 每个流在MFT(主文件表)中有单独的记录
  • 小流直接存储在MFT记录中
  • 大流在独立的簇中分配,类似普通文件
  • 所有流共享文件的安全描述符

8. ADS高级技术与示例 🔬

以下是一些更高级的ADS应用技术:

创建并运行PowerShell脚本:

# 创建存储在ADS中的PowerShell脚本
$code = @'
function Get-SystemInfo {$os = Get-WmiObject -Class Win32_OperatingSystem$comp = Get-WmiObject -Class Win32_ComputerSystem[PSCustomObject]@{ComputerName = $comp.NameOS = $os.CaptionVersion = $os.VersionManufacturer = $comp.ManufacturerModel = $comp.Model}
}
Get-SystemInfo
'@$code | Set-Content -Path "C:\normal.txt:infogather.ps1"# 执行ADS中的脚本
powershell -command "Get-Content -Path 'C:\normal.txt:infogather.ps1' | Invoke-Expression"

利用ADS存储网络通信:

# 将工具嵌入ADS
certutil -encode payload.exe encoded.txt
type encoded.txt > image.jpg:payload.txt# 在目标机器上解码并执行
more < image.jpg:payload.txt > encoded.txt
certutil -decode encoded.txt payload.exe
.\payload.exe

使用COM对象操作ADS:

# 使用COM对象操作ADS
$file = "test.txt"
$stream = "secret"
$data = "This is hidden data"$adoStream = New-Object -ComObject ADODB.Stream
$adoStream.Type = 2  # Text
$adoStream.Charset = "ASCII"
$adoStream.Open()
$adoStream.WriteText($data)
$adoStream.SaveToFile("$file`:$stream", 2)
$adoStream.Close()

9. ADS防御策略和最佳实践 🛡️

保护系统免受恶意ADS利用的策略:

检测策略:

  1. 定期扫描系统

    # 创建计划任务定期扫描ADS
    # 使用如下脚本作为基础
    $suspiciousPaths = @("C:\Windows", "C:\Program Files", "C:\ProgramData", "C:\Users")
    foreach ($path in $suspiciousPaths) {dir /r /s $path | findstr ":$DATA" | Out-File -Append "C:\Security\ads_scan.log"
    }
    
  2. 监控ADS创建

    • 配置审计策略监控文件创建和修改
    • 特别关注含有敏感扩展名(如.exe、.dll、.ps1)的ADS
  3. 使用EDR解决方案

    • 部署能监控ADS活动的终端检测与响应解决方案
    • 配置规则以检测可疑ADS操作

防御措施:

措施描述实现方法
应用程序控制限制可执行代码运行AppLocker或Windows Defender应用程序控制
脚本块日志记录记录PowerShell执行Enable-PSScriptBlockLogging
AMSI集成扫描脚本内容确保防病毒软件支持AMSI
委派执行预防阻止常见的ADS执行方法限制wmic、rundll32等工具使用
定期ADS清理删除非系统ADS使用streams.exe -d定期清理

10. 合法使用ADS的创新方法 💼

ADS不仅用于安全和攻击,也有许多合法创新用途:

元数据存储:

# 存储文件作者信息
echo "Created by John Doe on $(Get-Date)" > document.docx:author_info.txt# 添加版本历史
echo "v1.2 - Updated section 3" > document.docx:version_history.txt

自定义标记:

# 为文件添加标签
echo "Confidential" > financial_report.xlsx:classification.txt# 添加处理指南
echo "Print double-sided, shred after use" > contract.pdf:handling.txt

多语言内容:

# 存储不同语言版本
echo "Hello World" > greeting.txt
echo "Bonjour le monde" > greeting.txt:french.txt
echo "Hola Mundo" > greeting.txt:spanish.txt

11. ADS常见问题排查 🔧

使用ADS时可能遇到的问题及其解决方案:

问题可能原因解决方案
ADS无法创建非NTFS分区
权限问题
确认文件系统类型
检查当前用户权限
ADS丢失文件复制到非NTFS分区
使用不支持ADS的工具
使用保留ADS的复制方法
选择支持ADS的工具
无法执行ADS执行策略限制
文件未正确创建
检查系统安全策略
验证ADS是否正确创建
ADS检测工具失效工具过时
需要管理员权限
更新到最新版本
使用管理员权限运行
Dir /R不显示ADS命令使用错误
没有ADS存在
确保命令语法正确
使用其他工具验证

故障排除步骤:

# 检查文件系统类型
fsutil fsinfo volumeinfo C:# 验证ADS创建是否成功
Get-Item -Path "file.txt" -Stream * | Format-Table# 测试ADS读取
try {$content = Get-Content -Path "file.txt:stream.txt" -ErrorAction StopWrite-Host "读取成功: $content"
} catch {Write-Host "读取失败: $_"
}

12. ADS速查表 📋

操作命令行方式PowerShell方式
创建ADSecho data > file.txt:stream.txt`“data”
读取ADSmore < file.txt:stream.txtGet-Content -Path file.txt:stream.txt
列出ADSdir /r file.txtGet-Item -Path file.txt -Stream *
删除ADS(无直接命令)Remove-Item -Path file.txt -Stream stream.txt
执行ADS中脚本多种方法Get-Content -Path file.txt:script.ps1 | Invoke-Expression
复制保留ADSrobocopy /copyall source destCopy-Item (有限支持)
全系统ADS扫描dir /r /s C:\ | findstr ":$DATA"需要自定义脚本

13. TryHackMe上ADS挑战和学习路径 🧠

利用ADS知识解决TryHackMe挑战:

解题思路:

  1. 文件隐藏挑战

    • 任何看似普通的文件都可能包含ADS
    • 始终使用dir /r检查可疑文件
    • 记得使用more <或PowerShell提取ADS内容
  2. 恶意软件分析

    • 检查下载的文件是否包含:Zone.Identifier以了解来源
    • 分析可执行文件是否有可疑ADS
    • 查找可能被用于执行ADS的命令模式
  3. 权限提升挑战

    • 检查系统文件是否有被修改的ADS
    • 查找可能用于持久化的ADS
    • 分析计划任务是否与ADS交互

练习思路:

# 1. 在CTF环境中搜索所有文本文件的ADS
dir /r /s C:\*.txt | findstr ":$DATA"# 2. 检查系统目录中的可疑ADS
dir /r /s C:\Windows\System32\*.exe | findstr ":$DATA"# 3. 分析找到的ADS
more < "C:\suspicious_file.txt:hidden_stream.txt"# 4. 如果是可执行内容,提取它
more < "C:\suspicious_file.txt:malware.exe" > extracted_malware.exe

14. 总结与进阶学习 🌟

交替数据流是NTFS的一个强大特性,既有合法用途,也有安全隐患:

核心要点:

  • ✅ ADS允许在一个文件中存储多个独立的数据内容
  • ✅ 仅在NTFS文件系统上可用,复制到其他文件系统会丢失ADS
  • ✅ Windows系统自身使用ADS存储区域标识符等信息
  • ✅ ADS可被用于隐藏数据和执行恶意代码
  • ✅ 使用特殊命令和工具可以检测和管理ADS

进阶学习方向:

  • 📘 深入研究NTFS文件系统结构中ADS的存储机制
  • 🔐 探索ADS在数字取证中的更多应用
  • 🛡️ 开发更高级的ADS检测和预防策略
  • 📚 学习将ADS与其他安全概念结合使用的方法
  • 🧪 在实验环境中测试ADS的各种行为和限制

在网络安全领域,了解ADS既可以帮助你发现隐藏的威胁,也可以理解某些高级持久化技术的工作原理。继续学习,不断实践,提升你的安全技能!


http://www.xdnf.cn/news/413677.html

相关文章:

  • 国产大模型「五强争霸」:决战AGI,谁主沉浮?
  • Fiber
  • SQL数据库核心实用技巧总结
  • SaaS备份的必要性:厂商之外的数据保护策略
  • Ethereum Pectra 的升级
  • 在文档里如何引用在线SVG甘特图
  • 普通IT的股票交易成长史--20250512复盘
  • [计算机网络]网络层
  • 安装hadoop
  • MySQL 事务(一)
  • 01 安装CANoe
  • 运算放大器相关的电路
  • 【Python爬虫】01-Python爬虫概述
  • js相关内容
  • 实数完备性定理互证1
  • 在选择合适的实验室铁地板和铸铁试验平板,帮分析​
  • ApiPost工具详细介绍及使用教程
  • Java中String字符串
  • 【蓝桥杯嵌入式】【模块】二、LED相关配置及代码模板
  • 关于输入法重码率的计算
  • web 自动化之 Unittest 应用:测试报告装饰器断言
  • 基于大模型研究技术方案清单
  • 【markdown】介绍如何在markdown中绘制流程图
  • 在嵌入式调试中IAR提示Fatal error: CPU did not power up Session aborted!怎么回事?怎么解决?
  • C++中类中const知识应用详解
  • PyCharm历史版本下载说明
  • Java大师成长计划之第20天:Spring Framework基础
  • Qt/C++面试【速通笔记九】—视图框架机制
  • EHS 安全管理有效落地,五步实施方法解析
  • 基于SpringBoot的博客系统测试报告