掌桥专利:专业的专利平台
掌桥专利
首页

一种Web服务器的安全防御方法和系统

文献发布时间:2024-01-17 01:24:51


一种Web服务器的安全防御方法和系统

技术领域

本发明属于信息安全领域,具体涉及一种Web服务器的安全防御方法和系统。

背景技术

结构化查询语言(Structured Query Language,缩写:SQL),是一种关系型数据库查询的标准编程语言,用于存取数据以及查询、更新、删除和管理关系型数据库(即SQL是一种数据库查询语言),应用服务器常使用如MySQL、SQLServer、Oracle、PG等常用关系型数据,通过驱动或者数据源的方式对相应的数据进行访问。

SQL注入(SQL Injection)是一种常见的Web安全漏洞,形成的主要原因是web应用程序在接收相关数据参数时未做好过滤,将其直接带入到数据库中查询,导致攻击者可以拼接执行构造的SQL语句。对于SQL注入的避免可以通过预编译来进行,但是由于应用未遵循规范时,为服务器引入了漏洞。为此需要在服务器侧引入快速响应的防御方法和防御系统。

发明内容

本发明的一个目的在于解决至少一个前述的问题,提供一种用于服务器侧的Web服务器的安全防御方法。本发明的另外一个目的在于提供相应的防御系统。

根据本发明的第一个方面,本发明公开了一种Web服务器的安全防御方法,包括:

基于流量日志获取用户历史请求;

根据用户历史请求的请求地址和元数据获取请求元信息;

根据请求元信息中请求参数信息和请求参数响应时长构建请求特征向量;

将请求特征向量作为输入获得用户的访问类型;

在用户的访问类型被识别为攻击行为时,将用户标记为可疑用户,Web服务器根据用户标记提供差异化的服务。

根据本发明的一个实施例,所述请求参数响应时长的计算过程包括:

分别获取包含所述请求参数的请求、请求参数的数目和该请求的响应时长,则对应于每个请求参数,请求参数响应时长为该请求的响应时长/请求参数的数目;

计算所有请求中的请求参数响应时长均值。

根据本发明的一个实施例,所述请求参数为经筛选获得的可疑参数;

所述可疑参数的获取过程包括:

获取服务器的历史访问数据集;

对历史访问数据集进行分类,得到含有标签的多个历史访问数据子集;

对历史访问数据子集中的历史访问地址进行解析,获得参数在请求地址中的响应值分布;

所述响应值分布包括各响应时长区间和各响应时长区间的分布概率。

根据本发明的一个实施例,所述对历史访问数据子集中的历史访问地址进行解析,获得参数在请求地址中的响应值分布包括:

对历史访问地址地址进行解析,获得请求地址和与请求地址对应的请求参数;所述请求参数包括可变请求参数和固定请求参数;

根据请求方式、请求头和请求时间获取请求地址之间的关系图,以及请求地址对应的请求参数之间的关联度;在计算关联度时,不考虑固定请求参数;

根据请求参数之间的关联度将历史请求按照请求类型划分为若干组,分别计算若干组内请求参数对于响应时长的贡献值,获得参数在请求地址中的响应值分布。

根据本发明的一个实施例,所述根据请求元信息中请求参数信息和请求参数响应时长构建请求特征向量包括:

根据历史访问数据集获取和请求地址关联的请求参数;

获取出现频次最高的m个请求参数名称作为基准参数集;

获取用户历史请求包括的参数和响应时长,根据不包括在基准参数集内的请求参数和用户历史请求响应时长得到请求特征向量。

根据本发明的一个实施例,所述将请求特征向量作为输入获得用户的访问类型包括:

将请求特征向量作为贝叶斯的特征输入得到类别集合;

统计各类别集合的特征属性的条件概率;

计算每类攻击的后验概率;

在最大后验概率超过阈值时,将用户请求类型识别为攻击类型。

根据本发明的第二个方面,本发明公开了一种Web服务器的安全防御系统,包括:

