提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
近期在做rasp相关的调研,对于开源代码openrasp和jrasp的源码做了相关研究,结合openrasp的技术文档,做了以下对于rasp远程调试的总结。
一、rasp
rasp分为动态注入和静态加载两种,这两种的调试方式基本一致,主要区别在于静态加载的方式,需要将rasp的启动参数提前写入到tomcat的启动脚本里面,以premian的方式启动的,而动态注入的启动方式是agentmain,就不需要添加启动参数了。
二、如何调试
1.premain方式
需要提前在tomcat的启动脚本,windows是bin/catalina.bat,linux则为bin/catalina.sh文件中添加rasp启动参数,
windows在 :execCmd 后面添加静态加载的参数:if “%ACTION%” == “start” set JAVA_OPTS=“-javaagent:%CATALINA_HOME%\rasp\rasp.jar”
%JAVA_OPTS%,然后添加调试信息:if “%ACTION%” == “start” set JAVA_OPTS=-agentlib:jdwp=transport=dt_socket,address=1043,server=y,suspend=y %JAVA_OPTS%这样做就是为了在静态加载的时候,先进入调试idea工具,然后再加载rasp代码,方便调试,这里的%CATALINA_HOME%是你环境变量存储的tomcat目录值,当然你也可以直接写绝对路径,只要能找到rasp的jar包即可,如下所示:
set JAVA_OPTS=“-javaagent:%CATALINA_HOME%\rasp\rasp.jar” %JAVA_OPTS%
set JAVA_OPTS=-agentlib:jdwp=transport=dt_socket,address=1043,server=y,suspend=y %JAVA_OPTS%
linux在elif [ “$1” = “start” ] ; then 后面添加静态加载参数:JAVA_OPTS=“-javaagent:${CATALINA_HOME}/rasp/rasp.jar ${JAVA_OPTS}” ,然后添加调试信息:JAVA_OPTS=“-agentlib:jdwp=transport=dt_socket,address=1043,server=y,suspend=y ${JAVA_OPTS}”,如下所示:
JAVA_OPTS=“-javaagent:${CATALINA_HOME}/rasp/rasp.jar
JAVA_OPTS=”-agentlib:jdwp=transport=dt_socket,address=1043,server=y,suspend=y ${JAVA_OPTS}"
2.agentmain方式
agentmain方式由于是动态注入的形式,所以不需要添加静态相关的jar包加载参数,只需要将上面的参数去掉静态加载参数,保留调试参数即可。这样在启动tomcat的时候,先启动idea,让环境提前加载,然后再尝试注入,这样就可以调试agentmain的代码了。
三、idea调试
在idea工具中,首先需要点击run -> Edit Configuration
点击 + 号,点击Remote JVM Debug
选择Debugger mode 选择attach to remote jvm调试,Transport选择socket,填写好你远程的主机ip及之前配置的调试信息端口号即可。