7

理解RASP技术

 2 years ago
source link: https://yinwc.github.io/2021/05/26/RASP-learn/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

什么是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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK