【Web实战】内存马系列 Netty/WebFlux 内存马
字数 1062 2025-08-10 08:28:35
Netty/WebFlux 内存马技术分析与防御
一、内存马概述
内存马(Memory Shell)是一种驻留在内存中的恶意后门技术,与传统webshell相比具有以下特点:
- 无文件落地,仅存在于内存中
- 重启后失效
- 难以通过常规文件扫描检测
- 通常通过反序列化、JNDI注入等方式植入
二、Netty内存马技术细节
1. 技术原理
Netty内存马基于Netty的HTTP协议处理机制,通过动态修改Netty的ChannelPipeline实现恶意功能注入。
2. 实现条件
- 目标应用使用Netty框架
- 配置中包含
HttpServerCodec等HTTP协议解析器 - 能够执行代码注入(如通过反序列化漏洞)
3. 关键实现步骤
(1) 获取当前ChannelPipeline
Channel channel = ((ChannelOperations) ctx).channel();
ChannelPipeline pipeline = channel.pipeline();
(2) 动态添加恶意处理器
pipeline.addAfter("httpServerCodec", "evilHandler", new ChannelInboundHandlerAdapter() {
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) {
// 恶意逻辑处理
if (msg instanceof HttpRequest) {
HttpRequest request = (HttpRequest) msg;
// 解析请求参数
// 执行恶意命令
// 返回响应
}
ctx.fireChannelRead(msg);
}
});
(3) 恶意功能实现
- 命令执行
- 文件操作
- 内存webshell
- 代理转发
4. 技术限制
- 依赖HTTP协议处理器的存在(如HttpServerCodec)
- 不同Netty版本可能有差异
- 需要精确的pipeline位置控制
三、WebFlux内存马技术细节
1. 技术原理
利用Spring WebFlux的过滤机制,通过动态注册恶意WebFilter实现后门功能。
2. 关键实现步骤
(1) 获取WebHandler
WebHandler webHandler = (WebHandler) ReflectionUtils.getFieldValue(applicationContext, "webHandler");
(2) 获取现有filters
List<WebFilter> filters = (List<WebFilter>) ReflectionUtils.getFieldValue(webHandler, "filters");
(3) 添加恶意filter
filters.add(new EvilWebFilter());
(4) 恶意WebFilter实现
public class EvilWebFilter implements WebFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
// 检查恶意参数
// 执行恶意功能
// 返回响应或继续chain
}
}
四、检测与防御方案
1. 检测方法
Netty内存马检测
- 检查ChannelPipeline中的异常handler
- 监控pipeline动态修改行为
- 对比正常应用的handler列表
WebFlux内存马检测
- 检查WebFilter列表
- 监控WebFilter动态注册
- 对比正常应用的filter列表
2. 防御措施
代码层面
- 禁止动态修改pipeline或filter链
- 关键组件final化处理
- 实现运行时完整性校验
运行时防护
- RASP防护(运行时应用自保护)
- 内存行为监控
- 异常流量分析
安全管理
- 最小化依赖组件
- 及时修复漏洞
- 严格权限控制
五、技术演进方向
- 无协议依赖的内存马(不依赖HTTP处理器)
- 基于字节码操作的低侵入式注入
- 利用新版本框架特性的新型内存马
- 结合反射和JNI的更隐蔽实现
六、总结
Netty/WebFlux内存马代表了新一代无文件后门技术的发展趋势,其防御需要从框架机制理解、运行时监控和代码加固等多方面入手。安全人员应当深入理解底层原理,才能有效应对这类高级威胁。