RASP技术

1 什么是 RASP

Runtime application self-protection,运行时应用自我保护技术,与应用程序融为一体,实时监测和阻断攻击,注入到被保护应用的服务中提供函数级别的实时防护,可以在不更新策略以及不升级被保护应用代码的情况下检测/防护未知漏洞。具备自我保护功能,不需要人为干涉。

2 RASP 的原理

在 Java 技术栈下,RASP 引擎以 javaagent 的形式实现,并运行在 JVM 之上。在应⽤服务器启动的时候,RASP 引擎借助 JVM 自身提供的 instrumentation 技术,通过替换字节码的方式对关键类方法进行挂钩,结合上下文、参数污染、语义引擎等方式检测攻击。比如:数据库操作、文件读写、命令执行等,当服务器发生攻击,就会触发这些 HOOK 点,然后 RASP agent 就可以获取到函数的参数(文件名、要执行的命令等)

RASP 的技术原理与 APM是⼀样的,只是挂钩的函数要少很多。

3 环境搭建

3.1 Tomcat 安装

参考 https://www.cnblogs.com/yocichen/p/10478431.html

3.2 安装RASP客户端

参考 https://rasp.baidu.com/doc/install/manual/tomcat.html

  1. 进入 rasp 目录
  2. 执行 java -jar RaspInstall.jar -install C:\Program" "Files\Apache" "Software" "Foundation\Tomcat" "8.5
  3. 注意以上指令中的双引号是为了防止空格导致的出错
  4. 随后自动安装完成

image-20210730162617832

  1. 重启 Tomcat 服务即可生效

3.3 安装测试用例

参考 https://rasp.baidu.com/doc/install/testcase.html

  1. 这里下载 vulns.war

  2. 将下载后的 war 包复制到 webapps 目录如 C:\Program Files\Apache Software Foundation\Tomcat 8.5\webapps

  3. 随后会在 webapps 目录自动生成 vulns 目录,通过浏览器访问 http://localhost:8080/vulns/

image-20210730163254941

3.4 开启拦截(单机)

参考 https://rasp.baidu.com/doc/setup/standalone.html#block-malicious

  1. 修改官方插件 D:\Software\App\rasp-java\rasp-2021-02-07\rasp\plugins
  2. 将 all_log 改为 false

image-20210730164219455

4 Java RASP 架构说明$^{4,5}$​​

在服务器启动时,可动态的修改Java字节码,对敏感操作的函数进行挂钩。当服务器发生攻击,就会触发这些Hook点,此时RASP agent就可以获取到函数的参数。

RASP以Java Instrumentation的方式工作在JVM层,它主要通过hook可能引发漏洞的关键函数,在这些关键函数执行之前添加安全检查,根据上下文和关键函数的参数等信息判断请求是否为恶意请求,并终止或继续执行流。


  • Java Instrumentation

    允许开发者访问从JVM中加载的类,并且允许对它的字节码做修改,加入我们自己的代码,这些都是在运行时完成的。(无需担心这个机制带来的安全问题,因为它也同样遵从适用于Java类和相应的类加载器的安全策略。)

    允许开发者添加自定义的字节码转换器来对Java字节码进行自定义的操作转化,从而实现在不修改源代码的情况下,实现AOP。

OpenRASP的开发者选择了ASM这个框架,相比其他的框架,ASM的优点是更加底层、更加灵活,功能也更加丰富。

5 参考

  1. 开源应用运行时自我保护解决方案 - OpenRASP - 百度安全 (baidu.com)
  2. Rasp 技术介绍与实现 (seebug.org)
  3. https://www.freebuf.com/articles/web/197823.html
  4. Java 版本 - OpenRASP 官方文档 - 开源自适应安全产品 (baidu.com)

  5. https://paper.seebug.org/513/



----------- 本文结束 -----------




0%