首页> 中国专利> 一种NGINX-MODSECURITY安全规则智能匹配方法

一种NGINX-MODSECURITY安全规则智能匹配方法

摘要

本发明公开了一种NGINX-MODSECURITY安全规则智能匹配方法,属于Nginx的模块开发领域。该方法首先按照防御阶段、防御范围等因素将安全规则分类,然后通过智能学习算法在最短的时间内,判断该访问最接近的那一类规则,找到分类以后再通过折半查找法匹配分类内的小范围的规则。与现有技术相比,本发明的匹配方法具有匹配效率高,准确性好等特点,具有很好的推广应用价值。

著录项

  • 公开/公告号CN104618392A

    专利类型发明专利

  • 公开/公告日2015-05-13

    原文格式PDF

  • 申请/专利权人 浪潮电子信息产业股份有限公司;

    申请/专利号CN201510087661.7

  • 发明设计人 路廷文;刘刚;戴纯兴;

    申请日2015-02-25

  • 分类号H04L29/06(20060101);H04L29/08(20060101);G06N3/00(20060101);

  • 代理机构37100 济南信达专利事务所有限公司;

  • 代理人姜明

  • 地址 250101 山东省济南市高新区浪潮路1036号

  • 入库时间 2023-12-18 08:54:31

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-09-21

    授权

    授权

  • 2015-06-10

    实质审查的生效 IPC(主分类):H04L29/06 申请日:20150225

    实质审查的生效

  • 2015-05-13

    公开

    公开

说明书

技术领域

本发明涉及Nginx的模块开发领域,具体地说是一种NGINX-MODSECURITY安全规则 智能匹配方法。

背景技术

Nginx("engine x")是一个高性能的HTTP和反向代理服务器,也是一个 IMAP/POP3/SMTP代理服务器。因它的稳定性、丰富的功能集、示例配置文件和低系统资源的 消耗而闻名。

Modsecurity是一个入侵侦测与防护引擎,主要用于Web应用程序。

据统计超过70%的攻击发生在网络应用层,各级组织急需要能够保证他们的系统安全性 的帮助。WAF系统的部署,可以为web应用增加一个外部安全层来检测或防止攻击。针对一 系列的攻击,Modsecurity为web应用提供了强大的保护,并对HTTP流量进行监测和实时分 析,这些都只是很少或是根本没有影响系统的基础设施。

Nginx支持Modsecurity模块是一项比较新的技术,因为Nginx是开源的,可以扩展与 Modsecurity的模块。Apache和Modsecurity的结合目前是比较成熟的,Modsecurity作为 一个独立的模块与服务器进行通信,通过研究Nginx的源码,可以获取到请求http和应答的 http,通过对请求内容的分析可以做扩展的处理,不过不能影响Nginx本身的性能,只有并 行扩展低能耗的功能。所以在处理阶段可以自己开发的回调函数进行功能拓展。

现有技术中,Nginx匹配Modsecurity安全规则是通过创建一种选择树然后通过遍历整 棵树来匹配,即顺序匹配所有的规则,创建的进程对网络上访问来的数据包进行拆包分析, 具体动作即将数据包信息跟安全规则进行比对,这种比对方式是逐条进行的,是从前往后的 顺序匹配,这就出现了资源浪费的情况,比如在最后部分的规则被触发的情况下,前面的规 则匹配是无用的,直接影响了Web应用防护系统WAF的效率。

发明内容

本发明的技术任务是针对上述现有技术的不足,提供一种NGINX-MODSECURITY安全 规则智能匹配方法。

本发明的技术任务是按以下方式实现的:一种NGINX-MODSECURITY安全规则智能匹 配方法,包括以下步骤:

(1)将安全规则按着防御阶段、防御范围进行动态分类;

(2)利用改进的粒子群优化算法选择访问最可能触发的规则分类;

(3)在步骤(2)得到的规则分类内,通过折半查找法对安全规则进行匹配。

传统的结构模式中,Nginx和Modsecurity直接结合,但是,为了使上述方法得到更好 的应用,可将上述方法与核心模块modsecurity结合,单独开发一个安全规则智能匹配模块, 进行规则匹配时,Nginx只需要将数据传给该模块,并接受该模块返回的值即可。

为了进一步提高匹配效率,合理的利用硬件的资源,在进行规则匹配时,可根据并发访 问数量进行内核动态绑定和释放。

作为优选,进行内核动态绑定和释放的实现方法为:在静态访问分析的基础上,获取访 问的流量状态和CPU内核的繁忙程度,绕过配置文件的静态分配,根据访问量和动态算法指 向不同的CPU内核。

