远程Java应用的RASP调试教程
介绍
Java RASP是基于Java Agent技术实现的,而Java Agent代码无法独立启动,必须依赖于一个Java运行时程序才能运行。 如何调试一个Java Agent可以参考之前的一篇推文: 如何 debug JRASP Agent代码
在RASP开发的中后期,则需要在真实的Web服务器上测试。通常这些Java应用程序都运行在远端设备上,开发者本地不具备这样的环境。所以我们需要远程调试一个真实的Java应用,来解决bug或者验证RASP的防护效果。下面将以tomcat为例,介绍如何调试一个应用于远端Java应用的RASP程序。
环境条件
- 运行于Windows上的IDEA CE 2021.2(社区版)
- 运行于Linux上的apache-tomcat-9.0.0.m1
调试步骤
1. 设置IDEA远程调试
- 点击编辑运行配置
- 新建一个远程JVM调试模板
- 调试器模式设置为附加到远程JVM,传输方式选择Socket。IDEA还有ShareMemory方式的传输方式,这两者的本质都是用于传输远程调试信息。双机调试建议使用Socket模式。
- 设置目标Java应用所在机器的IP地址,以及一个未被使用的端口。
- 选择目标Java应用运行时JDK版本,将会自动生成一些启动参数。 不同的JDK版本的启动参数不同 ,所以需要注意这点。
- 复制自动生成的JVM启动参数,用于后续添加到目标Java应用的启动参数中。
- 设置需要调试的代码