Java内存马——Interceptor型的三种注入
💡
原文中文,约33800字,阅读约需81分钟。
📝
内容提要
Interceptor型内存马针对Spring MVC框架,通过动态注入恶意拦截器执行命令,隐蔽性高。注入方式包括获取ApplicationContext、动态注册拦截器和修改字节码,具有路径无关性和深度集成特点,难以检测。防御措施包括RASP检测和内存扫描。
🎯
关键要点
- Interceptor型内存马针对Spring MVC框架,通过动态注入恶意拦截器执行命令,隐蔽性高。
- 注入方式包括获取ApplicationContext、动态注册拦截器和修改字节码,具有路径无关性和深度集成特点,难以检测。
- 防御措施包括RASP检测和内存扫描。
- 恶意拦截器通过preHandle、postHandle或afterCompletion方法执行恶意代码。
- 动态注册拦截器是最常用的注入方式,利用Spring MVC提供的InterceptorRegistry。
- 修改已有拦截器的字节码是一种更隐蔽的注入方式,直接在合法拦截器中插入恶意代码。
- 注册为HandlerMethodArgumentResolver或ControllerAdvice可以在请求处理链中执行恶意代码,具有高隐蔽性。
- 检测Interceptor型内存马的难点在于无文件落地、深度集成和动态性。
- RASP检测模型可以监控新增拦截器,内存扫描技术可以检测特定类的存在。
- 技术演进趋势包括模块化注入和无反射注入,增强隐蔽性和适应性。
- 总结技术本质为通过动态修改Spring MVC核心组件插入恶意拦截器,达到攻击目的。
❓
延伸问答
Interceptor型内存马是如何工作的?
Interceptor型内存马通过动态注入恶意拦截器到Spring MVC的请求处理链中,利用preHandle、postHandle或afterCompletion方法执行恶意代码,具有高隐蔽性。
有哪些常见的注入方式?
常见的注入方式包括动态注册拦截器、修改已有拦截器的字节码和注册为HandlerMethodArgumentResolver或ControllerAdvice。
如何检测Interceptor型内存马?
检测Interceptor型内存马的难点在于无文件落地和深度集成,可以通过RASP检测模型监控新增拦截器和内存扫描技术检测特定类的存在。
动态注册拦截器的步骤是什么?
动态注册拦截器的步骤包括获取ApplicationContext、定位RequestMappingHandlerMapping、反射获取InterceptorRegistry、创建恶意HandlerInterceptor实例并将其注入到拦截器列表中。
修改已有拦截器的字节码有什么优缺点?
优点是极致隐蔽性,恶意代码直接寄生在合法拦截器中,难以被发现;缺点是技术门槛高,可能破坏原有功能,并需要初始注入点。
Interceptor型内存马的防御措施有哪些?
防御措施包括RASP检测、内存扫描技术和注册冻结技术,以监控和限制拦截器的动态注册。
➡️