样本分析 基于 rust 的恶意软件 SSLoad
字数 1402 2025-08-22 22:47:30
SSLoad恶意软件分析教学文档
1. SSLoad概述
SSLoad是一种基于Rust编写的恶意加载器/下载器,主要通过钓鱼电子邮件传播,用于渗透目标系统、执行侦察并将数据回传给攻击者。其主要特点包括:
- 采用多种加密方法和交付技术
- 具有反分析能力(反调试、反仿真)
- 多层字符串解密隐藏C2信息
- 被认为是恶意软件即服务(MaaS)的一部分
2. 感染链分析
2.1 初始感染阶段
感染通常从恶意文档开始,文档包含恶意宏代码:
Sub AutoClose()
Dim Document As Object
Set Document = CreateObject("MSXML2.DomDocument")
Document.loadXML UserForm1.Label1.Caption
Document.transformNode
End Sub
宏代码功能:
- 从UserForm1.Label1.Caption读取XML字符串
- 使用MSXML2.DomDocument加载并执行XML内容
2.2 第二阶段:PhantomLoader
恶意XML字符串实际上是经过混淆的JavaScript代码,解码后会:
- 使用Base64解码下一阶段Payload
- 将解码后的文件保存为%TEMP%\app.com
- 执行该文件
PhantomLoader特点:
- 伪装成"PatchUp.exe"(360 Total Security的合法模块)
- 使用加密代码存根
- 解密密钥硬编码在.text段
3. 代码解密技术
3.1 解密过程
解密使用XOR运算,关键点:
- 密钥:
"YKfPlrvLp0<Bas&J> %d uZNt@l" + "\x00" - 密钥长度:26字节
- 解密函数逻辑:
def decrypt_bytes(key, data, size):
enc_data_bytes = bytearray(data)
buffer = [0] * 0x5F5E100
for i in range(size):
idx = i + 665 * i * buffer[0]
enc_data_bytes[idx] ^= key[i % 26]
return bytes(enc_data_bytes)
3.2 IDA Pro解密脚本
完整解密脚本:
import idaapi
def read_bytes(start_ea, size):
data = idaapi.get_bytes(start_ea, size)
if data is None:
print(f"Failed to read bytes at {hex(start_ea)}")
return data
def decrypt_bytes(key, data, size):
enc_data_bytes = bytearray(data)
buffer = [0] * 0x5F5E100
for i in range(size):
idx = i + 665 * i * buffer[0]
enc_data_bytes[idx] ^= key[i % 26]
return bytes(enc_data_bytes)
def patch_bytes_in_idb(key, start_ea, size):
encrypted_data = read_bytes(start_ea, size)
if encrypted_data is None:
print("Failed to read encrypted data.")
return
decrypted_data = decrypt_bytes(key, encrypted_data, size)
idaapi.patch_bytes(start_ea, decrypted_data)
if __name__ == "__main__":
key_ascii = "YKfPlrvLp0<Bas&J> %d uZNt@l" + "\x00"
key_lst = [ord(c) for c in key_ascii]
start_ea = 0x449856
size = 2000
print(f"Decrypting and patching from address {hex(start_ea)} with size {size}...")
patch_bytes_in_idb(key_lst, start_ea, size)
print("[+] Done patching")
4. SSLoad核心功能分析
4.1 反分析技术
-
反调试检查:
- 检查PEB中的BeingDebugged标志
- 使用SystemFunction036生成随机目录名进行检查
-
环境检查:
- 检查%APPDATA%/Microsoft下的随机目录
- 确保单实例运行(通过互斥对象)
4.2 系统信息收集
收集的信息包括:
- 操作系统版本
- 用户名
- 主机名
- 系统架构
- 公共IP地址
- 域名信息
数据格式化为JSON发送给C2:
{
"version": "v1.4.",
"ip": "181.214.173.118",
"domain": "WORKGROUP",
"hostname": "USER-PC",
"arch": "x86",
"os_version": "Windows 6.1.7601",
"cur_user": "User",
"owner": "LosAngeles"
}
4.3 C2通信机制
-
初始通信:
- HTTP POST请求到/api/gateway
- 包含系统信息的JSON数据
-
服务器响应:
- 返回包含RC4密钥和唯一ID的JSON
{
"key": "niM4KBsKfD1cCxAkd",
"id": "73c7d3e8-5417-1181-b690-76de62a213f0"
}
- 后续通信:
- 使用Base64编码的RC4密钥加密通信
- 仅包含ID的空POST请求
- 接收指令格式:
{
"id": "459646db-d793-4a4f-ae38-e84fba1bbca6",
"job": "yxTaXXm+Sq+1wdwPzViKCs1l2N1OVMFkzF0E1JzHkB0IIL6IP1Wv3hVbsRLgI0CIid2rrVu7Qf46Mpjmh1TV82FYP/uhSZqYYAGbHPyRILynIY17YOfwEIQeFFL9"
}
4.4 命令执行
当"job"字段为"exe"时,表示下载并执行恶意负载:
- 从指定URL下载文件
- 在内存中执行
- 使用RC4加密通信
5. 分析技巧总结
-
宏分析:
- 关注AutoClose等自动执行函数
- 检查XML字符串加载和执行
-
代码解密:
- 查找硬编码密钥
- 识别XOR等简单加密算法
- 使用IDA Python脚本自动化解密
-
行为分析:
- 监控%TEMP%目录的文件创建
- 检查互斥对象创建
- 分析网络通信模式
-
反调试对抗:
- 修改PEB标志绕过检查
- 使用仿真环境避免检测
-
C2通信分析:
- 解码Base64数据
- 分析RC4加密流量
- 识别命令和控制结构
6. 防御建议
-
预防措施:
- 禁用Office宏执行
- 教育用户识别钓鱼邮件
- 部署高级威胁防护方案
-
检测方法:
- 监控MSXML2.DomDocument使用
- 检测异常%TEMP%目录文件执行
- 识别SSLoad特有的网络通信模式
-
响应措施:
- 隔离受感染主机
- 重置受影响凭据
- 检查横向移动迹象
-
取证分析:
- 收集内存转储分析解密代码
- 提取C2配置信息
- 分析下载的后续负载