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

从零开始的内存马分析——如何骑马反杀(二)

1. 内存马提取后的分析准备

1.1 分析环境搭建

  • 隔离环境:使用虚拟机或专用分析机器,确保与生产环境隔离
  • 工具准备
    • 反编译工具(JD-GUI、JADX、FernFlower)
    • 动态分析工具(Burp Suite、Wireshark)
    • 调试工具(JDB、IDEA Remote Debug)
    • 内存分析工具(VisualVM、Eclipse MAT)

1.2 流量模拟注意事项

  • 流量捕获:使用Wireshark或tcpdump捕获原始流量
  • 流量清洗:去除敏感信息(认证凭证、个人数据)
  • 协议分析:确定通信协议(HTTP/HTTPS/RMI等)

2. 内存马运行逻辑分析

2.1 静态分析

  1. 反编译字节码
    jadx -d output_dir memory_malware.jar
    
  2. 关键类识别
    • 查找Filter/Servlet/Controller等Web组件
    • 分析动态类加载逻辑(ClassLoader相关代码)
    • 查找命令执行相关类(Runtime.exec(), ProcessBuilder)

2.2 动态行为分析

  1. HTTP请求处理流程

    • 检查内存马如何拦截请求
    • 分析参数解析逻辑(GET/POST参数、Headers)
    • 跟踪响应修改逻辑
  2. 命令执行路径

    // 典型的内存马命令执行代码段
    String cmd = request.getParameter("cmd");
    Process p = Runtime.getRuntime().exec(cmd);
    // 读取执行结果并返回
    

2.3 持久化机制分析

  1. 注册位置

    • Servlet容器动态注册
    • Filter链插入
    • Spring Controller注册
  2. 自保护机制

    • 反卸载逻辑
    • 心跳检测
    • 多副本互备

3. 安全分析技巧

3.1 动态调试技巧

  1. 远程调试配置

    java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar app.jar
    
  2. 关键断点设置

    • 类加载点(ClassLoader.defineClass)
    • 命令执行点(Runtime.exec)
    • HTTP请求处理入口

3.2 内存分析技巧

  1. 堆转储分析

    jmap -dump:live,format=b,file=heap.hprof <pid>
    
  2. 查找恶意组件

    • 搜索非常规类名
    • 分析动态生成的类
    • 跟踪可疑的引用链

4. 反制措施

4.1 内存马清除

  1. 手工清除步骤

    • 定位恶意组件内存地址
    • 通过反射调用注销方法
    • 清理相关引用
  2. 工具辅助清除

    // 示例:通过反射移除Filter
    Field filtersField = applicationContext.getClass().getDeclaredField("filters");
    filtersField.setAccessible(true);
    List<Filter> filters = (List<Filter>) filtersField.get(applicationContext);
    // 移除恶意Filter
    

4.2 防护措施

  1. 运行时防护

    • 部署RASP(Runtime Application Self-Protection)
    • 启用安全管理器
    • 限制反射调用
  2. 检测方案

    • 定期内存扫描
    • 行为监控(异常类加载、命令执行)
    • 流量审计(异常请求模式)

5. 分析报告编写要点

  1. 技术细节

    • 内存马注入方式
    • 触发条件
    • 影响范围
  2. IoC(失陷指标)

    • 特征字符串
    • 网络通信特征
    • 内存特征
  3. 修复建议

    • 短期缓解措施
    • 长期加固方案
    • 监控策略调整

附录:常用命令速查

  1. 查找JVM加载的类

    jcmd <pid> VM.classes
    
  2. 查看HTTP请求处理链

    jstack <pid> | grep -A 10 'FilterChain'
    
  3. 动态类加载监控

    -verbose:class
    

通过以上系统化的分析方法,可以有效解剖内存马的运行机制,为防御和反制提供可靠依据。

从零开始的内存马分析——如何骑马反杀(二) 1. 内存马提取后的分析准备 1.1 分析环境搭建 隔离环境 :使用虚拟机或专用分析机器,确保与生产环境隔离 工具准备 : 反编译工具(JD-GUI、JADX、FernFlower) 动态分析工具(Burp Suite、Wireshark) 调试工具(JDB、IDEA Remote Debug) 内存分析工具(VisualVM、Eclipse MAT) 1.2 流量模拟注意事项 流量捕获 :使用Wireshark或tcpdump捕获原始流量 流量清洗 :去除敏感信息(认证凭证、个人数据) 协议分析 :确定通信协议(HTTP/HTTPS/RMI等) 2. 内存马运行逻辑分析 2.1 静态分析 反编译字节码 : 关键类识别 : 查找Filter/Servlet/Controller等Web组件 分析动态类加载逻辑(ClassLoader相关代码) 查找命令执行相关类(Runtime.exec(), ProcessBuilder) 2.2 动态行为分析 HTTP请求处理流程 : 检查内存马如何拦截请求 分析参数解析逻辑(GET/POST参数、Headers) 跟踪响应修改逻辑 命令执行路径 : 2.3 持久化机制分析 注册位置 : Servlet容器动态注册 Filter链插入 Spring Controller注册 自保护机制 : 反卸载逻辑 心跳检测 多副本互备 3. 安全分析技巧 3.1 动态调试技巧 远程调试配置 : 关键断点设置 : 类加载点(ClassLoader.defineClass) 命令执行点(Runtime.exec) HTTP请求处理入口 3.2 内存分析技巧 堆转储分析 : 查找恶意组件 : 搜索非常规类名 分析动态生成的类 跟踪可疑的引用链 4. 反制措施 4.1 内存马清除 手工清除步骤 : 定位恶意组件内存地址 通过反射调用注销方法 清理相关引用 工具辅助清除 : 4.2 防护措施 运行时防护 : 部署RASP(Runtime Application Self-Protection) 启用安全管理器 限制反射调用 检测方案 : 定期内存扫描 行为监控(异常类加载、命令执行) 流量审计(异常请求模式) 5. 分析报告编写要点 技术细节 : 内存马注入方式 触发条件 影响范围 IoC(失陷指标) : 特征字符串 网络通信特征 内存特征 修复建议 : 短期缓解措施 长期加固方案 监控策略调整 附录:常用命令速查 查找JVM加载的类 : 查看HTTP请求处理链 : 动态类加载监控 : 通过以上系统化的分析方法,可以有效解剖内存马的运行机制,为防御和反制提供可靠依据。