所述动态算法优选为轮询算法或随机算法。

所述轮询算法指将访问轮流的交给不同的内核处理;

所述随机算法指将访问随机交给内核处理。

所述改进的粒子群优化算法,是由传统的PSO算法改进得到的模糊搜索算法,之所以叫 模糊搜索,是因为在运行中不用精确的找出具体规则,而是找到规则的分类即可。在原来的 PSO算法的基础上添加了随机的粒子和随机的阈值,另外修改了权值,将检测的包的特征值、 阶段、访问的阶段作为目的地,分类的特征值作为粒子群的当前值,多个分类就是多个粒子 群,经过优化,在确保正确的情况下,最接近该目的位置的类即为目标类。

改进的粒子群优化算法包括以下计算公式:

Rand_single_value=trast*Experience+rand_val(v[i])    公式(1)

v[]=v[]+c1*rand()*(pbest[]-present[])+c2*rand()*(gbest[]-present[]) (a)+Rand_single_value    公式(2)

present[]=persent[]+v[](b)    公式(3)

Experience=rand()*(gbest-v[n])+rand()*(pbest-Present[n])    公式(4);

所述公式1为改进的通过修正值和经验值获取随机粒子修正速度公式;

所述公式2为改进的速度优化公式;

所述公式3、公式4为位置优化公式。

上述算法公式中各参数的含义如下:

本发明的NGINX-MODSECURITY安全规则智能匹配方法改变了传统的顺序遍历查找方 式;首先按照防御阶段、防御范围等因素将安全规则分类,然后通过智能学习算法在最短的 时间内,判断该访问最接近的那一类规则,找到分类以后再通过折半查找法匹配分类内的小 范围的规则。与现有技术相比具有以下突出的有益效果:

(一)引入了智能检索算法,将传统的粒子群优化算法进行了修改,通过引入随机阈值、 加入随机粒子保证了粒子群的随机性,多次设置阈值保证粒子群不会提前收敛,在远小于顺 序匹配规则的时间内找到收敛的各个参数,将利用其准确和高速特性,在起收敛的趋势下快 速搜索安全规则类别;

(二)为了保证安全规则的准确性,在找到分类以后使用了折半查找技术,在小的范围 内对安全规则进行匹配,这样保证了速度同时保证了准确性;

(三)可将本发明的方法与核心模块modsecurity结合,单独开发的一个模块,并根据 并发访问数量进行内核动态绑定和释放,在提高处理规则匹配速度的基础上合理的利用硬件 资源;

(四)在大并发访问情况下,本发明方法能够体现出反应速度,提高了WAF的处理效率, 减小了瓶颈效应。

附图说明

附图1是本发明NGINX-MODSECURITY安全规则智能匹配方法数据传输流程图;

附图2是本发明方法中模块内规则匹配流程图;

附图3是本发明中改进的检索算法原理图;

附图4是本发明实施例中cpu动态绑定源码示意图;

附图5是本发明实施例中Nginx动态访问处理模块示意图。

具体实施方式

参照说明书附图以具体实施例对本发明的NGINX-MODSECURITY安全规则智能匹配方 法作以下详细地说明。

实施例:

本发明的NGINX-MODSECURITY安全规则智能匹配方法主要由以下步骤实现:

(1)将加载入服务器模块的规则按着防御阶段、防御范围进行动态分类;

(2)对传统粒子群优化算法进行了改进,利用其快速的搜索功能选择定义最可能触发的 规则分类;

(3)在步骤(2)得到的规则分类内,通过折半查找法对安全规则进行匹配。

将上述方法与核心模块modsecurity结合,即可以开发出一个安全规则智能匹配模块。 如附图1所示,对Nginx进行改造,Nginx只需要将数据传给该模块,并接受该模块返回 的值即可。进行规则匹配时,模块内部数据流如附图2所示。

下面针对各步骤进行详细说明。

【规则分类】

Modsecurity安全规则是一个有着数百条规则的规则集,规则的内容如同公式一般,可 以根据用户自定义的内容组合新功能的规则。一般规则分四部分:命令头、作用域、特征值、 动作措施。

如:SecRule REQBODY_PROCESSOR_ERROR"!@eq 0""phase:2,log,deny,severity:2 ”

说明:

REQBODY_PROCESSOR_ERROR:指定针对request bod发生的进程发生的错误的代码 "!@eq 0“:当不等于0时,即有错误发生时。

处理动作phase:2,log,deny,severity:2