历史请求获取单元,用于基于流量日志获取用户历史请求;

请求元信息获取单元,用于根据用户历史请求的请求地址和元数据获取请求元信息;

请求特征向量构建单元,用于根据请求元信息中请求参数信息和请求参数响应时长构建请求特征向量;

访问类型获取单元,用于将请求特征向量作为输入获得用户的访问类型;

可疑用户标记单元,用于在用户的访问类型被识别为攻击行为时,将用户标记为可疑用户,Web服务器根据用户标记提供差异化的服务。

本发明可以实现基于历史请求的注入用漏洞的探测和防御,通过对历史请求和相应参数的分析,实现服务提供时对可以请求的筛选。

附图说明

图1、本发明一个实施例中的安全防御方法流程示意图;

图2、本发明一个实施例中的安全防御系统结构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

在以下的说明中,本申请的具体实施例将参考由一部或多部计算机所执行的步骤及符号来说明,除非另有述明。因此,这些步骤及操作将有数次提到由计算机执行,本申请实施例所指的计算机执行包括了由代表了以一结构化型式中的数据的电子信号的计算机处理单元的操作。此操作转换该数据或将其维持在该计算机的内存系统中的位置处,其可重新配置或另外以本领域测试人员所熟知的方式来改变该计算机的运作。该数据所维持的数据结构为该内存的实体位置,其具有由该数据格式所定义的特定特性。但是,本申请原理以上述文字来说明,其并不代表为一种限制,本领域测试人员将可了解到以下所述的多种步骤及操作亦可实施在硬件当中。

本申请的原理使用许多其它泛用性或特定目的运算、通信环境或组态来进行操作。所熟知的适合用于本申请的运算系统、环境与组态的范例可包括(但不限于)手持电话、个人计算机、服务器、多处理器系统、微电脑为主的系统、主架构型计算机、及分布式运算环境,其中包括了任何的上述系统或装置。

本申请中的术语“第一”、“第二”和“第三”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。

请参考图1,根据本发明的一个实施例,一种Web服务器的安全防御方法,包括:

基于流量日志获取用户历史请求;

根据用户历史请求的请求地址和元数据获取请求元信息;

根据请求元信息中请求参数信息和请求参数响应时长构建请求特征向量;

将请求特征向量作为输入获得用户的访问类型;

在用户的访问类型被识别为攻击行为时,将用户标记为可疑用户,Web服务器根据用户标记提供差异化的服务。

本发明的一个目的为实现智能识别、自动分析漏洞结果和提供安全防御手段。

常规的渗透借助于工具进行漏洞的发现;以及使用sqlmap、xss平台、各种漏洞的exp、cookie编辑插件、漏洞攻击脚本进行攻击。

目前,对于依赖框架的应用服务器,多数SQL注入相关的漏洞出现的频率已经大为降低,而在业务中发现后台周期性处理一些数据遇到的非意外拼接查询仍然可能导致注入漏洞在后台呈现。

本发明对于服务器注入漏洞的扫描基于如下的假定:

1.所有的请求都是恶意的,即使是用户通过点击式操作或者系统提供的界面发起的请求,也可能由于网络或者引用本身存在的问题引入致命性的恶意语句,以及用户可能通过Postman的方式手工构建数据包;

2.所有的漏洞都是高风险的,即使考虑自动化工具可以提高注入成功的机率和效率,但是专业的安全人员可以依据经验获得更好的安全收益;

3.漏洞不一定按照不安全的方式被呈现,如和前台相关的信息可以通过预编译被安全处理,但是后台部分仍然可能存在因字符串拼接引入的安全漏洞。

基于此,请参考图2,本发明主要遵循如下的策略进行漏洞的扫描:

1.根据服务器的历史访问数据集分析用户对于服务器的访问记录;

2.根据访问记录对访问来源进行分类;

3.根据每个类别下的访问记录构建测试模板;

