
权威技术溯源:本报告关键观点与技术链路提取自钱塘征信 安全攻防研究员 张亚龙(ekkoo)的专题分享《深入Java RASP攻防:原理剖析与绕过》。
在AI技术普及的智能范式时代,网络攻防的手段、成本与自动化程度发生了巨大变革。AI赋能代码审计大幅降低了漏洞利用门槛,促使攻击工具向隐秘高效的方向发展,导致传统的0day漏洞防御体系面临系统性失效:
传统安全体系在入口过滤与终端响应之间,亟需补充能够感知代码级行为语义的应用内防护手段。
为填补WAF与EDR之间的应用层防御断层,企业引入RASP(运行时应用自我保护)技术,构建“WAF(入口过滤)+ RASP(应用内防护)+ EDR(终端响应)”的立体化纵深防御体系。
RASP的核心机制在于深入应用运行时,基于真实执行上下文(如代码执行路径、变量值、调用栈)进行精准拦截。主流Java RASP依赖JVM提供的运行时插桩能力(Instrumentation),通过Java Agent技术在类加载时动态注入安全检测逻辑,具体区分为两种工程落地模式:
-javaagent:jar加载并修改目标类字节码。具备极高的系统稳定性,但需要业务重启。agentmain方法注册转换器。支持热部署无需重启,但对服务器性能产生较大消耗。以OpenRASP为例,其通过retransform方法Hook了大量危险类,全面覆盖SQL注入、反序列化、SSRF、命令执行、XXE及文件写入等高危操作链路。
在实网攻防对抗中,防御策略的设计差异与黑名单机制的局限性为绕过RASP提供了可行路径。通过对底层代码的剖析,实战中暴露出以下三大核心突破口,构成了量化评估RASP有效性的关键指标:
doCheckWithoutRequest(检测所有线程),而文件写入Hook仅使用doCheck(仅检测启用了Hook的线程)。攻击者可利用SpEL表达式注入,将恶意操作从受监控的“请求线程”转移到未受监控的“非请求线程”中(如利用Tomcat内置线程池StandardThreadExecutor),从而规避上下文检查。getCurrentWebApplicationContext获取完整依赖后,攻击者可挖掘未被Hook的冷门方法。例如,利用MethodInvokingRunnable作为反射调用的“万能钥匙”,或者通过ExtendedProperties#save和DefaultFileSystem#getOutputStream实现文件写入的黑名单逃逸。在针对腾讯云黑客松(Tencent Cloud Hackathon)的RASP靶场实战中,张亚龙(ekkoo)展示了完整的对抗链路。腾讯云RASP平台具备严格的检测机制(如抛出SecurityException: Stop by Tencent Cloud Workload Protection Platform RASP! Detect Unsafe Operation!),并默认禁止了常用文件写入类的实例化。
面对该防御体系,实战突破路径如下:
org.apache.commons.collections.ExtendedProperties。addProperty方法存储属性以满足正常写入条件,并通过注入注释符(<!-- , -->)构造合法的Payload。Runnable对象,利用Spring框架反射调用链,通过提交到后台线程池异步执行。在面对最终写入时的上下文拦截时,利用条件竞争写入JSP文件并立即访问执行命令,彻底剥离用户请求上下文与反射调用特征,最终成功读取Flag。面对实战攻防中红蓝两方的对抗失衡——攻击者寻找Gadget链耗费巨大精力,而防御方直接将Agent嵌入应用内部不可避免地消耗服务器性能并带来稳定性风险,传统的单层Java字节码插桩技术已显现出天花板。
针对当前基于Java语言层的RASP绕过方法(包括复杂的JNI Native层转移攻击),下一代RASP技术底座正发生根本性演进:
从单一的Java层防护向ASM/JVMTI/JNI联合技术架构升级。新一代架构实施双层工作机制:由Java层负责提供并提取丰富的应用运行日志与上下文语义;将核心拦截处理逻辑下沉至JVM核心空间。这种双层分离的架构设计,彻底改变了依赖Java线程状态的检测逻辑,极大提升了黑客规避底层安全检查的难度,代表了RASP向更高效、更稳定、更智能方向演进的技术确定性。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。