Skip to content

RASP自身安全性

一、关键方法加固

利用方式1: 反射调用全局关闭方法

尝试在业务类中反射调用RASP关闭的方法,该方式简单粗暴,利用频率较高,反射操作代码如下:

java
Class<?> bridgeClass=Class.forName("com.jrasp.agent.bridge120.Bridge",false,null);
// 调用清除全局处理器的clean方法
Method cleanMethod=bridgeClass.getMethod("clean");
cleanMethod.setAccessible(true);
cleanMethod.invoke(null);

反射调用抛出异常 java.lang.SecurityException: this method is not allowed to invoke.,调用失败,阻止RASP功能被关闭; NoSuchMethodException

利用方式2: 反射关闭全局检测开关

反射关闭RASP检测开关:

java
Class<?> securityStateKeeper=Class.forName("com.jrasp.agent.bridge120.SecurityStateKeeper",false,null);
// 反射关闭全局检测开关
Field checkDisableField=securityStateKeeper.getDeclaredField("checkDisable");
checkDisableField.setAccessible(true);
checkDisableField.set(null,true);

调用报错:java.lang.NoSuchFieldException: checkDisable

NoSuchFieldException

利用方式3: 直接调用关闭的方法(反射的绕过)

step1: 在业务工程中引入jrasp-bridge依赖(scope=provided):

java
<dependency>
    <groupId>com.jrasp</groupId>
    <artifactId>jrasp-bridge</artifactId>
    <version>1.2.5</version>
    <scope>provided</scope>   
</dependency>

step2: 直接调用静态方法:

java
com.jrasp.agent.bridge120.SecurityStateKeeper.setCheckDisable(true);

抛出异常java.lang.SecurityException: this method is not allowed to invoke.MethodNotAllowedInvoke.jpg

利用方式3: 反射RASP其他方法

新增反射模块,禁用com.jrasp.等包下类的反射操作

二、代码防止篡改

利用方式:类的转换与重新定义

防护方式1: 监控hook类的转换与重新定义

java
2024-10-19 23:16:08.900  [WARN] [jrasp-agent] 85376 --- [catalina-exec-99] transform class more than once, class: java/lang/ClassLoader, loader: null

防护方式2: agent加载白名单

agentMainClassWhiteList.jpg

白名单在管理端配置

防护方式3: 禁止rasp类重新转换与定义

block_rasp_class_redefine.jpg

三、方法调用者hash校验

checkCaller

四、检测算法黑白名单hash

  • 安全风险:虽然磁盘上是加密,如果在运行时dump类,还是比较容易绕过

反序列化插件源码中的黑名单字段如下:

originlist.jpg

当设置@RaspValue注解的属性hash = true 时,jrasp编译插件将字符串转为MD5值,转换过程对用户透明,用户无需关注;配置更新时自动转换为hash值;

运行时JDK反序列化黑名单列表:

md5hash

五、配置和jar包磁盘加密

  • 模块jar包磁盘加密
  • 安装目录下的config/config.json文件,默认加密,如果需要明文存储在本地,需要在管理端开启对应配置;
  • 密钥在daemon编译时写入;如果需要更新密钥,请重新编译新的daemon然后替换整个二进制文件;

六、关键方法下沉到JNI

  • 加解密算法、hash计算算法

七、通信过程加密

鉴于ebpf技术已经破解了ssl协议的解密逻辑,即无需证书可截获https通信内容,为保障日志/配置传输安全性,对http/socket body进行加密。

  • daemon与agent通信加密与验签
  • daemon与server通信加密与验签

八、核心代码混淆

code_obsus.jpg

九、安装jrasp的主机必须授权

  • 机器码与主机绑定,防止将jrasp复制到非授权环境强行破解