4.使用测试模板构建测试数据集;

5.执行测试以排查和发现漏洞。

本发明涉及应用服务器和数据库服务器。应用服务器可以和数据库服务器设置于同一物理机,在设置于同一物理机时,其可以为通过容器镜像的方式提供,或者直接安装于物理机;所述数据库服务器可以安装在物理机或者物理上设置的虚拟机中。应用服务器也可以和数据库服务器设置于不同的物理机或虚拟机中,此处的物理机包括实体的服务器或者云服务器,在以云服务形式提供时,相应的物理机和云服务通过云服务商提供的方式进行通信。

下面对本发明的策略进行解释。

首先,本发明根据服务器的历史访问记录获得正常用户以及恶意用户对于服务器的请求。用户发起HTTP请求时,通常包括请求地址、请求参数、请求头和请求信息;其中请求地址为服务器所处理的资源地址,其包括静态和动态的资源,服务器侧可以通过验证请求参数、请求头和请求方式确定是否为预期的请求。

例如,常规的Tomcat服务器对于访问服务器提供了如下的默认请求记录格式192.168.1.10 - - [01/Jun/2022:09:27:44 +0800] "GET /a/js/jquery-ui.js HTTP/1.1" 304 - 192.168.1.10 - - [01/Jun/2022:09:27:44 +0800] "GET /favicon.icoHTTP/1.1" 200 21630 192.168.1.10 - - [01/Jun/2022:09:27:47 +0800] "POST /a/App HTTP/1.1" 200 105

其包含了请求源地址、时间、请求方式和响应。

如果配置Tomcat记录其他参数信息,例如在tomcat的配置文件server.xml新增配置

则可以在日志内输出如下的信息;访问者的IP、本地服务器的IP、发送信息的字节数、服务器的名称、访问者的协议、访问的方式(GET还是POST)、本地接收访问的端口、查询字符串、请求的方法和URL、http的响应状态码 用户的session ID、请求时间、是否为验证的访问者、访问的URL地址、服务器名称和请求消耗的时间等信息,具体请参考ApacheTomcat开发者资源。

在使用预编译的情况下,无法通过注入的方式进行嗅探,常见的SQL注入对于和前台相关的实时数据并不是有效的。例如,应用服务器使用JDK开发时,如使用了MyBatis或者JPA,发生SQL注入的可能性就降低了很多,而如在底层使用PreparedStatement时,可以较大程度规避风险,然而部分后台处理数据时,由于所处的网络环境较为安全,开发者仍然可能使用了拼接的SQL执行查询或者通过引用了不安全的组件,特别是部分无法参数化呈现的如表名,这就造成了前台数据无风险,但是后台处理数据存在风险的情形,相应的风险如附图2所示;即部分不安全的数据在即时处理时可能不会产生直接的输出,但是该数据会导致服务器在安全的区内因不安全的代码产生风险;另外,如果用户的查询正常,且参数被过滤了恶意的字符,但是其仍然可能导致数据库发生卡顿,在发生异常时,仍然可能导致SQL查询语句的泄露。

我们发现,在存在上述的缺陷时,对于数据库的操作会影响实际响应时间,造成实际响应时间变长的原因为实际查询并未按照预定索引进行查询或执行了非预期的查询,从而使得响应时长变大。此外,部分查询的参数依据所提供多个参数不同选用了不同的查询语句,这导致了部分查询差异的造成和请求有关联。

因此,通过对服务器的日志进行分析,获取用户输入不同类型的请求参数时,服务器输出值的变化判断是否存在风险,特别是针对可能涉及部分表锁定、全表扫描和暂停情形的。

然而图2所示的方法在生产环境中和测试环境中存在的差异导致部分漏洞呈现需要耗时,虽然该方法是基于历史数据进行分析,提供了较高的准确度,但是基于历史数据的分析,正常访问行为和异常的访问行为关联度存在明显的差异,特别是异常用户的请求地址和参数和正常用户分布不一致,以及响应于用户的时长也不一致,因此我们又设计了在线的检测方式,具体可以为:

