Ywc's blog

理解RASP技术

Word count: 1kReading time: 3 min
2021/05/21

什么是RASP?

  • RASP:Runtime application self-protection(运行时自我保护)

  • RASP是一种应用安全保护技术,在运行时检测攻击并且进行自我保护。它将保护程序像疫苗一样注入到应用程序中,应用程序融为一体,能实时检测和阻断安全攻击,使应用程序具备自我保护能力,当应用程序遭受到实际攻击伤害,就可以自动对其进行防御,而不需要进行人工干预。

  • RASP在后端代码运行时做安全监测,但又不侵入后端代码,就得切入Web后端解释器。
    以Java为例,Java支持以JavaAgent的方式,在class文件加载时修改字节码,在关键位置插入安全检查代码,实现RASP功能。

    • 同样,PHP也支持对PHP内核做类似的操作,PHP支持PHP扩展,实现这方面的需求。

RASP vs WAF

  • WAF主要通过分析流量中的特征过滤攻击请求,并拦截携带有攻击特征的请求。WAF虽可有效过滤出绝大多数恶意请求,但是不知道应用运行时的上下文,必然会造成一定程度的误报。并且WAF严重依赖于特征库,各种花式绕过,导致特征编写很难以不变应万变。
  • RASP的不同就在于运行在应用之中,与应用融为一体,可以获取到应用运行时的上下文,根据运行时上下文或者敏感操作,对攻击进行精准的识别或拦截。于此同时,由于RASP运行在应用之中,只要检测点选取合理,获取到的payload已经是解码过的真实payload,可以减少由于WAF规则的不完善导致的漏报。
  • WAF作为应用外围的防线,RASP作为应用自身的安全防护,确保对攻击的有效拦截。RASP带来的性能消耗在5%~10%之间,在一定程度上仍然是可以接受的。由于RASP需要运行在应用中,不能像WAF一样在流量入口统一部署。需要根据应用开发的技术不同使用不同的RASP。比如.net应用与Java应用需要不同的RASP产品,增加了部署成本。

PHP-RASP实现

php扩展

PHP核心由两部分组成,一部分是PHP core,主要负责请求管理,文件和网络操作,另一部分是Zend引擎,Zend引擎负责编译和执行,以及内存资源的分配。

php中的rasp实现

参考:TRASP的实现

PHP RASP作为PHP解释器的扩展,是一个动态库so文件,PHP语言中类似的动态库很多,比如:mysql.so,RASP和MYSQL扩展的加载方式和运行原理一样,集成在PHP解释器中。

三个步骤来实现PHP RASP扩展模块:
1、预加载
任何一个PHP实例都会经过Module init、Request init、Request shutdown和Module shutdown四个过程。

2、Hook Opcode 或 Hook 内部函数
RASP需要监控各个敏感函数的调用,在PHP中比较好的方式便是 Hook Opcode 和 Hook内部函数。

3、参数获取与分析
在完成对敏感函数调用行为的监控后,通过ZEND_CALL_NUM_ARGS和ZEND_CALL_ARG可以获取到函数的参数个数和内容,便可根据函数的参数制定相应的策略。如文件类可以关注是否读取了敏感文件, 数据库操作类是否语法结构发生了变化等等。

JAVA-RASP实现

Java RASP 实现的基本思路类似于 Java 中的 AOP 技术(AOP:面向切面编程),将 RASP 的 Hook 代码注入到需要进行检测的地方,根据上下文和关键函数的参数等信息判断请求是否为恶意请求,并终止或继续执行流。

浅析基于 Java 的 RASP 实现

Reference

腾讯:RASP攻防 —— RASP安全应用与局限性浅析
从0开始的PHP RASP的学习
一类PHP RASP的实现
鸟哥:taint

CATALOG
  1. 1. 什么是RASP?
    1. 1.1. RASP vs WAF
  2. 2. PHP-RASP实现
    1. 2.1. php扩展
    2. 2.2. php中的rasp实现
  3. 3. JAVA-RASP实现
  4. 4. Reference