什么是RASP?RASP和WAF性能比较怎么样?RASP的实现思路是什么,都将在本文详细介绍
RASP概述
什么是RASP
RASP(Runtime application self-protection)运行时应用自我保护,
RSAP将自身注入到应用程序中,与应用程序融为一体,实时监测、阻断攻击,使程序自身拥有自保护的能力。并且应用程序无需在编码时进行任何的修改,只需进行简单的配置即可
Ø运行在应用程序内部;
Ø检测点位于应用程序的输入输出位置;
Ø输入点包括用户请求、文件输入等;
Ø输出点包括包括数据库、网络、文件系统等。
RASP能做什么
RASP vs WAF <部署>
WAF
Ø外部边界入口统一部署
Ø支持透明(串联)、旁路、反向代理三种方式
Ø容易形成单点故障,影响面大
RASP
Ø服务器上单独部署,嵌入在应用程序内部,应用代码无感知
java程序,启动时加上–javaagent rasp.jar参数即可
Ø开发语言强相关,但防护插件可共用
Ø更了解应用程序上下文
RASP vs WAF <性能>
WAF
Ø正则匹配的规则越多,性能越低
Ø和硬件规格相关
Ø业务报文多了一次socket转发,延迟大
Ø对服务器CPU没有影响
RASP
Ø由于只在关键点检测,不是所有请求都匹配所有规则
Ø某些厂商声称的对服务器CPU性能影响能够降低到2%
Ø非防护状态延迟增大3-5%,防护状态延迟增大4.6 – 8.9%
RASP vs WAF <产品特性>
RASP vs WAF <检测能力>
(来自https://www.oneasp.com/topic/raspwaf.html)
RASP前景
“The RASP market size is expected to grow from USD 294.7 million in 2017 to USD 1,240.1 million by 2022, at a Compound Annual Growth Rate (CAGR) of 33.3% during the forecast period. “
RASP技术实现(JAVA)
RASP实现思路
如何注入检测代码
在哪些访问控制点注入
注入之后如何检测攻击
检测到攻击后如何处理
RASP 注入方法(JAVA)
Servlet Filter: 在请求响应路径上,只能对http报文过滤处理
JVM重构: 植入JVM内部, 基于JVM的安全控制层实现RASP容器。需要对JVM非常熟悉,难度很大。国外waratek采用这种方法
Java Instrument: 最普遍的做法
Java基础: 源码、编译、运行
什么是Java Instrument
Java SE 5 的新特性,依赖于 JVMTI。
用来监测和协助运行在 JVM 上的程序,甚至能够替换和修改某些类的定义
–javaagent 参数指定Instrumentation功能的 jar 文件来运行程序:
java –javaagent:K:\java\MyAgent.jar app.HelloWorld
什么是JVMTI
Ø全名JVM Tool Interface,是JVM暴露出来的一些供用户扩展的本地编程接口集合。
Ø基于事件驱动的,JVM每执行到一定的逻辑就会主动调用一些事件的回调接口,这些接口可以供开发者扩展自己的逻辑。
Java Instrument原理
Intrument的实现方式
JDK反射
概念
Java在运行时识别对象和类的信息,有2种方式:
Ø传统的RTTI: 编译时确定某个class是否被JVM加载;
Ø反射机制: 在运行状态中,对于任意一个类(包括未加载的),都能够知道这个类的所有属性和 方法;对于任意一个对象,都能够调用它的任意一个方法和属性;
借助这种对类结构探知的”自审”能力和多态特性,充分发挥Java的灵活性。
使用
Java提供了一个叫做reflect的库,封装了Method,Constructor,field,Proxy,InvocationHandler 等类
功能
Ø在运行时判断任意一个对象所属的类。
Ø在运行时构造任意一个类的对象。
Ø在运行时判断任意一个类所具有的成员变量和方法。
Ø在运行时调用任意一个对象的方法
Ø生成动态代理
JDK反射 – 实例1
动态加载
JDK反射 – 实例2
动态代理
JDK反射 – 结论
动态代理虽然灵活性高,但仍然需要使用相关的类库,进行动态代理的配置,并融合到应用的源代码中,不是理想的解决方案。
没有找到合适的方法在不修改应用代码的前提下,对已有类进行代理
Javassist
概念
一个开源的分析、编辑和创建Java字节码的类库。
由东京工业大学的数学和计算机科学系的 Shigeru Chiba (千叶 滋)所创建。它已加入了开放源代码JBoss 应用服务器项目,通过使用Javassist对字节码操作为JBoss实现动态”AOP”框架。
允许开发者自由的在一个已经编译好的类中添加新的方法,或者是修改已有的方法。
Java Instrumention的一种方式。
优点
简单,直接使用java编码的形式,而不需要了解虚拟机指令,就能动态改变类的结构,或者动态生成类。
使用
Javassist库,封装了ClassPool、CtClass、CtMethod等类;
Javassist – 实例1
动态构造类
Javassist – 实例2
Instrument
premain函数:
transform函数:
如果是期望修改的类,找到类中期望被注入的函数,在函数前后添加检测函数(下图只是示意)。
ASM
概念
一个JAVA字节码分析、创建和修改的开源应用框架。
允许开发者自由的在一个已经编译好的类中添加新的方法,或者是修改已有的方法。
Java Instrumention的一种方式。
优点
可以用JVM指令直接操作字节码,更灵活;
性能高;
功能更丰富;
使用
ASM库/工具 http://asm.ow2.org/
封装ClassReader、ClassVisitor与ClassWriter等很多功能丰富的类
需要了解jvm指令和class文件结构
ASM – 常用类
ASM – 类关系图
典型的静态代理模式:
ASM – 字节码解析流程
ASM – 实例1
动态构造类
ASM – 实例2
修改类