×
即日起办理VIP送烛龙会员
详询微信客服
忽略

JRASP:一个专注于入侵检测的RASP

什么是RASP

随着 Web 应用攻击手段变得复杂,基于请求特征的防护手段,已经不能满足企业安全防护需求。早在2014 Gartner 引入了“Runtime application self-protection”一词,简称为RASP,属于一种新型应用安全保护技术,它将防护功能"注入"到应用程序中,与应用程序融为一体,通过Hook少量关键函数,来实时观测程序运行期间的内部情况。当应用出现可疑行为时,RASP根据当前上下文环境精准识别攻击事件,并给予实时阻断,使应用程序具备自我防护能力,而不需要进行人工干预。

RASP 通过实时采集 Web 应用的高风险行为,通过特征规则、上下文语义分析及第三方安全产品数据关联分析等多种安全模型来提升检测准确率,相较于传统 Web 应用安全产品,RASP从海量的攻击中排除掉了大量的无效攻击,聚焦发现真实的已知和未知安全威胁。并且在发出的报警信息上, RASP可以清晰的还原出代码行级别的攻击路径,对漏洞重现与修复具有极大的帮助。

#RASP能做什么

抵御未知攻击。相比于传统的边界产品,RASP不过度依赖检测规则。2021年波及范围较广的Log4j2事件中,RASP展示出它过人的优势。在Web应用安全中,攻击的入口防不胜防,但最终攻击的方式是固定的。同样作为拦截漏洞,边界产品面对新产生的漏洞,由于没有对应的规则可以说是全军覆没;

● RASP 的防护层深入代码上下文,可以基于行为来精准识别攻击,并提供受到攻击影响的相关代码调用堆栈, 协助安全团队迅速定位问题并快速制定解决方案

● 利用 RASP 也能够对应用打虚拟补丁,修复官方未修复的漏洞。特别是对大型复杂系统,不允许重新启动的情况下,热修复机制能够及时对漏洞止血,大大降低漏洞逃逸时间,通过增加新的函数 Hook、规则等措施,在较短时间内完成整个企业、全部服务的安全加固。

● RASP赋能扫描器实现灰盒检测(IAST)。其在预发环境、测试环境等方面发挥作用,实现多层产品,层层检测的效果。

● 第三方组件安全风险梳理。以Java 为例子,RASP 运行在JVM内部,能够准确获取JVM加载的jar文件版本、路径等信息,理论上不存在误报和漏报。结合第三方CVE漏洞信息库,能够评估当前系统的风险等级。相对于扫描磁盘文件、POM文件解析、查看进程加载的文件的方式,准确性更高。

#WAF VS RASP

JRASP:一个专注于入侵检测的RASP插图

传统的 WAF 主要通过分析流量中的特征过滤攻击请求,并拦截携带有攻击特征的请求。WAF 虽然可以有效个过滤出绝大多数恶意请求,但是不知道应用运行时的上下文,必然会造成一定程度的误报。并且 WAF 严重依赖于特征库,各种花式绕过,导致特征编写很难以不变应万变。

RASP 的不同就在于运行在应用之中,与应用融为一体,可以获取到应用运行时的上下文,根据运行时上下文或者敏感操作,对攻击进行精准的识别或拦截。与此同时,由于 RASP 运行在应用之中,只要检测点选取合理,获取到的 payload 已经是解码过的真实 payload ,可以减少由于 WAF 规则的不完善导致的漏报。

RASP 拥有 WAF 所不具有的一些优势,越来越成为安全防御体系的标配。而 WAF 是成熟、快速、可以大规模部署的安全产品。WAF和RASP是互补的,这是两个纬度的东西。两者的核心区别还是rasp可以更准确的拦截漏洞,甚至能拦0day,而waf机制基于流量决定了他并不能完整的了解业务内部运转逻辑,且容易被绕过,另外waf大多也只是http协议的,rasp可以不关心协议也能拦截。RASP的解决问题场景,还没有那么直接。更像疫苗,构建的是基于体内信号的免疫力,WAF更像是口罩防护服,很多场景立竿见影,在应用外面包一层盔甲来防御。waf和rasp两者相互补充,将 WAF 作为应用外围的防线,RASP 作为应用自身的安全防护,确保对攻击的有效拦截。

RASP与WAF并不是相互取代的关系,二者在不同业务和安全防护场景下各有所长。对于应用防护来说,协同构建边界与应用内生双重防护能力,最大程度降低应用被入侵、数据泄露、服务不可用等风险。

JRASP:一个专注于入侵检测的RASP插图1

#实现基本思路

目前 RASP 的主方向还是 Java RASP, 它的实现方式是通过Instrumentation编写一个agent,在 agent 中加入 hook 点,当程序运行流程到了 hook 点时,将检测流程插入到字节码文件中,统一进入JVM中执行。

JRASP:一个专注于入侵检测的RASP插图2

产品特点

Java Runtime Application Self-Protection 意思是Java应用自我保护系统,简称 JRASP

#优越的性能

#代码插桩性能高

实现 JavaAgent 代码插桩的框架主要有 ASM、Javassist 和 Byteman 等。三者对比之下,ASM 在这几个框架里插桩效率是最高的,我们使用 ASM 来对字节码进行修改,最大限度的提升性能;

#检测引擎低延时

