RASP之内存马后渗透浅析
字数 2119 2025-08-30 06:50:35
RASP内存马后渗透技术深度分析
1. RASP技术概述
RASP(Runtime Application Self-Protection)是一种运行时应用程序自我保护技术,于2014年提出。其核心特点包括:
- 实现方式:通过Instrumentation编写Agent,在Agent的premain和agentmain方法中加入检测类(通常继承ClassFileTransformer)
- 监控机制:当程序运行时,检测字节码文件中是否包含敏感类文件(如ProcessImpl等)
- 核心API:
ClassFileTransformer:允许在类加载前或类重新定义时对字节码进行转换Instrumentation:提供启动时代理和重新定义类的能力
与传统WAF对比:
- 实现更为底层
- 规则制定更简单
- 攻击行为识别更精准
2. 题目环境分析
2.1 题目背景
- 环境:SpringBoot应用
- 提供文件:JAR包和RASP组件
- 漏洞点:
/user/info接口的data参数可传入Base64编码的恶意字节码 - 依赖:包含Commons Collections(CC)依赖
2.2 安全限制
SecurityObjectInputStream类中的黑名单- RASP插件禁用的黑名单
3. 利用链分析
3.1 可用链分析
发现以下组件未被禁用:
- LazyMap
- DefaultedMap
- Hashtable
3.2 链构造思路
采用CC7前半段+CC3后半段的组合链,利用DefaultedMap的特性:
DefaultedMap有readObject()方法- 反序列化触发
Hashtable#readObject() - 传入的key是
DefaultedMap实例 - 调用
reconstitutionPut(table, key, value)
3.3 关键调用流程
DefaultedMap继承AbstractMapDecorator,调用其equals方法map属性通过DefaultedMap传递- 通过
DefaultedMap.decorate静态方法将HashMap传给map属性 - 最终调用
HashMap的equals方法(继承自AbstractMap)
3.4 AbstractMap.equals关键判断
- 是否为同一对象
- 对象的运行类型
- Map中元素个数(需两个以上)
- 判断元素的key和value内容是否相同
3.5 利用点
当value是transformer实例时,会调用transform方法。可利用:
InstantiateTransformer:transformer的实例化类TrAXFilter:其构造方法会调用TransformerImpl的newTransformer从而加载类
4. 内存马构造与利用
4.1 初始内存马问题
直接使用内存马只能回显"you_are_successful!",无法执行命令
4.2 RASP绕过方法
方法一:修改配置参数
分析rasp-engine.jar中的com.baidu.openrasp.config.Config类:
- 禁用Hook:修改
disableHooks属性 - 白名单绕过:修改
hookWhiteAll和cloudSwitch值 - Hook处理器:修改
HookHandler
方法二:双重内存马注入
需要打两次内存马,较为复杂
4.3 文件操作技术
文件写入+读取
// 示例代码框架
public void fileOperation() {
// 文件写入逻辑
// 文件读取逻辑
}
命令执行技术
方法1:创建新进程绕过
// UNIX/Linux系统
ProcessBuilder pb = new ProcessBuilder(cmd);
Process p = pb.start();
// 获取输出流等操作
方法2:Hook点利用
// 使用ProcessImpl或Unsafe类
// Win下使用ProcessImpl
4.4 完整内存马实现
命令执行+回显解决方案
解决NullPointerException问题:
// 初始化静态变量
static {
// 初始化代码
}
// 完整流程
public void executeCommand() {
// 获取PID
// 初始化命令执行
// 转换输出流
// 输出结果
}
UNIX/Linux系统实现
// 使用ProcessImpl获取PID
// 执行命令并处理输入输出流
5. 完整利用流程
-
构造恶意序列化链:
- 组合CC7和CC3链
- 使用
DefaultedMap和InstantiateTransformer - 最终触发
TrAXFilter构造方法
-
绕过RASP检测:
- 修改RASP配置参数
- 或采用双重内存马注入
-
内存马注入:
- 实现命令执行和文件操作功能
- 处理回显问题
-
利用过程:
- 通过
/user/info接口传入恶意Base64编码 - 触发反序列化漏洞
- 加载内存马
- 执行系统命令或文件操作
- 通过
6. 防御建议
-
RASP配置加固:
- 保护关键配置参数
- 防止运行时修改
-
代码层面:
- 严格限制反序列化操作
- 使用安全的ObjectInputStream实现
-
依赖管理:
- 及时更新存在漏洞的库(如Commons Collections)
-
运行时监控:
- 监控可疑的类加载行为
- 检测内存马注入行为
7. 总结
本文详细分析了基于RASP环境下的内存马后渗透技术,重点包括:
- RASP工作原理和绕过方法
- Commons Collections反序列化链的构造
- 内存马的实现和优化
- 完整的利用流程和防御建议
该技术展示了在安全防护日益增强的环境下,攻击者如何通过深入分析防护机制和利用框架特性实现有效攻击,同时也强调了多层次防御的重要性。