(101)获取服务器的历史访问数据集;

(102)对历史访问数据集按照来源和浏览器进行分类,得到含有标签的多个历史访问数据子集;

(103)对历史访问数据子集中的历史访问地址进行解析,获得请求参数模板。

步骤101中历史访问数据基于服务器的日志获得,服务器的日志为根据请求而生成,并保存在单独的日志文件中,该日志在每8个小时后会写入新的文件,通过读取日志可以至少获得请求地址、请求参数、请求头和请求信息。

步骤102中,可以依据请求地址首先进行一次分组,然后根据浏览器的来源进行二次分组,得到含有标签的多个历史访问数据集。此外,还可以使用K-means方法进行聚类,对于浏览器按照浏览器所属的公司或者软件系进行,例如Chrome、Edge、Firefox、IE以及国产浏览器等,对于同一公司的浏览器,可以进一步根据浏览器的核心,例如js引擎版本或者内核版本,进行分类。使用K-means方法对请求的来源,即User-Agent进行聚类,得到的浏览器版本为聚类标签,每个聚类标签对应了一组请求。对于User-Agent内包含非法字符的,去除非法字符(如‘后)后进行聚类。

步骤103中,对请求的信息进行解析,解析出参数出现的频率以及潜在的取值,例如是否取值为字符串、整数以及长度,可用的参数名称、参数是以URL参数形式提供还是通过POST的形式提供,从而可以获得服务器历史处理过的请求方式、请求头和请求参数信息。进一步的,计算各个参数在不同历史请求中对于请求的实际影响值,即该参数出现时,相应的页面响应时长,并选择一个预设值,例如1ms,作为先验概率的计算基准。

下面对基于用户历史请求回放并进行分类进行说明。

本发明使用朴素贝叶斯分类器进行分类,朴素贝叶斯分类器为贝叶斯分类的一种,其基于统计学原理,通过事件的先验概率,来获得事件可能所属每类的后验概率,选最大后验概率的对应类作为该事件的分类。

贝叶斯定理的公式为:

P(A|B)表示事件B已经发生的前提下,事件A发生的概率,叫做事件B发生下事件A的条件概率。其基本求解公式为:

P(A∩B) = P(A)*P(B|A)=P(B)*P(A|B)

其中,P(A)是A的先验概率,P(B|A)是已知A发生后B的条件概率,P(B)是B的先验概率,P(A∩B)是A与B同时发生的概率。

朴素贝叶斯分类器在本发明中通过如下方式进行:

服务器有多个可接受的参数,这些参数的请求元信息不被接受;

用户可以在服务器可接受的参数中进行非法请求,但是非法请求会对服务器的响应时长产生正面或者负面的影响;

不同的参数组合可能会产生不同的影响,且由于实际处理业务包括了多种架构,因此不同参数一起出现时,其几率会发生变化;

在此基础上构建一个响应值序列,d={d1,d2,d3,…,dm},对于序列中的第i个元素di为相对于基准参数的特征属性,其基于历史数据获得,其对应了一个序列A={a1,a2,a3,…,am},序列中的第i个元素ai为攻击类别概率,其和攻击类型一一对应,针对具体参数的注入,分别计算Pi=P(di|ai),并获得其最大值,就可以获取在一个响应值di出现的几率下访问行为为攻击可能性,如果该可能性大于阈值,则可以判断其为攻击,根据最大的概率值即可以获取已经发生的一系列攻击。即,正常用户的响应时长分布总是一个有规律的分布,如果一个请求的响应时长发生了变化,那么意味者服务器可能受到攻击,而此攻击可能和在先的请求相关,如果基于历史数据获得的响应时长和计算获取的攻击概率明显大于阈值,则攻击大概率发生。为了确定对应的事件概率即序列A中的攻击类型,可以基于数据库的日志和历史攻击类型进行时间对齐,并基于对齐结果计算概率。例如,在一个页面包括查询,并超过设定的时长,如500ms时,则可能存在超范围的查询导致结果集过多,例如使用了如‘1=1 ’来执行对于约束条件的忽略,从而执行或者获取了超过limit约定数目的结果;而在表达式可能导致锁表或者死锁时,可能会出现多个攻击类型被同时匹配,在此时,可视为攻击存在,应当对用户的请求进行技术性处理。进行处理的另外一个益处为,如果发生了服务器的服务能力降低,那么正常用户的查询也会受到影响,通过此方式可以将短时降低用户的请求频率,避免数据库恢复时的时长过高。

