记一次RASP Demo分析

admin 2022年3月15日22:09:54评论55 views字数 1099阅读3分39秒阅读模式

点击蓝字 关注我们

前言


前段时间学习了一下RASP的基础知识,想去找一个实例进行分析学习,为了方便学习,从git上找了一个师傅的demo进行分析学习。

demo

链接:https://github.com/xbeark/javaopenrasp

理清思路


这里我们需要了解RASP一般的实现思路,在有类被ClassLoader加载时候,所以会把该类的字节码先交给类ClassTransformer的 transform方法处理,该方法通过配置文件判断该类是否为我们需要hook的类,如果是则交给ASM或JAVASSIST类进行处理,当触发了我们需要hook的类,我们会在方法的开头或者结尾插入进入检测函数的字节码。把hook好的字节码返回,从而载入虚拟机。

入口


先看一下文件结构,接着发现这里的入口是Agent的premain方法,通过init函数对配置文件main.config进行了导入,之后就是熟悉的调用transform方法。

记一次RASP Demo分析

记一次RASP Demo分析

记一次RASP Demo分析

记一次RASP Demo分析


判断类


这里通过的配置导入,判断当前加载的类是否为我们需要hook的类,如果是则进入下面的代码块,这里是自定了一个Reflections类,这里我们看一下这里用到的createVisitorIns的实现代码,可以看到这里是通过反射返回public和private的构造器。通过这里决定了调用visitor的哪个类文件。

记一次RASP Demo分析

记一次RASP Demo分析


进一步判断


这里可以看到继上一步对class的判断,这里进一步对函数进行了判断,通过函数签名判断是否是我们需要hook的函数,如果是则进行下一步对字节码的操作。

记一次RASP Demo分析


字节码操作


大师傅在这里一共写了三个对字节码的操作,这里我们就只对DesrializationVisitorAdapter进行的分析学习写出,其他两个也就一样的思路了,可以看到这里对字节码进行操作的是ASM,先new了一个方法,再用dup进行压栈,之后利用INVOKESPECIAL对类进行初始化操作,然后调用自定义的filter,对其进行一个判断。剩下的字节码,放到下一个板块分析。

记一次RASP Demo分析


filter分析


这里我们前往filters这个目录,查找我们之前调用到的方法,发现这里是通过对配置信息与其对比,利用上文的new Label()进行和visitJumpInsn(IFNE, l92),对黑名单里面的值进行一次比较,如果比较比较成功,则继续运行,因为mod是black,则报出风险。如果运行不成功,因为是try板块,则爆出无风险。

记一次RASP Demo分析


结尾


因为第一次对RASP进行分析,会有点不足之处,希望大家多多担待。另外,感谢github上xbeark师傅的demo。


原文始发于微信公众号(Th0r安全):记一次RASP Demo分析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年3月15日22:09:54
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   记一次RASP Demo分析https://cn-sec.com/archives/828949.html

发表评论

匿名网友 填写信息