phase:2:由于对象为request body,因此指定在phase:2进行

log:当情况符合(发生错误),将错误记录

deny:将这个处理拒绝

severity:2:将此状况列为严重程度为2,

规则分类原理如下表所示:

在此分类是根据第二部分和第四部分进行划分,第三部分是最终的比较内容。

每一类规则中都有数条安全规则,这些规则是顺序存放在数据结构中,等待匹配,由于 每次加载的规则不一定是全部规则吗,所以这一分类机制是动态的,每一类规则的数量是变 化的。

【改进的智能检索算法】

该算法是在粒子群优化的基础上进行了彻底的修改,加入了随机阈值和粒子,PSO原本 的思想初始化为一群随机粒子,每个优化问题的解都是搜索空间中的一只鸟。所有的粒子都 有一个由被优化的函数决定的适应值(fitness value),每个粒子还有一个速度决定他们飞翔 的方向和距离。然后粒子们就追随当前的最优粒子在解空间中搜索,本发明所述方法将PSO 算法改进成一个高效的模糊搜索算法,之所以叫模糊搜索,是因为在运行中不用精确的找出 具体规则,而是找到规则的分类即可,在原来的基础上添加了随机的粒子和随机的阈值,另 外修改了权值,将检测的包的特征值、阶段、访问的阶段作为目的地,分类的特征值作为粒 子群的当前值,多个分类就是多个粒子群,经过优化,在确保正确的情况下,最接近该目的 位置的类即为目标类。

改进后的PSO公式如下:

Rand_single_value=trast*Experience+rand_val(v[i])    公式(1)

//改进的通过修正值和随机粒子速度获取随机修正值

v[]=v[]+c1*rand()*(pbest[]-present[])+c2*rand()*(gbest[]-present[]) (a)+Rand_single_value    公式(2)

//改进的速度优化公式

present[]=persent[]+v[](b)    公式(3)

Experience=rand()*(gbest-v[n])+rand()*(pbest-Present[n])    公式(4)

//位置优化公式。

改进的算法参数如下表所示:

如附图3所示,上述算法通过以下步骤完成:

第一步:初始化各动态生成的各个类的特征值、防御阶段、防御范围作为参数,每个类 形成一个粒子群。

第二步:为每个粒子群进行内部的优化,最终的优化结果也就是表二中的目的位置是同 一个值。

第三步:根据匹配规则所用的总时间,在该时间以内筛选最佳迭代次数,和基准次数。

第四步:根据实验得到的标准参数进行类别选择。

【折半查找法匹配规则】

传统的加载版本是遍历树上的规则指令进行匹配,这种顺序匹配规则需要所有的规则都 得加载并且按顺序匹配,这样如果匹配的规则在最后的话,前面匹配的过程就是浪费的,折 半查找法是先将类里面的规则分为两部分,然后在前半部分和后半部分就行同样的操作,直 到匹配到确切的规则,无论是否找到规则,在用时上都比遍历树节省了一半时间。

【动态模块化】

传统的结构模式,是Nginx和Modsecurity直接结合。而结合本发明方法对Modsecurity 进行封装,对Nginx进行改造,Nginx只需要将数据传给该模块,并接受该模块返回的值。 同时该模块可以根据规则、访问量的多少来决定动态绑定处理器内核的个数,即内核动态绑 定技术,在整体架构上来说合理的利用了硬件的资源。

目前nginx可以在配置文件里设置绑定在指定模块上,属于静态绑定,在nginx内核解 析其配置文件的时候,将资源指向特定内核,本发明实现了动态绑定,这一改进是指根据目 前的规则接受到的访问情况根据算法动态分配到不同的cpu内核上,具体实现方法是在静态 访问分析的基础上,获取访问的流量状态和CPU内核的繁忙程度,绕过配置文件的静态分配, 根据访问量和动态算法指向不同的CPU内核。

能够实现的算法如下:

一、轮询算法:将访问轮流的交给不同的内核处理;

二、随机算法:将访问随机交给内核处理。

为了实现动态绑定需要实现的功能,具体过程如下:

(1)、在Nginx获取内核访问量的位置ngx_http_block,分析来访的流量(flowi),获取 所有的访问类型、资源、流量大小。

(2)、获取目前所有cpu内核的状态:status(n)。

(3)、借助于ngnix已有的内核分配进程,加入分配算法,将访问流量动态分配。

(4)、进入附图4所示功能模块处理。

通过修改分析配置文件的模块,加入具有算法功能的动态模块来实现内核的动态绑定, 具体位置如附图5所示。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号