上述过程中,响应值序列d为针对单个用户实际历史响应的分布,考虑用户习惯的近似性,对于同一来源地域或者同一用户组可以合并历史数据并进行统计,从而进一步减少偶然事件的发生的可能性。

在判断攻击发生后,即可以根据攻击类别标记用户的请求具有恶意,之后可以通过其他技术手段防止用户对应用服务器的攻击。如果后续的用户无恶意,那么用户请求反映在日志上的响应时长会返回正常区间,从而可以通过设置安全限制时长(即在一个时间段内通过其他技术手段防止用户对应用服务器的攻击)来避免用户正常访问受到影响。

在阐述了对历史数据分析和对于用户访问类型分析后,进一步阐述本发明的实现过程。

首先,在本发明的一个实施例内,本发明一种Web服务器的安全防御方法,包括:

基于流量日志获取用户历史请求;

根据用户历史请求的请求地址和元数据获取请求元信息;

根据请求元信息中请求参数信息和请求参数响应时长构建请求特征向量;

将请求特征向量作为输入获得用户的访问类型;

在用户的访问类型被识别为攻击行为时,将用户标记为可疑用户,Web服务器根据用户标记提供差异化的服务。

本发明的应用服务器的日志保存于日志服务器,日志服务器为读写分类型数据库服务器,这保障了分析程序可以快速获得历史请求数据。

历史请求数据被定期的处理以获得上述用于构建朴素贝叶斯分类器,以及基于最新的数据以进行当前会话用户访问类型的识别。

进行当前用户会话识别时,需要计算参数响应时长,其计算过程可以包括:

分别获取包含所述请求参数的请求、请求参数的数目和该请求的响应时长,则对应于每个请求参数,请求参数响应时长为该请求的响应时长/请求参数的数目;

计算所有请求中的请求参数响应时长均值。

例如包括10个页面被分析,第一个页面有10个参数,响应时长为3ms,则每个参数在该请求的参数响应时长为0.3ms;按此方式计算获得,如a参数在9个页面中出现,其参数响应时长和为18ms,则其参数响应时长为2ms;以此类推,b参数在5个页面中出现,其参数响应时长和为1.3ms,则其参数响应时长为0.26ms。很明显,参数a参与了一个慢过程。

应当注意,上述的计算过程应当是针对一个用户的会话进行的,而不能为全部用户的会话,否则会无法识别漏洞。 在一个用户的请求中,如果一个参数的表现异常,一般可以分为是服务器侧引起或者用户是具有恶意的,但是无论何种情况,均可以通过降低用户的访问频率或者停用部分服务的方式来保证业务的正常运行。

由于部分请求中,例如Keep-Live或者固定提供的如随机数并不会被处理,因此,在对上述的请求参数处理后,得到的结果会更可信。

在一个实施例内,所述请求参数为经筛选获得的可疑参数;

所述可疑参数的获取过程包括:

获取服务器的历史访问数据集;

对历史访问数据集进行分类,得到含有标签的多个历史访问数据子集;

对历史访问数据子集中的历史访问地址进行解析,获得参数在请求地址中的响应值分布;

所述响应值分布包括各响应时长区间和各响应时长区间的分布概率。

