从零开始的内存马分析——如何骑马反杀(一)
字数 2044 2025-08-06 20:12:39

从零开始的内存马分析与反制技术

1. 内存马基础概念

内存马(Memory Shell)是一种驻留在服务器内存中的恶意后门程序,不依赖文件系统,具有极强的隐蔽性。与传统的Web Shell相比,内存马具有以下特点:

  • 无文件落地:不写入磁盘,仅存在于内存中
  • 高隐蔽性:难以通过常规文件扫描发现
  • 高持久性:通常绑定到服务器核心组件(如Servlet容器)
  • 动态加载:可通过网络随时更新功能

2. 文中提到的内存马技术分析

2.1 技术特点

根据描述,该内存马具有以下技术特征:

  1. 加密方式:使用了冰蝎(Behinder)的内存马基础框架,但套了一层XOR加密
  2. 存储位置:不同于常规session存储,改为application作用域存储
  3. 大马功能:具备类似哥斯拉(Godzilla)的功能特性
  4. 数据传输:包含数据偏移和数据回显机制

2.2 与常见工具的对比

特性 冰蝎(Behinder) 哥斯拉(Godzilla) 文中内存马
加密方式 AES 多种可选 XOR套层
存储位置 Session Session Application
通信协议 自定义 自定义 类似哥斯拉
数据回显
数据偏移

3. 内存马植入技术详解

3.1 常见植入方式

  1. Servlet型内存马

    • 通过动态注册Servlet实现
    • 绑定到特定URL路径
    • 示例代码:
      Servlet servlet = new MaliciousServlet();
      ServletRegistration.Dynamic dynamic = servletContext.addServlet("malicious", servlet);
      dynamic.addMapping("/malicious");
      dynamic.setLoadOnStartup(1);
      
  2. Filter型内存马

    • 通过动态注册Filter实现
    • 拦截所有请求
    • 示例代码:
      Filter filter = new MaliciousFilter();
      FilterRegistration.Dynamic dynamic = servletContext.addFilter("malicious", filter);
      dynamic.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "/*");
      
  3. 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 类哥斯拉通信特征

哥斯拉工具通信协议主要特点:

  1. 数据包结构

    • 固定头部(标识+数据长度)
    • 加密数据体
    • 可选的尾部校验
  2. 加密方式

    • AES/CBC/PKCS5Padding(默认)
    • XOR(文中提到的变种)
    • 其他可选加密算法
  3. 数据回显机制

    • 分块传输
    • 数据偏移控制
    • 错误重试机制

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 检测方法

  1. 行为检测

    • 监控动态组件注册行为
    • 检测异常URL映射
    • 跟踪内存中的类加载情况
  2. 流量检测

    • 识别固定通信模式
    • 检测异常加密流量
    • 分析HTTP请求特征
  3. 内存分析

    • 使用Java Agent技术检测内存中的恶意类
    • 分析JVM中加载的类列表
    • 检查Servlet/Filter注册表

5.2 反制技术

  1. 动态卸载技术

    // 卸载Filter示例
    FilterRegistration filterRegistration = servletContext.getFilterRegistration("malicious");
    if (filterRegistration != null) {
        filterRegistration.getClassName(); // 获取恶意类名
        // 通过反射清理相关资源
    }
    
  2. 流量劫持

    • 拦截内存马通信
    • 伪造响应数据
    • 获取攻击者控制端信息
  3. 反溯源技术

    • 记录攻击者IP和行为
    • 搭建蜜罐环境
    • 反向渗透攻击者主机

6. 实战案例分析