抛弃了第三方规则引擎,使用Java原生语言实现检测。基于对各种规则引擎做了充分的性能测试,包括 Google V8 引擎、groovy脚本引擎、jdk自带的rhino引擎等, 测试发现一条规则的性能优化到极限耗时也有0.5ms,达不到我们的高负载下的延时要求;而实现相同规则,java原生代码耗时仅0.1ms,如果检测逻辑经过充分预热,耗时会更低。基于对第三方规则引擎和原生检测逻辑的性能对比,我们采用了java原生代码来实现规则检测 。尽管业内大多采用了Google V8引擎,在不同语言环境实现了检测规则的通用性,从大规模实践来看,规则引擎的通用性并不是痛点,RASP部署的最大痛点之一是检测逻辑的性能损耗。

#降低注入对服务的影响

为了尽可能的降低 agent注入对服务的性能影响,我们创造性的实现了一系列功能,包括注入前的系统负载检查,并实现了自动寻找低峰期开启注入,注入过程无需人为干预; 注入后系统负载高的无损降级自熔断的功能,最大程度的减少 RASP 对系统性能的影响。

#强大的灵活性

#插件可定制

虽然我们对常用开源中间件如tomcat、jetty、springboot等做了支持,一般企业内部会有自研、对各种开源组件包装加壳等操作来适应企业自身的基础设施, 只需要简单的遵循插件开发规范,就可以开发贴合企业架构的插件。

#安全插件jar热插拔

安全插件按照中间件和功能分类,每个插件都能实现热加载和热卸载;(称之为插件版本升级)

#检测参数实时更新

每个安全插件都支持参数更新(如黑白名单等);(称之为参数更新) JRASP:一个专注于入侵检测的RASP插图3

#同时支持2种部署方式

java agent的部署方式有2种:premain方式和agentmain方式,2种方式各有利弊,JRASP同时支持。

#为大规模部署而生

传统的RASP通过修改 Tomcat、Jetty 和 Springboot 等的启动脚本,给JVM增加 javaagent 参数来让JVM加载一个Java Agent。一般这样启动一个Java Agent:

java -javaagent:/path/to/your/agent.jar -jar XXX.jar

这种部署方式首先要知道 web 容器的安装路径,然后还要修改JVM参数配置文件,最后重启 web 容器,RASP 部署才算生效。小规模机器上能够使用,如果是几十万台甚至上百万台主机上,这将是一场运维灾难 (opens new window)

我们自研的 RASP 具有自动发现Java进程和依赖的中间件jar包,并根据中间件类型和版本自动下载和加载对应插件jar包,全过程 Java 服务无需要修改参数,也无需重启, 真正实现了对业务的零打扰;

实现原理:RASP 守护进程发现了 Java 进程之后,对Java进程依赖的jar包进行分析,从对象存储服务下载对应 jar 包的插件到目标主机上,然后 attach 到目标 JVM 上,目标 JVM 在初始化一个 轻量级的 Agent (仅一个类),最后动态加载核心插件 jar 包。

#一键部署与跨平台

RASP 在 macos、linuxwindows 环境下分别提供了一键部署的安装包,仅需一个命令即可以开启 RASP 防护。

#支持native方法hook

例如:一般的rasp命令执行的hook点是java.lang.UNIXProcess.<init> 或者 java.lang.ProcessImpl.start,存在绕过的风险,jrasp支持最底层的native方法forkAndExec,在java层面难以绕过

#专注于入侵检测

我们自研的 RASP 抛弃了之前开源和商业 RASP 产品大而全的方案,专注解决掉入侵相关的风险,同时也做得更底层,在 Java 运行时环境做了比较多的适配。

#自身安全性

"打铁还需自身硬",JRASP在防护业务安全的同时,也十分重视自身安全性建设。JRASP的防护策略(包括hook类、参数检测逻辑等)仍然一定程度上于依赖信息不对称, 如何保障策略在传输过程、运行时不被恶意窃取分析是一个重要问题。 JRASP对整个通信链路进行了加密,包括:

  • 管理端下发给守护进程的的安全策略加密;
  • 守护进程与agent通信的http接口鉴权,防止插件被控制;
  • 插件jar包传输全过程加密,在类加载时解密,最大程度防止jar包被反编译

#产品对标

产品特性 阿里JAM* 百度OpenRASP 字节 AgentSmith JRASP
性能影响 rt<0.5ms, cpu<1%, mem<100m cpu<3%,rt<5ms - rt<0.5ms, cpu<2%, mem<100m
hook入口 http、rpc http、rpc http、rpc http、rpc
hook行为 rce、file、net rce、file、net、classloader ... rce、file、net、xxe
部署方式 premain premain agentmain 都支持
多语言 java(主要)、nodejs、python java、php go、java、python java
自身安全 全链路加密 jar包、策略明文 jar包混淆 全链路加密

相关推荐: Elkeid:一个云原生的基于主机的安全(入侵检测与风险识别)解决方案

Elkeid 是一个主机安全解决方案,通过该方案可以一站式解决的企业生产环境内服务器的安全问题,相较于传统的主机安全类产品,Elkeid 更开放,更强大。Elkeid 目标是成为满足各类型的主机安全需求的产品,构建企业安全防御最重要的基石。Elkeid 从真实…

相关文件下载地址

该资源需登录后下载

去登录
温馨提示:若该资源侵犯了您的权益,请联系我们处理。
JRASP:一个专注于入侵检测的RASP
免费资源
立即下载