样本分析 基于 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

宏代码功能:

  1. 从UserForm1.Label1.Caption读取XML字符串
  2. 使用MSXML2.DomDocument加载并执行XML内容

2.2 第二阶段:PhantomLoader

恶意XML字符串实际上是经过混淆的JavaScript代码,解码后会:

  1. 使用Base64解码下一阶段Payload
  2. 将解码后的文件保存为%TEMP%\app.com
  3. 执行该文件

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 反分析技术

  1. 反调试检查

    • 检查PEB中的BeingDebugged标志
    • 使用SystemFunction036生成随机目录名进行检查
  2. 环境检查

    • 检查%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通信机制

  1. 初始通信

    • HTTP POST请求到/api/gateway
    • 包含系统信息的JSON数据
  2. 服务器响应

    • 返回包含RC4密钥和唯一ID的JSON
{
  "key": "niM4KBsKfD1cCxAkd",
  "id": "73c7d3e8-5417-1181-b690-76de62a213f0"
}
  1. 后续通信
    • 使用Base64编码的RC4密钥加密通信
    • 仅包含ID的空POST请求
    • 接收指令格式:
{
  "id": "459646db-d793-4a4f-ae38-e84fba1bbca6",
  "job": "yxTaXXm+Sq+1wdwPzViKCs1l2N1OVMFkzF0E1JzHkB0IIL6IP1Wv3hVbsRLgI0CIid2rrVu7Qf46Mpjmh1TV82FYP/uhSZqYYAGbHPyRILynIY17YOfwEIQeFFL9"
}

4.4 命令执行

当"job"字段为"exe"时,表示下载并执行恶意负载:

  1. 从指定URL下载文件
  2. 在内存中执行
  3. 使用RC4加密通信

5. 分析技巧总结

  1. 宏分析

    • 关注AutoClose等自动执行函数
    • 检查XML字符串加载和执行
  2. 代码解密

    • 查找硬编码密钥
    • 识别XOR等简单加密算法
    • 使用IDA Python脚本自动化解密
  3. 行为分析

    • 监控%TEMP%目录的文件创建
    • 检查互斥对象创建
    • 分析网络通信模式
  4. 反调试对抗

    • 修改PEB标志绕过检查
    • 使用仿真环境避免检测
  5. C2通信分析

    • 解码Base64数据
    • 分析RC4加密流量
    • 识别命令和控制结构

6. 防御建议

  1. 预防措施

    • 禁用Office宏执行
    • 教育用户识别钓鱼邮件
    • 部署高级威胁防护方案
  2. 检测方法

    • 监控MSXML2.DomDocument使用
    • 检测异常%TEMP%目录文件执行
    • 识别SSLoad特有的网络通信模式
  3. 响应措施

    • 隔离受感染主机
    • 重置受影响凭据
    • 检查横向移动迹象
  4. 取证分析

    • 收集内存转储分析解密代码
    • 提取C2配置信息
    • 分析下载的后续负载
SSLoad恶意软件分析教学文档 1. SSLoad概述 SSLoad是一种基于Rust编写的恶意加载器/下载器,主要通过钓鱼电子邮件传播,用于渗透目标系统、执行侦察并将数据回传给攻击者。其主要特点包括: 采用多种加密方法和交付技术 具有反分析能力(反调试、反仿真) 多层字符串解密隐藏C2信息 被认为是恶意软件即服务(MaaS)的一部分 2. 感染链分析 2.1 初始感染阶段 感染通常从恶意文档开始,文档包含恶意宏代码: 宏代码功能: 从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字节 解密函数逻辑: 3.2 IDA Pro解密脚本 完整解密脚本: 4. SSLoad核心功能分析 4.1 反分析技术 反调试检查 : 检查PEB中的BeingDebugged标志 使用SystemFunction036生成随机目录名进行检查 环境检查 : 检查%APPDATA%/Microsoft下的随机目录 确保单实例运行(通过互斥对象) 4.2 系统信息收集 收集的信息包括: 操作系统版本 用户名 主机名 系统架构 公共IP地址 域名信息 数据格式化为JSON发送给C2: 4.3 C2通信机制 初始通信 : HTTP POST请求到/api/gateway 包含系统信息的JSON数据 服务器响应 : 返回包含RC4密钥和唯一ID的JSON 后续通信 : 使用Base64编码的RC4密钥加密通信 仅包含ID的空POST请求 接收指令格式: 4.4 命令执行 当"job"字段为"exe"时,表示下载并执行恶意负载: 从指定URL下载文件 在内存中执行 使用RC4加密通信 5. 分析技巧总结 宏分析 : 关注AutoClose等自动执行函数 检查XML字符串加载和执行 代码解密 : 查找硬编码密钥 识别XOR等简单加密算法 使用IDA Python脚本自动化解密 行为分析 : 监控%TEMP%目录的文件创建 检查互斥对象创建 分析网络通信模式 反调试对抗 : 修改PEB标志绕过检查 使用仿真环境避免检测 C2通信分析 : 解码Base64数据 分析RC4加密流量 识别命令和控制结构 6. 防御建议 预防措施 : 禁用Office宏执行 教育用户识别钓鱼邮件 部署高级威胁防护方案 检测方法 : 监控MSXML2.DomDocument使用 检测异常%TEMP%目录文件执行 识别SSLoad特有的网络通信模式 响应措施 : 隔离受感染主机 重置受影响凭据 检查横向移动迹象 取证分析 : 收集内存转储分析解密代码 提取C2配置信息 分析下载的后续负载