由于后续的朴素贝叶斯分类器的先验概率是基于对各个请求地址而判定的,因此,对于历史访问数据的分类应当基于具体的请求地址而产生,在此基础上再基于前文的步骤基于来源进行分类;如果考虑到User-Agent可能被伪造,那么,User-Agent以及各种请求头信息都可以作为请求参数被考虑,而不用基于此进行分类。

对请求参数进行响应值分布计算,具体参照前文,遍历分组的历史请求,获得一个历史请求中的请求参数和响应时长,则每个请求参数对于响应贡献值按其均值计算时,可以获得一个近似值。对一个参数在所有历史请求中的响应贡献值进行统计,可以获得其在请求地址中的响应值分布;在选定一个阈值后,可以获得包含该参数时,请求该资源时响应时间的先验概率。如果考虑参数之间的关联关系,可以进一步获得多参数的先验性概率。

进一步的,所述对历史访问数据子集中的历史访问地址进行解析,获得参数在请求地址中的响应值分布包括:

对历史访问地址进行解析,获得请求地址和与请求地址对应的请求参数;所述请求参数包括可变请求参数和固定请求参数;

根据请求方式、请求头和请求时间获取请求地址之间的关系图,以及请求地址对应的请求参数之间的关联度;在计算关联度时,不考虑固定请求参数;

根据请求参数之间的关联度将历史请求按照请求类型划分为若干组,分别计算若干组内请求参数对于响应时长的贡献值,获得参数在请求地址中的响应值分布。

通过上述方法,可以进一步将请求参数的范围缩小到可变参数中,此处的可变参数为用户提交查询式中赋值变化频率较高的数值,用户的查询中多个字段往往具备关联性,例如数据时间范围和关键字常用于缩小查询范围,那么时间字段和关键字字段就属于可变请求参数,而必须提供的其他字段就属于固定请求参数。去除固定请求参数后,各个参数之间的关联关系更加明显,在此基础上计算的先验概率更具备代表性。

本发明还提供了一种Web服务器的安全防御系统,该系统包括:

历史请求获取单元,用于基于流量日志获取用户历史请求;

请求元信息获取单元,用于根据用户历史请求的请求地址和元数据获取请求元信息;

请求特征向量构建单元,用于根据请求元信息中请求参数信息和请求参数响应时长构建请求特征向量;

访问类型获取单元,用于将请求特征向量作为输入获得用户的访问类型;

可疑用户标记单元,用于在用户的访问类型被识别为攻击行为时,将用户标记为可疑用户,Web服务器根据用户标记提供差异化的服务。

本申请还提供了处理设备,具体的,本申请提供的处理设备包括处理器,处理器用于执行存储器中存储的计算机程序时实现对应的实施例中的各步骤;或者,处理器用于执行存储器中存储的计算机程序时实现如实施例中各模块的功能。

示例性的,计算机程序可以被分割成一个或多个模块/单元,一个或者多个模块/单元被存储在存储器中,并由处理器执行,以完成本申请。一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述计算机程序在计算机装置中的执行过程。

处理设备可包括,但不仅限于处理器、存储器。本领域技术人员可以理解,示意仅仅是处理设备的示例,并不构成对处理设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如处理设备还可以包括输入输出设备、网络接入设备、总线等,处理器、存储器、输入输出设备以及网络接入设备等通过总线相连。

处理器可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,处理器是处理设备的控制中心,利用各种接口和线路连接整个处理设备的各个部分。

存储器可用于存储计算机程序和/或模块,处理器通过运行或执行存储在存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现计算机装置的各种功能。存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据处理设备的使用所创建的数据(比如音频数据、视频数据等)等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件、或其他易失固态存储器件。

显示屏用于显示输入输出单元输出的至少一种字符类型的字符。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置、处理设备及其对应模块的具体工作过程,可以参考如实施例中的说明,具体在此不再赘述。

本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。

技术分类

06120116196404