0x01 什么是 RASP ?
RASP,即Runtime Application SelfProtection,实时 应用自我保护。
RASP实现原理示意图
0x02 RASP的实现方案 (JAVA web)
Filter
· 开发难度相对低
· 漏洞覆盖面小
· 对性能影响大
· 推广难度大
AOP
· 编译期(静态代理)
· 字节码加载前(Instrumentation)
· 字节码后(动态代理)
· 开发难度高
· 漏洞覆盖面广
· 对性能影响小
· 推广难度低
0x03 案例分析
Java Open Rasp
RASP使用示例
RASP背景知识
Instrumentation
· 使用 Instrumentation,开发者可以构建一个独立于应用程序的代理程序(Agent), 用来监测和协助运行在 JVM 上的程序,甚至能够替换和修改某些类的定义。
· 有了这样的功能,开发者就可以实现更为灵活的运行时虚拟机监控和 Java 类操作 了,这样的特性实际上提供了一种虚拟机级别支持的 AOP 实现方式,使得开发者 无需对 JDK 做任何升级和改动,就可以实现某些 AOP 的功能了。
· 编译后,将"-javaagent:/path/agent.jar"添加至JVM的启动参数
ASM
· ASM是一个通用的Java字节码操作和分析框架。
· 它可以用于直接以二进制形式修改现有类或动态生成类。
· 提供通用的转换和分析算法可以轻松组合定制复杂的转换和代码分析工具。
· ASM提供与其他字节码框架类似的功能,但它的重点是简单的使用和性能。 · 因为它的设计和实现尽可能小且尽可能快,所以它使它在动态系统中非常有吸引力。
RASP适用场景
漏洞监测
灰盒测试
RASP优点和缺点
· 对应用开发来说无感知
· 漏洞发现准确率高
· 实时发现与阻断
· 应用场景多
· 推广容易
· 对性能有5%-10%的影响
· 开发难度高
1、熟练使用ASM框架
2、熟悉JVM字节码指令
3、深入分析漏洞原理,找准切点
4、了解容器原理,找准切点
· 要不断运营规则
· 更新规则需重启容器
• 《 Java中的RASP实现》http://mp.weixin.qq.com/s/Qk_0ZxlWqAn2fAn8m2kObQ
• 《什么是实时应用程序自我保护(RASP)?》 https://segmentfault.com/a/1190000004160109
• 《Rasp技术介绍与实现》http://www.jianshu.com/p/53b50edb4a04 • 《聊聊最近挺热的RASP技术》https://mp.weixin.qq.com/s/lhBdm3_jHZCWK5xVuvg2RQ
• https://github.com/xbeark/javaopenrasp • http://asm.ow2.org/
• 《AOP 的利器:ASM 3.0 介绍》https://www.ibm.com/developerworks/cn/java/j-lo-asm30/
• 《Instrumentation 新功能》https://www.ibm.com/developerworks/cn/java/j-lojse61/index.html