远程Java应用的RASP调试教程

介绍

Java RASP是基于Java Agent技术实现的,而Java Agent代码无法独立启动,必须依赖于一个Java运行时程序才能运行。 如何调试一个Java Agent可以参考之前的一篇推文: 如何 debug JRASP Agent代码

在RASP开发的中后期,则需要在真实的Web服务器上测试。通常这些Java应用程序都运行在远端设备上,开发者本地不具备这样的环境。所以我们需要远程调试一个真实的Java应用,来解决bug或者验证RASP的防护效果。下面将以tomcat为例,介绍如何调试一个应用于远端Java应用的RASP程序。

环境条件

  1. 运行于Windows上的IDEA CE 2021.2(社区版)
  2. 运行于Linux上的apache-tomcat-9.0.0.m1

调试步骤

1. 设置IDEA远程调试

  1. 点击编辑运行配置
  2. 新建一个远程JVM调试模板
  3. 调试器模式设置为附加到远程JVM,传输方式选择Socket。IDEA还有ShareMemory方式的传输方式,这两者的本质都是用于传输远程调试信息。双机调试建议使用Socket模式。
  4. 设置目标Java应用所在机器的IP地址,以及一个未被使用的端口。
  5. 选择目标Java应用运行时JDK版本,将会自动生成一些启动参数。 不同的JDK版本的启动参数不同 ,所以需要注意这点。
  6. 复制自动生成的JVM启动参数,用于后续添加到目标Java应用的启动参数中。
  7. 设置需要调试的代码

2. 下断点

  1. 在刚刚设置的需要调试的代码中下断点。
  2. 断点的位置尽量高,而且最好是在逻辑简单且必经之地。因为RASP代码逻辑是由目标Java应用触发,而不是我们手动触发的。另外建议多下几个断点,以保障IDEA可以正确捕获断点。

3. 在目标应用中添加调试的启动参数

  1. 将IDEA自动生成的远程JVM启动参数调加到目标应用的启动参数中.
  2. 以tomcat为例:
    1. tomcat启动脚本目录: ${tomcat安装目录}/bin

      ${tomcat安装目录}/bin/catalina.sh
      ${tomcat安装目录}/bin/catalina.bat
      /usr/web/apache-tomcat-9.0.0.M1/bin/catalina.sh
      
    2. 修改tomcat启动脚本,添加启动参数。将刚刚复制的JVM启动参数以如下的方式添加至catalina.sh的最前面:

      • Linux:

        export JAVA_OPTS='-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005'
      • windows

        set JAVA_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
      • e.g

    3. 保存修改后的脚本

4. 启动目标Java应用

  1. 重启修改脚本后的Java应用
  2. 以tomcat为例:

5. 启动IDEA远程调试

  1. 选择刚刚新建的远程JVM调试配置并启动

  2. 如果显示连接成功,则表示双机调试通道已经建立。

  3. 如果显示连接失败或者连接超时,则需要排查原因:

    1. 检查双机是否可以ping通。

    2. 检查远端机器上的目标Java应用是否正确地监听在调试端口号上。可以使用如下命令:

      • lsof -i:端口号
      • e.g

    3. 通常远端服务器都设置了防火墙或者安全组,此时需要放开该调试端口号。

6. 对目标应用启动RASP注入

  1. 查看所有Java应用程序pid:

    jps
  2. 进入到jrasp安装目录

    cd /usr/local/jrasp/bin
  3. 手动注入jrasp

    ./jrasp.sh -p pid

7. 触发断点

  1. 断点触发与否主要是基于所要测试的代码和断点位置。一般来说,如果断点设置在AgentMain入口处,则jrasp注入的时候,IDEA即可捕获断点。

  2. 如果需要调试的代码和AgentMain函数不在一个模块中,则需要针对性的触发。双机调试建立之后,可能IDEA并未捕获断点,这是因为目前调试的RASP模块还未被执行。

  3. 此时需要针对性的触发断点。举两个例子:

    1. 如果测试的是RASP监控tomcat request请求模块的代码,那么直接浏览器访问tomcat服务器即可触发断点。
    2. 如果测试的是RASP对于RCE检测与阻断能力模块的代码,那么需要使用rce相关的exp攻击tomcat服务器;或者在tomcat服务器内部内置jsp脚本模拟RCE,然后通过浏览器网络请求调用该jsp脚本。

总结

RASP是依赖目标Java进程的,所以RASP的远程调试也是基于Java应用的远程调试。比如说调试Tomcat上的RASP,要先在Tomcat的JVM启动参数中添加远程调试的设置,RASP注入后,RASP的代码将作为Tomcat的一部分被JVM运行,可远程调试Tomcat即可远程调试RASP。补充一点,调试时无需Tomcat源码,在RASP的代码中设置断点,IDEA将自动捕获。但是,RASP大多时候需要hook Tomcat的API,如果无法精准地知道API及其函数描述,可以利用maven中添加对应的tomcat版本的依赖包,上述的远程调试技巧也可以定位到相关的tomcat源码中,这样子在调试堆栈中,既可以看RASP的代码,也可以看JDK源码和tomcat源码,调试过程更加清晰。

