一、rasp是什么?
RASP是Runtime application self-protection的缩写,中文翻译为运行时应用程序自我保护
2012年的时候,Gartner高德纳公司提出,它是第一家信息技术研究和分析的公司。
RASP 运行在程序执行期间,使程序能够自我监控和识别有害的输入和行为。
是一种安全防护技术,也就是说一个程序如果注入或者引入了rasp技术,那么rasp就和这个程序融为一体,使应用程序具备了自我防护的能力,就可以实时检测到应用是否遭受攻击并进行阻断和自我防御
RSAP将自身注入到应用程序中,与应用程序融为一体,实时监测、阻断攻击,使程序自身拥有自保护的能力。并且应用程序无需在编码时进行任何的修改,只需进行简单的配置即可
**在PHP里,**rasp是通过hook一些关键函数,类似于文件上传SQL注入这一类的函数,然后hook掉它,这个函数之后用字节码的方式。去替换掉那些危险的一些参数,入参,会实现应用程序的自我保护
在漏洞代码执行前阻断执行流。
RASP 可以应用在 Web 应用程序和非 Web 应用程序,对应用程序的代码设计没有任何影响,不需要修改任何代码,只需要简单的配置就可以将安全保护功能在服务器程序在运行时注入
RASP 运行在应用程序的内部,监听每一个与应用程序交换的节点,覆盖所有应用程序的访问节点,包括:用户、数据库、网络和文件系统,从而实时监测并拦截漏洞攻击。,能够在运行时结合上下文采取相应的保护方案。
优点
RASP 的亮点在于“自我保护“
RASP的优点在于能嵌入在应用程序内部,应用代码无感知,更了解应用程序上下文,方便定位漏洞信息,更少的误报和漏报,对各种绕过手法具有更强的防护能力;
优势1:RASP几乎没有误报情况;
优势2:RASP可以发现更多攻击;
优势3:RASP可以对抗未知漏洞。
缺点
但缺点在于PHP RASP会对服务器的性能造成影响,推动部署落地相对困难。
首先 RASP 是针对应用程序的,每个应用程序都必须有独立的探针,不能像防火墙一样只在入口放置一个设备就可以了。这样增加了部署困难和防范不完整的风险。
侵入性过大,在这里如果RASP本身出现了什么问题的话,将会直接对业务造成影响。
开发问题。针对不同的语言,RASP底层的实现是不一样的,都需要重新基于语言特性进行专门的开发,开发的压力很大。
另外一个比较的不足就是对系统性能的影响,RASP 实时拦截,深入检测用户数据流,这是对精确度和误判率都有很大的帮助,但是对用户性能有一些影响,这些性能消耗也必然影响到用户的体验,这也是影响企业客户部署 RASP 的很大一方面原因。现在 RASP 的提供商在优化方面做了很大努力,大部分 RASP 对性能影响在5%左右。
最后使用 RASP 并不是真正建立一个安全的应用,系统中存在的漏洞还是存在,应用了 RASP 后临时提供一个虚拟补丁修补上已知漏洞,当不用 RASP 后这些漏洞还是存在。另外 RASP 也不能修复所有的漏洞,漏洞时刻在更新。企业应该将 RASP 和扫描工具结合起来将更有价值。RASP 软件提供商也应该提供实时漏洞更新功能,实现真正零日攻击防御。
二、rasp的作用,保护行为
RASP 的保护行为可以一下几种方式:
终止用户会话停止用户程序(不影响服务器上其他程序):这是针对非常严重的攻击,比如DDOS。发送警报给专门的安全人员发送警告给用户
Ø运行在应用程序内部;
Ø检测点位于应用程序的输入输出位置;
Ø输入点包括用户请求、文件输入等;
Ø输出点包括包括数据库、网络、文件系统等。
rasp可以检测出漏洞
**远程打补丁:**修复应用程序漏洞和ODay
**应用监控:**性能监控、日志采集等
三、rasp可以检测出漏洞
1.两种检测模式
检测模式
在检测到安全攻击时只是记录下来并发送警告给用户
保护模式
保护模式不仅能够检测同时能够实时拦截潜在的安全攻击。
2.rasp可以检测那些漏洞
攻击类型 | RASP支持 | WAF支持 |
---|---|---|
跨站脚本(XSS) | √ | √ |
命令注入 | √ | √ |
ShellShock | √ | ❌ |
未经处理的异常 | √ | √ |
缺少内容类型 | √ | √ |
缺少Accept标头 | √ | √ |
不受支持的方法 | √ | √ |
漏洞扫描 | √ | √ |
方法调用失败 | √ | ❌ |
敏感数据泄露 | √ |
3. 基于规则的漏洞攻击检测
通过RASP实时采集Web应用的高风险行为,具体实现为hook漏洞相关的函数,如检测SQL注入(劫持mysqli_query等)、命令注入(system/exec等)、文件上传漏洞(move_uploaded_file等)、xss漏洞(echo/print等);拿到函数数据后对参数进行规则匹配判断是否存在漏洞攻击。举两个例子:
(1)文件上传漏洞,以move_uploaded_file为例,函数说明:move_uploaded_file ( string filename,stringdestination ) : bool,第一个参数为上传文件,如果上传了一个动态php脚本后缀文件即判断存在上传漏洞。
【ip xxx 安全漏洞告警】TRASP 发现ip xxx存在上传漏洞,漏洞细节如下:漏洞文件: /data/webroot/xxx/x.php(第201行)上传的PHP动态脚本: /data/webroot/xxx/1.php
(2)SQL注入,可以发现下图正常的sql和恶意的注入sql有区别,比如使用了union select,可以基于此做安全策略;
传统规则可能存在误报,也可以对sql语句做语义解析判断是否存在sql注入攻击,非本文重点不再过多介绍。
4. 基于污点追踪的漏洞检测
通过追踪外部可控制的输入变量(如GET,*POST,REQUEST,REQUEST,*COOKIE等)是否未经安全处理进入危险函数执行,危险函数包括各种可能导致漏洞的函数,如命令注入相关的system/exec,xss相关的echo/print。污点追踪原理借用了php变量结构体预留的一个标记位,业界知名的相关系统有鸟哥开发的Taint扩展,详情可参考:https://www.laruence.com/2012/02/14/2544.html,本文不再做过多介绍。
5.IAST扫描联动
先简要介绍下IAST,IAST中文名是交互式应用安全测试,相较于传统的DAST和SAST扫描方式,漏洞检出率更高&误报率更低。IAST目前常见的实现方式有两种,一类是基于代理或网关等形式抓取业务CGI流量后做安全测试扫描,一类是在业务web容器插桩获取业务代码执行细节结合DAST扫描用例判断是否存在漏洞,比如DAST发起一个带有test_from_dongxi字符串的SQL注入测试请求,web容器内插桩劫持数据库相关函数,发现sql语句中有test_from_dongxi的字符串,从而联动发现安全漏洞;RASP可以用于插桩获取代码执行流程,相较于传统漏洞检测方法可以直接定位到有漏洞的代码文件和具体代码行号,业务修复起来更加便捷。
6.Webshell检测
Webshell文件是一个特殊的cgi文件,有文件操作、命令执行等管理功能,可以基于rasp采集的数据在云端做检测;检测方法包括 规则匹配(适用于一句话木马和混淆webshell有明显特征的样本)、行为统计分析(适用于大马);此外,RASP结合污点追踪也是一种检测方法,通过标记非信任的数据源,监测整个数据链路,此前写过一篇文章,详情可参考:https://security.tencent.com/index.php/blog/msg/152,本文不再做过多介绍。
四、国内做RASP的厂商
产品名称 | 产品官网 | 概述 |
---|---|---|
灵蜥 | http://www.anbai.com/lxPlatform/ | 灵蜥是北京安百科技研发的一款RASP防御产品,而RASP安全研究团队的核心是之前乌云核心成员,据我了解,乌云在2012年后半年左右的时候就对RASP技术开始进行研究了。目前灵晰RASP安全防御技术以及升级到了2.0版本,对灵斩1.0版本的架构以及防御点进行了大版本的升级,应该是目前防御比较完善的一家了。 |
openRasp | https://www.oneapm.com/ | 然后蓝海讯通研究的OneRasp也出现在市场,后面不知什么原因,蓝海讯通好像放弃了对oneRasp的研究以及售卖,现在oneRasp官网以及下线。 |
openRasp | https://rasp.baidu.com/ | 在随后可能就是大家都听过或者用过百度开源的OpenRasp,百度开源的rasp产品让更多的企业以及安全研究者接触和认识到了rasp技术。该项目目前社区活跃度挺高,插件开发也很简单,大大降低了使用门槛。 |
云锁 | https://www.yunsuo.com.cn | 云锁我是在18年的360安全大会上了解到的,官网将RASP技术列入了一个小功能,主打是的微隔离技术,关于微隔离技术,在这边我们不做探讨。有兴趣的可以搜索一下相关的技术文章。 |
安数云 | http://www.datacloudsec.com/#/product-4 | 安数云WEB应用实时防护系统RASP是在我写这篇文章的时候,一发现他们也开发了一款PASP产品才知道的。不过没有找到其技术白皮书等可参考的文章知守 |
五、各种语言RASP技术实现方式
1.PHP
PHP是通过开发第php扩展库来进行实现。PHP语言自身提供扩展机制,可以基于扩展机制开发RASP系统。
PHP rasp 扩展原理好实现简要介绍:
PHP RASP作为PHP解释器的扩展,是一个动态库so文件,PHP语言中类似的动态库很多,比如:mysql.so,RASP和MYSQL扩展的加载方式和运行原理一样,集成在PHP解释器中。接下来从3个方面简单描述一下TRASP扩展模块的实现原理。
①预加载
任何一个PHP实例都会经过Module init、Request init、Request shutdown和Module shutdown四个过程。
Module init
在所有请求到达前发生,例如启动Apache服务器,PHP解释器随之启动,相关的各个模块(Redis、Mysql等)的MINIT方法被调用。仅被调用一次。在开发XXX扩展时,相应的XXX.c文件中将自动生成该方法:
Request init
每个请求到达时都被触发。SAPI层将控制权交由PHP层,PHP初始化本次请求执行脚本所需的环境变量,函数列表等,调用所有模块的RINIT函数。XXX.c中对应函数如下:
Request shutdown
每个请求结束,PHP就会自动清理程序,顺序调用各个模块的RSHUTDOWN方法,清除程序运行期间的符号表。典型的RSHUTDOWN方法如:
Module shutdown
所有请求处理完毕后,SAPI也关闭了(即服务器关闭),PHP调用各个模块的MSHUTDOWN方法释放内存。
RASP预加载主要在Module init 阶段实现, 通过在初始化阶段预先加载RASP模块, 替换opcode handler与通过自定义函数替换全局函数表位置。
PHP把中间字节码称之为OPCODE,每个OPCODE对应ZEND底层的一个处理函数,ZEND引擎最终执行这个处理函数。
② Hook Opcode 或 Hook 内部函数
RASP需要监控各个敏感函数的调用,在PHP中比较好的方式便是 Hook Opcode 和 Hook内部函数。
(1) 实现Hook Opcode 功能只需要改变 Hook Opcode 对应的处理函数即可,而 zend 预先就提供了一个现成的接口:zend_set_user_opcode_handler, 如:
替换 Opcode handler 后便可以自定义函数调用前后的操作, 如获取参数、阻断攻击等, 还可以通过 ZEND_USER_OPCODE_DISPATCH 跳回至原来的Opcode执行,虽然PHP调用函数的方式多种多样, 但从Opcode角度分析, 主要还是分为以下几类, 以php7为例:
(2) 另一种实现Hook函数调用的方式就是Hook内部函数, Opcode最终还是会通过CG(function_table)获取所调用函数的handler执行, 那么我们通过修改CG(function_table)表对应函数的handler指向, 便可以指向我们实现的函数,在完成相应操作后继续调用原来的函数实现hook。
两种方式皆可实现Hook函数,有各自的优点。第一种,适合工程化,只需要对几种Opcode类型进行hook,后续Hook的敏感函数可以自行添加;第二种则是需要对敏感函数进行逐一替换,比较繁琐,但优点是替换发生在函数表内,故通过越过Opcode进行函数执行的手法也无法绕过检测,更加可靠。
③参数获取与分析
在完成对敏感函数调用行为的监控后,通过ZEND_CALL_NUM_ARGS和ZEND_CALL_ARG,我们可以获取到函数的参数个数和内容,便可根据函数的参数制定相应的策略。如文件类可以关注是否读取了敏感文件, 数据库操作类是否语法结构发生了变化等等。
④分析绕过方法
既然分析绕过手法,那就需要一个绕过的标准,由于命令风险很高,同时更加普遍,因此选择命令作为突破口:
通过PHP脚本任意执行命令,让RASP 无法监控到数据或者无法捕获到正确数据
接下来从9个方面来阐述绕过方法,文中部分知识都是公开的,只是用在了新的场景。
1. 函数监控不全
php手册中的函数太多了,总有你想不到的,多翻翻PHP手册,比如rasp hook了以下常用的命令执行函数
利用Windows中COM组件绕过:
2.函数参数混淆
RASP检测基于函数和参数做安全策略,可以对参数做变形绕过检测,举个例子: system 函数,用来执行命令,很多业务文件也用,比如运维管理后台。RASP不能只根据函数做报警,会带来大量误报,需要结合参数来做策略,system函数底层原理是执行 sh -c "函数参数",因此我们可以通过命令混淆的方式,成功将RASP动态检测转化为对函数参数的静态检测,这样操作空间就会变得很大。示例如下:
其实在存在命令注入漏洞的场景中,使用混淆的方式是有很大的机会绕过RASP的监控。
3. loader型函数
什么叫loader型函数呢? 简单来说函数是正常的,但是通过改变参数来实现恶意行为,函数参数相当于payload。
比如 mail() 函数的第五个additional_parameters参数可用于设置命令行选项传递给配置为发送邮件时使用的程序。
mail 函数的底层原理是调用sendmail程序,当系统使用Exim来发送邮件时,sendmail 的 -be 参数支持运行扩展模式,可以 对指定字符串扩展格式进行解析。
默认情况下 sendmail时不支持 -be参数的,如何测试主机上的sendmail是否支持-be扩展呢? 使用sendmail执行whoami,如果成功则没有问题:
借用github中使用mail 实现命令执行的开源代码:
除了mail函数,还有imap_open 函数在ssh建立连接可利用\t代替空格进行-o ProxyCommand参数命令拼接,从而调用系统shell执行命令。示例代码如下:
4. LD_PRELOAD
LD_PRELOAD 是Linux中比较特殊的环境变量,它允许用户指定程序运行前优先加载的动态链接库。在php中,可使用putenv()函数设置LD_PRELOAD环境变量来加载指定的so文件,so文件中包含自定义函数进行劫持从而达到执行恶意命令的目的。
mail() 、 error_log()、ImageMagick() 是常用于劫持的触发函数,原因是在运行的时候能够启动子进程,这样才能重新加载我们所设置的环境变量,从而劫持子进程所调用的库函数。
以mail函数为例:mail函数在运行时,会启动子进程来调用系统的sendmail,sendmail引用了getegid() 函数。
那么我们可以通过重写 getegid() 函数编译为so文件,代码内部执行了whoami:
在利用过程中,通过设置LD_PRELOAD环境变量引入自定义的so库。由于真正的恶意代码运行在php之外的进程,自然避过了RASP监控。
5. htaccess和mod_cgi
在apache的WEB环境中,我们经常会使用.htaccess这个文件来确定某个目录下的URL重写规则,如果.htaccess文件被攻击者修改的话,攻击者就可以利用apache的mod_cgi模块,直接绕过PHP来执行系统命令。需要满足四个条件:
apache环境
mod_cgi为启用状态
允许.htaccess文件,即在httpd.conf中,AllowOverride选项为All,而不是none
有权限写.htaccess文件
举个例子:
.htaccess内容:
shell.tt
6. PHP-FPM
PHP-FPM是一个fastcgi协议解析器,默认监听在9000端口。php-fpm由于未授权访问的设计缺陷,它没有相应的访问验证,因此 可以自己构造fastcgi协议,与php-fpm进行通信,让它帮我们干一些"坏事",比如动态加载上传的恶意php扩展。
FastCGI协议由多个record组成,和HTTP协议类似,也有header和body ,但是和HTTP头不同,record的头固定8个字节,body是由头中的contentLength指定,其结构如下:
在传入的FastCGI协议数据包中,设置 type=4,就可以给php-fpm传递环境参数,指挥它工作。
通过FastCGI协议告诉php-fpm去加载一个我们自定义的扩展,这涉及到php-fpm的两个环境变量,PHP_VALUE
和PHP_ADMIN_VALUE
。这两个环境变量就是用来设置PHP配置项的,PHP_VALUE可以设置模式为PHP_INI_USER
和PHP_INI_ALL
的选项,PHP_ADMIN_VALUE
可以设置所有选项。我们只要发送如下类似的请求就可以实现扩展的自动加载。
推荐几个项目,可以方便大家更好的操作:
7. C接口
FFI(Foreign Function Interface)是 PHP7.4 新加入的功能,即外部函数接口,允许从共享库中调用C代码,导致风险点扩大。调用glibc中的system:
8.已知漏洞
php有一些已知的释放重引用漏洞,比如 GC UAF、Json Serializer UAF 、Backtrace UAF等,具体的exp位于https://github.com/mm0r1/exploits/
通过第一部分对 RASP(PHP)原理的讲解,我们知道PHP函数的底层调用都要通过CG(function_table)获取所调用函数的handler。无论 RASP 是hook opcode 还是 hook function,本质上都没有从内存中删除所调用的函数,只是改变了走向,指向了我们自定义的函数。正因如此,我们可以通过上述漏洞,找到内存中对应的函数地址,将其封装为闭包实现调用,从而完成绕过 。以 system函数为例,绕过原理简单总结如下图所示:
对于 正常的php 文件 system("whoami")而言,由于php rasp 将function_table 函数指向从原来的zif_system 内置函数 改为 自定义的fake_system监控函数,导致命令执行在RASP的控制之下。而通过上述漏洞的方式,可以在内存中直接找到 zif_system函数地址,找到地址后,通过伪造闭包对象,将对象中的函数handler指向该地址,实现对 zif_system函数的调用,从而绕过RASP监控。
9.GOT 表劫持
在linux系统中,procfs 文件系统是个特殊的存在,对应的是 /proc目录,php 可以通过/proc 目录读写自己所在进程的内存,将非敏感函数地址替换成glibc 中的system地址,从而执行命令,其涉及的技术叫做 GOT表劫持。
通过正常函数实现敏感行为绕过 RASP ,举个例子,如果能将open函数地址换成system地址,那么便可以将fopen打开文件的命令,最终变成glibc调用system执行命令。
适用条件:**
内核版本>=2.98
基于www权限的php-fpm/php-cgi work进程必须有权限读写 /proc/self/目录。
open_basedir=off(或者能绕过open_basedir读写 /lib/ 和/proc/)
针对适用条件的第2点简要说明一下:
apache+php 由于 apache调用setuid设置www权限工作进程,/proc/self/目录属于root用户,导致没有权限读写。
nginx+php,对于低版本的php -fpm www权限工作进程, /proc/self/目录属于www用户可以读写。经不完全测试,php<5.6 版本是可以使用GOT表劫持。
下面简单描述一下劫持GOT表的步骤,以system替换open函数为例:
读取/proc/self/maps 找到php与glibc在内存中的基地址
解析/proc/self/exe 找到php文件中open@plt的偏移,解析libc.so找到system函数的偏移地址
解析 /proc/self/mem 定位 open@plt 对应open@got的地址,以及libc.so中system 函数的内存地址
将system 函数的内存地址 写入到 open@got里
主动调用fopen("/bin/whoami") ,即相当于调用 system("/bin/whoami")
不在文中放exp源码了,具体源码在前文提到的git仓库中,大家可以根据实际环境进行调试修改,并不通用。
2.java
Java是通过Java Agent方式进行实现(Agent本质是java中的一个动态库,利用JVMTI暴露的一些接口实现的),具体是使用ASM(`或者其他字节码修改框架`)技术实现RASP技术。Java Agent有三种机制,分别是Agent_OnLoad、Agent_OnAttach、Agent_OnUnload,大部分时候使用的都是Agent_OnLoad技术和Agent_OnAttach技术,Agent_OnUnload技术很少使用
六、RASP技术有什么缺陷
● 不同的编程语言可能编译语言和应用程序的版本不一致都导致RASP产品无法通用,甚至导致网站挂掉;
● 如果RASP技术中对底层拦截点不熟悉,可能导致漏掉重要hook点,导致绕过;
● 对于csrf、ssrf、sql语句解析等问题目前还是基于部分正则进行防护(对于sql语句的解析问题可以使用AST语法树进行解析)。
七、RASP技术的其他方面应用场景
代码审计
对于rasp中运用到的技术,换一种思维方式,可以不进行拦截,而进行记录,对所有记录的日志结合上下文进行代码审计。
0day防御
对已经hook的关键点进行告警通知并且要拦截攻击行为,然后在公网部署多种不同cms的web蜜罐。如若已经触发到了告警通知,那么已经证明攻击已经成功。且拦截到的漏洞可能为0day。
攻击溯源
对所有攻击ip以及攻击的文件进行聚合,用时间轴进行展示。这样就可以定位到黑客是从上面时候开始进行攻击的,攻击中访问了哪些文件,触发了哪些攻击拦截。然后对所有大致相同的ip进行归类,可以引出来一个专业用于攻击溯源的产品。
DevOps
对所有事件详细信息提供完整的执行路径,包括代码行,应用程序中使用的完整上下文查询以及丰富的属性详细信息。
八、RASP和WAF的区别
WAF,Web Application Firewall,应用防火墙。其原理是拦截原始http数据包,然后使用规则对数据包进行匹配扫描,如果没有规则匹配上那就放行数据包。正如一个门卫,如果他根据自己以往经验没看出要进入的人有疑点那么这个人就会被放行,至于进去的人在里面干什么他就不知道了。
RASP,Runtime application self-protection,运行时应用自我保护。Gartner公司2014年新提出的一个概念。其不是拦截数据包而是拦截将要执行的代码,对代码进行规则匹配如果没匹配上就放行代码。就好像在客厅、厨房、卧窒等每个地方都派一个管家监视,每个进到家里的要去什么地方做什么动作都在监视之下,一但发现某人要做出某些危险举动就会被阻止。拦截代码就类似hook,java通过重写ClassLoader等方法实现代码拦截。
我们经常——听说免杀、绕WAF,其主要原理就是通过各种函数进行编码实现换脸来绕过WAF的匹配规则;而RASP审查的是最终要执行的代码,此时为了能够执行各种被编码的payload都将被还原成原始的payload,显然此时查杀漏报率和误报率都会更低。但同时也显然RASP比WAF做了更多的事情,这意味着RASP会比传统WAF要消耗更多的系统资源。
就Web Application Firewall这个词的字面意思而言RASP也属于WAF,可以认为RASP是深入到中间件内部的新型WAF。
1. Waf
简介
它采用请求特征检测攻击方式,waf和防火墙就好比如一座大厦门口的保安,你要进入大厦,waf和防火墙就会在你进入大厦时进行安检,检查到你携带刀危险工具,就会把你拦截下来,如果没有那就放你进入,至于你进入大厦后所做的一些行为就不会再去检测。
最近几年,攻击手段开始变得复杂,攻击面也越来越广。传统的安全防护手段,WAF、IDS(入侵检测系统),大多是基于规则,已经不能满足企业对安全的基本需求。对所有的请求都匹配规则,拖慢服务器性能。
产品形态
硬件、软件、云。
2.rasp
简介
好比给每个进入大厦的人都配了一名私人保镖,不仅仅是在入口处设置保安检测,当你进入这座大厦后,你的一举一动都会被它监测到,当你要挥起拳头,下一步准备打人时,他就会在你挥拳时把你拦截下来。
只对关键的请求点检测,不是所有请求都匹配所有规则,
产品形态
软件
运行在应用程序内部,应用程序融为一体,实时监测、阻断攻击,使程序自身拥有自保护的能力。
作用
RASP可以防御OWASP漏洞与第三方框架漏洞及应用性能监控,理论上,使用 RASP 的应用可以识别 SQL 注入、跨站点脚本攻击,并防止威胁直达其攻击目标。
RASP vsWAF <部署>
WAF
Ø外部边界入口统一部署
Ø支持透明(串联)、旁路、反向代理三种方式
Ø容易形成单点故障,影响面大
RASP
Ø服务器上单独部署,嵌入在应用程序内部,应用代码无感知
java程序,启动时加上–**javaagentrasp.jar**参数即可
Ø开发语言强相关,但防护插件可共用
Ø更了解应用程序上下文
RASP vsWAF <性能>
WAF
Ø正则匹配的规则越多,性能越低
Ø和硬件规格相关
Ø业务报文多了一次socket转发,延迟大
Ø对服务器CPU没有影响
RASP
Ø由于只在关键点检测,不是所有请求都匹配所有规则
Ø某些厂商声称的对服务器CPU性能影响能够降低到2%
Ø非防护状态延迟增大3-5%,防护状态延迟增大4.6 – 8.9%