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
- 进入 rasp 目录
- 执行
java -jar RaspInstall.jar -install C:\Program" "Files\Apache" "Software" "Foundation\Tomcat" "8.5
- 注意以上指令中的双引号是为了防止空格导致的出错
- 随后自动安装完成
- 重启 Tomcat 服务即可生效
3.3 安装测试用例
参考 https://rasp.baidu.com/doc/install/testcase.html
这里下载 vulns.war
将下载后的 war 包复制到
webapps
目录如C:\Program Files\Apache Software Foundation\Tomcat 8.5\webapps
- 随后会在
webapps
目录自动生成vulns
目录,通过浏览器访问http://localhost:8080/vulns/
3.4 开启拦截(单机)
参考 https://rasp.baidu.com/doc/setup/standalone.html#block-malicious
- 修改官方插件
D:\Software\App\rasp-java\rasp-2021-02-07\rasp\plugins
- 将 all_log 改为 false
4 Java RASP 架构说明$^{4,5}$
在服务器启动时,可动态的修改Java字节码,对敏感操作的函数进行挂钩。当服务器发生攻击,就会触发这些Hook点,此时RASP agent就可以获取到函数的参数。
RASP以Java Instrumentation的方式工作在JVM层,它主要通过hook可能引发漏洞的关键函数,在这些关键函数执行之前添加安全检查,根据上下文和关键函数的参数等信息判断请求是否为恶意请求,并终止或继续执行流。
Java Instrumentation
允许开发者访问从JVM中加载的类,并且允许对它的字节码做修改,加入我们自己的代码,这些都是在运行时完成的。(无需担心这个机制带来的安全问题,因为它也同样遵从适用于Java类和相应的类加载器的安全策略。)
允许开发者添加自定义的字节码转换器来对Java字节码进行自定义的操作转化,从而实现在不修改源代码的情况下,实现AOP。
OpenRASP的开发者选择了ASM这个框架,相比其他的框架,ASM的优点是更加底层、更加灵活,功能也更加丰富。