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检测、内存扫描技术和注册冻结技术,以监控和限制拦截器的动态注册。

➡️

继续阅读