文|腾讯安全平台部数据安全团队
qiye & baz
随着Web应用攻击手段变得复杂,基于请求特征的防护手段,已经不能满足企业安全防护需求。在2012年的时候,Gartner引入了“Runtime application self-protection”一词,简称为RASP,属于一种新型应用安全保护技术,它将防护功能“ 注入”到应用程序中,与应用程序融为一体,使应用程序具备自我防护能力,当应用程序遭受到实际攻击伤害时,能实时检测和阻断安全攻击,而不需要进行人工干预。
腾讯洋葱反入侵团队早在很多年前就研究RASP的应用场景,2014年还在TSRC搞了一次基于rasp的webshell攻防挑战赛,详见(https://security.tencent.com/index.php/blog/msg/57);近几年从PHP逐步扩展到Java,Python,Nodejs等其他语言。RASP通过实时采集Web应用的高风险行为,通过特征规则、上下文语义分析及第三方安全产品数据关联分析等多种安全模型来提升检测准确率,相较于传统Web应用安全产品,RASP从海量的攻击中排除掉了大量的无效攻击,聚焦发现真实的已知和未知安全威胁。经过多年的实践我们发现RASP也存在一些缺陷和不足,本文以PHP RASP作为研究对象抛砖引玉,在此分享RASP的应用场景和问题。本文主要分三个部分:RASP架构原理简要介绍、RASP安全应用场景介绍 及 RASP对抗浅析。
注意:
文中涉及的文章pdf、代码、思维导图存放于https://github.com/qiyeboy/my_tsrc_paper 仓库中,喜欢的朋友可以自取。
一、 RASP架构原理简要介绍
以PHP语言为例,PHP语言自身提供扩展机制,可以基于扩展机制开发RASP系统。
腾讯自研的TRASP架构示意图:
TRASP 整个架构大致分为3个部分:1. 客户端模块;2. 云端数据分析模块;3. 安全处置模块。
1. 客户端模块;
负责数据采集和规则匹配,数据采集可以配置策略采集需要的数据(如SQL执行/命令执行/代码执行/文件操作等),RASP可以根据需求配置数据采集策略,需要注意的是采集数据越多资源消耗也会随之增大;
2. 云端数据分析模块;
有些场景通过前端规则无法完全解决,需要上报数据到云端分析进行二次分析,包括使用机器学习算法,关联分析等;
3. 安全处置模块;
负责配置事件安全等级和处置策略,RASP串行在业务中,误报会影响业务,需要根据安全事件的等级和精准度配置阻断/异步告警/安全通知等不同的处置策略。
PHP RASP扩展原理和实现简要介绍:
PHP RASP作为PHP解释器的扩展,是一个动态库so文件,PHP语言中类似的动态库很多,比如:mysql.so,RASP和MYSQL扩展的加载方式和运行原理一样,集成在PHP解释器中。接下来从3个方面简单描述一下TRASP扩展模块的实现原理。
1. 预加载
任何一个PHP实例都会经过Module init、Request init、Request shutdown和Module shutdown四个过程。
(1)Module init
在所有请求到达前发生,例如启动Apache服务器,PHP解释器随之启动,相关的各个模块(Redis、Mysql等)的MINIT方法被调用。仅被调用一次。在开发XXX扩展时,相应的XXX.c文件中将自动生成该方法:
(2)Request init
每个请求到达时都被触发。SAPI层将控制权交由PHP层,PHP初始化本次请求执行脚本所需的环境变量,函数列表等,调用所有模块的RINIT函数。XXX.c中对应函数如下:
(3)Request shutdown
每个请求结束,PHP就会自动清理程序,顺序调用各个模块的RSHUTDOWN方法,清除程序运行期间的符号表。典型的RSHUTDOWN方法如:
(4)Module ishutdown
所有请求处理完毕后,SAPI也关闭了(即服务器关闭),PHP调用各个模块的MSHUTDOWN方法释放内存。