6.1 文中内存马分析步骤

  1. 定位内存马

    • 检查application作用域异常对象
    • 分析最近动态加载的类
    • 审查所有注册的Servlet/Filter
  2. 解密通信

    • 捕获网络流量
    • 提取XOR密钥
    • 解密攻击指令
  3. 功能分析

    • 反编译内存马类
    • 分析命令执行逻辑
    • 研究持久化机制

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. 防御建议

  1. 运行时防护

    • 部署RASP(运行时应用自我保护)解决方案
    • 监控关键API调用(如ClassLoader.defineClass)
    • 限制动态组件注册
  2. 环境加固

    • 定期重启服务
    • 使用Java Security Manager
    • 禁用不必要的JVM功能
  3. 持续监控

    • 建立内存马检测机制
    • 记录所有动态加载的类
    • 监控异常网络连接
  4. 应急响应

    • 准备内存分析工具(如MAT、Java Agent)
    • 制定内存马处置流程
    • 保留完整取证数据

8. 总结

本文分析了一种基于冰蝎改造的内存马变种,其特点包括XOR加密、application作用域存储和类哥斯拉通信协议。通过深入理解内存马的工作原理和实现技术,安全团队可以更有效地检测和防御这类高级威胁。防御内存马需要结合静态检测、动态监控和运行时防护等多种手段,建立纵深防御体系。

从零开始的内存马分析与反制技术 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路径 示例代码: Filter型内存马 : 通过动态注册Filter实现 拦截所有请求 示例代码: Controller型内存马 : 针对Spring框架 动态注册Controller 示例代码: 3.2 文中提到的存储位置变化 常规内存马多存储在session中,而文中样本存储在application作用域,这带来以下影响: 生命周期更长 :与应用程序同生命周期,不随会话结束而消失 访问范围更广 :所有会话均可访问 检测难度增加 :application对象通常不被列为重点监控对象 4. 内存马通信协议分析 4.1 类哥斯拉通信特征 哥斯拉工具通信协议主要特点: 数据包结构 : 固定头部(标识+数据长度) 加密数据体 可选的尾部校验 加密方式 : AES/CBC/PKCS5Padding(默认) XOR(文中提到的变种) 其他可选加密算法 数据回显机制 : 分块传输 数据偏移控制 错误重试机制 4.2 XOR加密实现 文中提到样本在冰蝎基础上套用XOR加密,典型实现: 5. 内存马检测与反制技术 5.1 检测方法 行为检测 : 监控动态组件注册行为 检测异常URL映射 跟踪内存中的类加载情况 流量检测 : 识别固定通信模式 检测异常加密流量 分析HTTP请求特征 内存分析 : 使用Java Agent技术检测内存中的恶意类 分析JVM中加载的类列表 检查Servlet/Filter注册表 5.2 反制技术 动态卸载技术 : 流量劫持 : 拦截内存马通信 伪造响应数据 获取攻击者控制端信息 反溯源技术 : 记录攻击者IP和行为 搭建蜜罐环境 反向渗透攻击者主机 6. 实战案例分析 6.1 文中内存马分析步骤 定位内存马 : 检查application作用域异常对象 分析最近动态加载的类 审查所有注册的Servlet/Filter 解密通信 : 捕获网络流量 提取XOR密钥 解密攻击指令 功能分析 : 反编译内存马类 分析命令执行逻辑 研究持久化机制 6.2 反制实现示例 7. 防御建议 运行时防护 : 部署RASP(运行时应用自我保护)解决方案 监控关键API调用(如ClassLoader.defineClass) 限制动态组件注册 环境加固 : 定期重启服务 使用Java Security Manager 禁用不必要的JVM功能 持续监控 : 建立内存马检测机制 记录所有动态加载的类 监控异常网络连接 应急响应 : 准备内存分析工具(如MAT、Java Agent) 制定内存马处置流程 保留完整取证数据 8. 总结 本文分析了一种基于冰蝎改造的内存马变种,其特点包括XOR加密、application作用域存储和类哥斯拉通信协议。通过深入理解内存马的工作原理和实现技术,安全团队可以更有效地检测和防御这类高级威胁。防御内存马需要结合静态检测、动态监控和运行时防护等多种手段,建立纵深防御体系。