从零开始的内存马分析——如何骑马反杀(一)
字数 2044 2025-08-06 20:12:39
从零开始的内存马分析与反制技术
1. 内存马基础概念
内存马(Memory Shell)是一种驻留在服务器内存中的恶意后门程序,不依赖文件系统,具有极强的隐蔽性。与传统的Web Shell相比,内存马具有以下特点:
- 无文件落地:不写入磁盘,仅存在于内存中
- 高隐蔽性:难以通过常规文件扫描发现
- 高持久性:通常绑定到服务器核心组件(如Servlet容器)
- 动态加载:可通过网络随时更新功能
2. 文中提到的内存马技术分析
2.1 技术特点
根据描述,该内存马具有以下技术特征:
- 加密方式:使用了冰蝎(Behinder)的内存马基础框架,但套了一层XOR加密
- 存储位置:不同于常规session存储,改为application作用域存储
- 大马功能:具备类似哥斯拉(Godzilla)的功能特性
- 数据传输:包含数据偏移和数据回显机制
2.2 与常见工具的对比
| 特性 | 冰蝎(Behinder) | 哥斯拉(Godzilla) | 文中内存马 |
|---|---|---|---|
| 加密方式 | AES | 多种可选 | XOR套层 |
| 存储位置 | Session | Session | Application |
| 通信协议 | 自定义 | 自定义 | 类似哥斯拉 |
| 数据回显 | 有 | 有 | 有 |
| 数据偏移 | 无 | 有 | 有 |
3. 内存马植入技术详解
3.1 常见植入方式
-
Servlet型内存马:
- 通过动态注册Servlet实现
- 绑定到特定URL路径
- 示例代码:
Servlet servlet = new MaliciousServlet(); ServletRegistration.Dynamic dynamic = servletContext.addServlet("malicious", servlet); dynamic.addMapping("/malicious"); dynamic.setLoadOnStartup(1);
-
Filter型内存马:
- 通过动态注册Filter实现
- 拦截所有请求
- 示例代码:
Filter filter = new MaliciousFilter(); FilterRegistration.Dynamic dynamic = servletContext.addFilter("malicious", filter); dynamic.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "/*");
-
Controller型内存马:
- 针对Spring框架
- 动态注册Controller
- 示例代码:
RequestMappingHandlerMapping handlerMapping = applicationContext.getBean(RequestMappingHandlerMapping.class); Method method = MaliciousController.class.getMethod("handle"); RequestMappingInfo mappingInfo = RequestMappingInfo.paths("/malicious").build(); handlerMapping.registerMapping(mappingInfo, new MaliciousController(), method);
3.2 文中提到的存储位置变化
常规内存马多存储在session中,而文中样本存储在application作用域,这带来以下影响:
- 生命周期更长:与应用程序同生命周期,不随会话结束而消失
- 访问范围更广:所有会话均可访问
- 检测难度增加:application对象通常不被列为重点监控对象
4. 内存马通信协议分析
4.1 类哥斯拉通信特征
哥斯拉工具通信协议主要特点:
-
数据包结构:
- 固定头部(标识+数据长度)
- 加密数据体
- 可选的尾部校验
-
加密方式:
- AES/CBC/PKCS5Padding(默认)
- XOR(文中提到的变种)
- 其他可选加密算法
-
数据回显机制:
- 分块传输
- 数据偏移控制
- 错误重试机制
4.2 XOR加密实现
文中提到样本在冰蝎基础上套用XOR加密,典型实现:
public class XorUtils {
private static final String KEY = "random_key";
public static byte[] xor(byte[] data) {
byte[] keyBytes = KEY.getBytes();
byte[] result = new byte[data.length];
for (int i = 0; i < data.length; i++) {
result[i] = (byte) (data[i] ^ keyBytes[i % keyBytes.length]);
}
return result;
}
}
5. 内存马检测与反制技术
5.1 检测方法
-
行为检测:
- 监控动态组件注册行为
- 检测异常URL映射
- 跟踪内存中的类加载情况
-
流量检测:
- 识别固定通信模式
- 检测异常加密流量
- 分析HTTP请求特征
-
内存分析:
- 使用Java Agent技术检测内存中的恶意类
- 分析JVM中加载的类列表
- 检查Servlet/Filter注册表
5.2 反制技术
-
动态卸载技术:
// 卸载Filter示例 FilterRegistration filterRegistration = servletContext.getFilterRegistration("malicious"); if (filterRegistration != null) { filterRegistration.getClassName(); // 获取恶意类名 // 通过反射清理相关资源 } -
流量劫持:
- 拦截内存马通信
- 伪造响应数据
- 获取攻击者控制端信息
-
反溯源技术:
- 记录攻击者IP和行为
- 搭建蜜罐环境
- 反向渗透攻击者主机
6. 实战案例分析
6.1 文中内存马分析步骤
-
定位内存马:
- 检查application作用域异常对象
- 分析最近动态加载的类
- 审查所有注册的Servlet/Filter
-
解密通信:
- 捕获网络流量
- 提取XOR密钥
- 解密攻击指令
-
功能分析:
- 反编译内存马类
- 分析命令执行逻辑
- 研究持久化机制
6.2 反制实现示例
// 反制内存马示例代码
public class AntiMemoryShell {
public static void clean(ServletContext servletContext) {
// 清理恶意Filter
Map<String, ? extends FilterRegistration> filterRegistrations = servletContext.getFilterRegistrations();
filterRegistrations.forEach((name, reg) -> {
if (isMalicious(reg.getClassName())) {
try {
Field field = servletContext.getClass().getDeclaredField("filterRegistrations");
field.setAccessible(true);
@SuppressWarnings("unchecked")
Map<String, FilterRegistration> filters = (Map<String, FilterRegistration>) field.get(servletContext);
filters.remove(name);
} catch (Exception e) {
e.printStackTrace();
}
}
});
// 清理恶意Servlet
// 类似代码...
}
private static boolean isMalicious(String className) {
// 检测逻辑
return className.contains("malicious")
|| className.matches(".*[a-f0-9]{32}.*");
}
}
7. 防御建议
-
运行时防护:
- 部署RASP(运行时应用自我保护)解决方案
- 监控关键API调用(如ClassLoader.defineClass)
- 限制动态组件注册
-
环境加固:
- 定期重启服务
- 使用Java Security Manager
- 禁用不必要的JVM功能
-
持续监控:
- 建立内存马检测机制
- 记录所有动态加载的类
- 监控异常网络连接
-
应急响应:
- 准备内存分析工具(如MAT、Java Agent)
- 制定内存马处置流程
- 保留完整取证数据
8. 总结
本文分析了一种基于冰蝎改造的内存马变种,其特点包括XOR加密、application作用域存储和类哥斯拉通信协议。通过深入理解内存马的工作原理和实现技术,安全团队可以更有效地检测和防御这类高级威胁。防御内存马需要结合静态检测、动态监控和运行时防护等多种手段,建立纵深防御体系。