针对一个JAVA套CS马的详细分析
字数 1256 2025-08-24 07:48:09

Java套CS木马详细分析与防御指南

一、样本概述

该样本是一种新型的Java套Cobalt Strike木马,具有以下特点:

  • 检出率极低(VT检测率低)
  • 使用Java虚拟机(JVM)加载执行ShellCode
  • 采用多层加密技术
  • 最终在内存中解密并执行Cobalt Strike payload

二、样本结构分析

1. 初始入口点

  • 通过LNK快捷方式文件启动攻击链
  • LNK文件命令行执行以下操作:
    javaw.exe -jar [指定路径]\eaio.jar
    

2. 文件组成

解压后样本包含:

  • LNK启动文件
  • libcurl.dat(加密数据文件)
  • eaio.jar(恶意Java程序)

三、技术细节分析

1. 第一阶段:Java加载器(eaio.jar)

反编译后主要功能:

// 1. 读取加密数据
File encryptedFile = new File("libcurl.dat");
byte[] encryptedData = Files.readAllBytes(encryptedFile.toPath());

// 2. 获取解密密钥(从特定位置或硬编码)
String key = getDecryptionKey(); 

// 3. 解密数据
byte[] shellcode = decryptData(encryptedData, key);

// 4. 加载执行ShellCode
loadAndExecute(shellcode);

2. 解密函数分析

样本使用自定义解密算法,主要特征:

  • 异或操作与位移组合
  • 多层解密流程
  • 密钥可能来自:
    • 文件特定位置
    • 硬编码在jar中
    • 外部网络获取

3. ShellCode加载技术

通过JVM直接加载执行ShellCode:

// 获取Unsafe实例绕过安全检查
Field f = Unsafe.class.getDeclaredField("theUnsafe");
f.setAccessible(true);
Unsafe unsafe = (Unsafe) f.get(null);

// 分配内存并写入ShellCode
long address = unsafe.allocateMemory(shellcode.length);
unsafe.copyMemory(shellcode, 0, null, address, shellcode.length);

// 创建函数指针并执行
((Runnable) () -> {
    unsafe.invokeCleaner(ByteBuffer.allocateDirect(0));
    unsafe.putAddress(address, address);
}).run();

4. ShellCode分析

解密后的ShellCode执行流程:

  1. 自解密第二阶段payload
  2. 内存加载Cobalt Strike beacon
  3. 连接C2服务器

关键特征:

  • 无文件落地
  • 全内存操作
  • 使用反射和Unsafe类绕过安全限制

四、Cobalt Strike Payload分析

最终payload是标准的Cobalt Strike beacon,具有:

  • HTTP/HTTPS/DNS通信
  • 进程注入能力
  • 横向移动模块
  • 持久化机制

五、检测与防御方案

1. 检测指标(IOCs)

  • LNK文件特征:

    • 包含非常规的javaw.exe调用
    • 指向异常路径的jar文件
  • 文件特征:

    • libcurl.dat异常数据文件
    • eaio.jar的特定类结构
  • 网络特征:

    • Cobalt Strike默认证书特征
    • 特定JA3/JA3S指纹

2. 防御措施

企业防护:

  1. 应用控制:

    • 限制javaw.exe执行非标准路径的jar文件
    • 禁止非授权程序使用Unsafe类
  2. 内存检测:

    • 部署能够检测JVM内存中恶意代码的EDR方案
    • 监控Java进程的异常内存分配
  3. 网络防护:

    • 拦截Cobalt Strike的C2通信特征
    • 监控异常的JVM网络连接

终端防护:

# PowerShell检测脚本示例
Get-WmiObject Win32_Process -Filter "name='javaw.exe'" | Where-Object {
    $_.CommandLine -match "-jar" -and 
    $_.CommandLine -notmatch "公司授权路径"
} | Select-Object CommandLine,ProcessId

Java安全配置:

  1. 在java.security文件中添加:
# 禁止不受信任代码使用Unsafe
jdk.sun.misc.Unsafe=deny
  1. 启用Java安全管理器:
java -Djava.security.manager -Djava.security.policy==/path/to/secure.policy

六、分析与研究工具

  1. 静态分析:

    • JD-GUI或FernFlower反编译jar
    • PEiD检测ShellCode特征
  2. 动态分析:

    • Java Agent进行运行时监控
    • JVMTI工具跟踪类加载
  3. 内存分析:

    • Volatility分析Java进程内存
    • Rekall检测内存中的ShellCode

七、总结

该样本代表了新一代的Java恶意软件趋势:

  • 利用合法Java功能实现恶意操作
  • 多层加密规避静态检测
  • 内存驻留规避文件扫描
  • 使用JVM作为攻击平台绕过传统防御

防御关键在于:

  • 深度监控JVM行为
  • 限制Java危险功能
  • 多层防御体系覆盖攻击链各环节
Java套CS木马详细分析与防御指南 一、样本概述 该样本是一种新型的Java套Cobalt Strike木马,具有以下特点: 检出率极低(VT检测率低) 使用Java虚拟机(JVM)加载执行ShellCode 采用多层加密技术 最终在内存中解密并执行Cobalt Strike payload 二、样本结构分析 1. 初始入口点 通过LNK快捷方式文件启动攻击链 LNK文件命令行执行以下操作: 2. 文件组成 解压后样本包含: LNK启动文件 libcurl.dat(加密数据文件) eaio.jar(恶意Java程序) 三、技术细节分析 1. 第一阶段:Java加载器(eaio.jar) 反编译后主要功能: 2. 解密函数分析 样本使用自定义解密算法,主要特征: 异或操作与位移组合 多层解密流程 密钥可能来自: 文件特定位置 硬编码在jar中 外部网络获取 3. ShellCode加载技术 通过JVM直接加载执行ShellCode: 4. ShellCode分析 解密后的ShellCode执行流程: 自解密第二阶段payload 内存加载Cobalt Strike beacon 连接C2服务器 关键特征: 无文件落地 全内存操作 使用反射和Unsafe类绕过安全限制 四、Cobalt Strike Payload分析 最终payload是标准的Cobalt Strike beacon,具有: HTTP/HTTPS/DNS通信 进程注入能力 横向移动模块 持久化机制 五、检测与防御方案 1. 检测指标(IOCs) LNK文件特征: 包含非常规的javaw.exe调用 指向异常路径的jar文件 文件特征: libcurl.dat异常数据文件 eaio.jar的特定类结构 网络特征: Cobalt Strike默认证书特征 特定JA3/JA3S指纹 2. 防御措施 企业防护: 应用控制: 限制javaw.exe执行非标准路径的jar文件 禁止非授权程序使用Unsafe类 内存检测: 部署能够检测JVM内存中恶意代码的EDR方案 监控Java进程的异常内存分配 网络防护: 拦截Cobalt Strike的C2通信特征 监控异常的JVM网络连接 终端防护: Java安全配置: 在java.security文件中添加: 启用Java安全管理器: 六、分析与研究工具 静态分析: JD-GUI或FernFlower反编译jar PEiD检测ShellCode特征 动态分析: Java Agent进行运行时监控 JVMTI工具跟踪类加载 内存分析: Volatility分析Java进程内存 Rekall检测内存中的ShellCode 七、总结 该样本代表了新一代的Java恶意软件趋势: 利用合法Java功能实现恶意操作 多层加密规避静态检测 内存驻留规避文件扫描 使用JVM作为攻击平台绕过传统防御 防御关键在于: 深度监控JVM行为 限制Java危险功能 多层防御体系覆盖攻击链各环节