针对一个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执行流程:
- 自解密第二阶段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网络连接
终端防护:
# PowerShell检测脚本示例
Get-WmiObject Win32_Process -Filter "name='javaw.exe'" | Where-Object {
$_.CommandLine -match "-jar" -and
$_.CommandLine -notmatch "公司授权路径"
} | Select-Object CommandLine,ProcessId
Java安全配置:
- 在java.security文件中添加:
# 禁止不受信任代码使用Unsafe
jdk.sun.misc.Unsafe=deny
- 启用Java安全管理器:
java -Djava.security.manager -Djava.security.policy==/path/to/secure.policy
六、分析与研究工具
-
静态分析:
- JD-GUI或FernFlower反编译jar
- PEiD检测ShellCode特征
-
动态分析:
- Java Agent进行运行时监控
- JVMTI工具跟踪类加载
-
内存分析:
- Volatility分析Java进程内存
- Rekall检测内存中的ShellCode
七、总结
该样本代表了新一代的Java恶意软件趋势:
- 利用合法Java功能实现恶意操作
- 多层加密规避静态检测
- 内存驻留规避文件扫描
- 使用JVM作为攻击平台绕过传统防御
防御关键在于:
- 深度监控JVM行为
- 限制Java危险功能
- 多层防御体系覆盖攻击链各环节