RASP | 远程Java应用的RASP调试教程相关推荐

  1. 【JAVA】Eclipse断点调试教程

    Eclipse断点调试教程 断点: breakpoint, 标记程序在这里暂停 断点调试的作用: 可以在程序运行中查看程序的执行流程 调试程序, 如查看变量的值 如何加断点: 在行号左边双击 创建/取 ...

  2. Win Linux Java 项目堆栈信息调试教程

    使用堆栈信息排查系统性能问题,多线程程序调优(因为这类问题往往都不会输出日志或日志输出定位代码排查的范围太大),堆栈信息对这类问题定位速度快而精准. 查询堆栈信息全文涉及到的指令 线程状态相关 常见到 ...

  3. c++ builder xe2 (Embarcadero rad studio) 远程调试 同样适用于 delphi 远程调试 教程

    c++ builder xe2 (Embarcadero rad studio) 远程调试 同样适用于 delphi 远程调试 教程 转载于:https://www.cnblogs.com/Littl ...

  4. java调试器jdb_Java调试教程-Java调试器(JDB)概述

    Java调试教程-Java调试器(JDB)概述 (2010-12-24 10:44:44) 标签: 杂谈 摘要 虽然现在有一些很好的调试工具,然而 Java 调试器 (JDB) 提供了一些优点.最重要 ...

  5. Chrome浏览器及调试教程

    ==>(微信公众号:IT知更鸟)欢迎关注<^>@<^> Chrome浏览器及调试教程 在web开发过程中,我们在写JavaScript脚本时难免会遇到各种bug,这时,我 ...

  6. rasp 系统_浅谈RASP技术攻防之基础篇

    引言 本文就笔者研究RASP的过程进行了一些概述,技术干货略少,偏向于普及RASP技术.中间对java如何实现rasp技术进行了简单的举例,想对大家起到抛砖引玉的作用,可以让大家更好的了解一些关于we ...

  7. springboot项目部署到服务器第三步部署java环境(最白教程)

    文章目录 1.需要安装上传文件的功能 2.查看防火墙状态 3.开始部署java 3.6添加环境变量 用到的一些安装包放度盘了csdn只能让我放400多兆.放不下啊 https://pan.baidu. ...

  8. 微信开发从入门到精通教程大全 资料大全 java和php版本;教程文档、代码、视频 微信商城实例

    一.官网 微信公众服务号申请.认证(开通支付)-微信开发图文教程 http://blog.csdn.net/wyx100/article/details/46944863 1.1 账号申请 https ...

  9. 远程代码注入及DLL注入教程(InlineHook)---植物大战僵尸为例

    远程代码注入及DLL注入教程 说明 ​ 本人刚开始学习逆向,不知道有没有动力学下深去,这一块也没有详细的实战教学,学多少就上传多少,希望能给想学的朋友一点帮助吧,本教程想通过植物大战僵尸这一经典游戏来 ...

最新文章

  1. Linux 下使用 NMON 分析系统性能
  2. IDEA 不能显示项目里的文件结构
  3. 苏宁的另类“存在感”
  4. 解决启动springboot项目时localhost一直显示Whitelabel Error Page和@ConfigurationProperties标红
  5. Ext Grid Json分页(asp.net)
  6. echarts scatter
  7. python练手经典100例-Python 的练手项目有哪些值得推荐?
  8. 资产管理界的风控大师-贝莱德BlackRock集团
  9. ContextCapture(Smart3D)网盘教程 直接下载
  10. 台式计算机操作系统的安装,Win10X电脑操作系统可以装在台式机吗?
  11. 一个微信关联管理多个腾讯云账号
  12. 文件管理android2.3,ES文件浏览器(ES File Explorer)v4.0.2.3 优化版-好用的安卓文件管理器...
  13. 深度学习 音乐分类_一种基于深度学习的音乐个性化分类推荐方法与流程
  14. 一加nfc门禁卡录入_一加7T手机如何开启NFC、复制门禁卡等功能
  15. 支付宝、微信(pc+h5)支付
  16. 电路实验——实验二 基尔霍夫定律的验证
  17. 微信小程序苹果iOS长按图片无法转发、发送给朋友、保存,它们无效的解决办法
  18. Firefox插件开发-入门篇
  19. 程序员必读书单1.0
  20. strncasecmp函数

热门文章

  1. Python爬虫案例:爬取必应壁纸
  2. OWASP-安全编码规范
  3. phpadmin安装到mysql中_PHPAdmin的安装和配置
  4. keil4单片机串口通信
  5. linux安装软件之./configure、make、make install 命令含义
  6. 求教吉他继续提高的方法
  7. docker的使用及原理
  8. Modbus的十大问题
  9. Stream Collectors - reducing
  10. 英语翻译的重点词汇词组