主动防御网关的api模型构建与防御方法及系统
技术领域
1.本发明涉及一种主动防御网关的api模型构建与防御方法及系统,属于网络安全技术领域。
背景技术:
2.如图1所示,主动防御网关是用于保护web站点的一种安全网关。它部署在用户与web站点之间、靠近站点的位置,支持http和https协议。
3.相比与传统的安全网关,主动防御网关具备对用户侧的运行环境进行主动探测和监控的能力,能够提高对威胁事件的判断准确度,进一步提高安全防护能力。
4.在部署主动防御网关(下文简称网关)后,管理员需要在网关配置模块中添加一个站点的信息,包括站点的协议、域名或者ip地址、端口号、证书、后端服务器的地址。配置完成后,终端用户才能够使用浏览器,输入站点域名或者ip地址访问到站点。实际的网络流量,在经过若干网络设备后,到达网关,由网关进行检测后转发给后端的web站点服务器。
5.为了提高检测能力,网关需要对web站点的资源进行精细化管理,包括api(application programming interface,应用程序编程接口)、静态文件、用户信息等。其中api的管理,目前能够做到自动发现api的uri(uniform resource identifier,统一资源标识符),但不能自动识别对api参数及其类型,需要人工录入这些信息,工作量较大。
技术实现要素:
6.发明目的:针对上述现有技术存在的问题,本发明目的在于提供一种主动防御网关的api模型构建与防御方法及系统,能够对api自动学习,识别api参数及类型,提高api自动发现的精细程度。同时能够利用学习到的参数模型对api进行保护。
7.技术方案:为实现上述发明目的,本发明采用如下技术方案:一种主动防御网关的api模型构建方法,包括如下步骤:统计web站点api访问日志中的每个uri出现的次数,为每个uri设置对应的分值,该分值与出现次数正相关,用于标识uri出现的有效性,分值越高表示有效性越高;对每个uri对应的http请求消息中的参数名称进行统计,生成各参数名称对应的单参数模型,并设置模型中分值,该分值与参数名称出现次数正相关,用于标识参数名称出现的有效性,分值越高表示有效性越高;基于预设的类型树,对每个参数名称对应的参数值进行类型匹配,获取匹配的最深的类型节点;所述类型树中子类型节点属于父类型节点;对同一参数名称所有的参数值匹配到的类型进行统计,为匹配到的类型设置分值,该分值与匹配到的次数正相关,用于标识类型出现的有效性,分值越高表示有效性越高;将同一参数名称匹配到的类型及其分值加入到对应的单参数模型中的取值特征表中;将一个uri对应的所有单参数模型组织起来得到web站点的一个api模型。
8.进一步地,还包括对每个uri对应的http响应消息中的参数名称进行统计,生成各
参数名称对应的单参数模型;以及对参数值进行类型匹配,构造单参数模型中的取值特征表;一个api模型中按照参数所在位置组织为多个参数组模型,包括请求头模型、路径参数模型、请求体参数模型、响应头模型和响应体参数模型。
9.进一步地,对于一个web站点,各uri的分值设置方法为:找出出现次数最多的uri,其分值设为1,其他uri的分值等于各自出现次数除以出现次数最多的uri的出现次数。
10.进一步地,对于同一单参数模型的参数值匹配的各类型的分值设置方法为:对于一个具体的参数值,从类型树的根开始往下匹配,匹配到最深的类型节点,将对应类型的计数加一;对于匹配到的每个类型,将从根节点到该类型节点的计数之和作为权重,将所有节点的计数之和作为总权重;各类型的分值等于各自的权重除以总权重。
11.进一步地,单参数模型的取值特征表中还为各类型设置长度范围、编码范围或枚举值列表,其中长度范围用于描述参数值字符串的长度范围,编码范围用于描述参数值所有字节或字符编码的范围,枚举值列表用于描述固定数量的参数值取值。
12.进一步地,根据参数值长度出现的频率,拆分出多个长度范围,并为各长度范围设置分值,该分值由原类型的分值拆分而来,正比于参数值长度落在对应长度范围内的频率。
13.进一步地,在对web站点api访问日志进行统计之前,先过滤掉用户信用值不超过设定阈值的用户的访问日志,以及过滤掉响应码异常的访问日志。
14.一种基于api模型的主动防御方法,包括如下步骤:根据所述的api模型构建方法得到web站点的所有api的uri及其分值,以及api模型;接收到http访问请求后,获取uri分值,若uri不存在或分值低于设定阈值,则拦截请求;解析http请求消息中的参数名称和参数值,若api模型中不存在对应的单参数模型或模型中分值低于设定阈值,或参数值匹配到的类型不存在或类型分值低于设定阈值,则拦截请求;若匹配到的类型设定有长度范围、编码范围或枚举值列表,不满足设定的条件时也拦截请求;在http请求消息中的所有参数都通过检查后,将请求转发给web站点。
15.进一步地,在web站点回复响应消息之后还包括:对解析http响应消息中的参数名称和参数值进行检查,若api模型中不存在对应的单参数模型或模型中分值低于设定阈值,或参数值匹配到的类型不存在或类型分值低于设定阈值,则拦截请求;若匹配到的类型设定有长度范围、编码范围或枚举值列表,不满足设定的条件时也拦截请求。
16.一种计算机系统,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述计算机程序被加载至处理器时实现所述的主动防御网关的api模型构建方法,或者基于api模型的主动防御方法。
17.有益效果:与现有技术相比,本发明通过对api访问日志自动学习,基于统计信息对uri及参数名称、参数值设置用于标识有效性的分值,构建了uri及相关的参数模型,有效提高了api自动发现的精细程度,由原来的仅能识别uri提高到能够识别参数类型;与人工录入api的方式相比,效率得到了极大的提升。基于本发明构建的api模型,能够对后续请求进行检测并拦截恶意请求。
附图说明
18.图1为主动防御网关使用场景示意图。
19.图2为本发明实施例中主动防御网关工作流程示意图。
20.图3为本发明实施例中的参数模型结构示意图。
21.图4为本发明实施例中的api模型结构示意图。
22.图5为本发明实施例中的参数取值类型分值的计算示意图。
具体实施方式
23.下面结合附图和具体实施例对本发明的技术方案做进一步说明。
24.如图2所示,本发明实施例提供一种主动防御网关的api模型构建和防御方法,在主动防御网关框架内基于记录的web站点api访问日志对api进行自动学习以构建api模型,并且利用自动学习生成的api模型进行主动防御。
25.在介绍本发明实施例的具体步骤之前,首先对本发明实施例中涉及到的网关对http请求处理流程,以及api模型的相关数据结构进行说明。
26.网关对http请求的处理可以粗略地分为上行和下行两个阶段。首先是上行阶段,网关收到用户访问站点的请求消息。之后解析请求消息中感兴趣的内容,包括:1、uri;2、请求路径上的参数;3、http请求头;4、请求体中的参数;对于不能解析出参数的请求体,我们可将整个请求体内容作为参数值,采用一个约定的参数名称,如request_body,当成一个请求体参数看待。
27.随后网关将请求转发给站点的后端服务器,后端服务器处理完毕,回复响应消息到网关,进入下行阶段。此时网关解析响应消息中感兴趣的内容,包括:1、http响应头;2、响应体中的参数;类似地,对于不能解析出参数的响应体,我们可将整个响应体内容作为参数值,用response_body作为参数名称,当成一个响应体参数看待。
28.上述各种参数和http头,都是key-value形式的数据,key属于标识符类型,由字母、数字、下划线、减号连接线这些字符组成。key可能是http协议规定的标识符,也可能是api自定义的标识符。为了检查key的有效性,key的取值范围需要学习。value的类型是多样的,value的类型、长度、取值范围都需要学习。对于uri,为了检查其有效性,它的取值范围需要学习。同时,一个uri代表一个api。只有在学习了uri之后才可以学习对应的api参数。简单起见,本发明将http头当做特殊的参数来处理。
29.本发明实施例中的参数模型由学习过程产生,用于描述一类参数(比如路径参数)的特征,成树状组织,如图3所示。单参数模型设有用于标识参数名称有效性的分值和取值特征表,分值越高表示有效性越高;在取值特征表中记录了这个参数名称可能的取值特征。多个单参数模型组成参数组模型,给定一个参数名称,从参数组模型中能够查询到这个名称对应的单参数模型。如果这个分值太低,或者根本找不到参数,可以认定这个参数名称无效。类型是从访问日志分析得出的这个参数的取值的类型。网关需要内置一个类型树,包含若干常见的参数类型,并且随着软件的迭代开发,不断增加更多的类型。以下是典型的参数类型派生关系:数据(代表任意的参数值)
├──ꢀ
二进制(代表可读文本以外的数据)
└──ꢀ
文本
ꢀꢀꢀꢀ├──ꢀ
十进制数
ꢀꢀꢀꢀ│ꢀꢀꢀ├──ꢀ
电话号码
ꢀꢀꢀꢀ│ꢀꢀꢀ└──ꢀ
身份证号码
ꢀꢀꢀꢀ├──ꢀ
英文
ꢀꢀꢀꢀ│ꢀꢀꢀ└──ꢀ
英文人名
ꢀꢀꢀꢀ├──ꢀ
中文
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ├──ꢀ
中文地名
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ└──ꢀ
中文人名长度范围和编码范围是为了对参数值作进一步限制,例如限制英文人名长度范围为2~100,编码范围为字母a~z。枚举值列表用于描述可数的参数值,比如性别类型、布尔类型等。取值特征中分值同样也用来标记出现该类型的有效性,分值越高有效性越高。
30.一般来说,每个站点包含多个api,每个api由唯一的uri代表(某些说法认为uri只代表一个api的一个版本;但是由于同一个api的不同版本的接口往往不同,这里我们当成不同的api看待)。 不同api的参数,名称可能是重复的。因此对某个api参数的描述,应当限定在这个api之内。如图4所示,本发明实施例中对于一个站点,首先定义uri模型,用于描述所有uri的取值情况;然后定义一个api模型表,对于每一个有效的uri,都可以通过此表查找到对应的api模型;在每一个api模型中定义若干参数组模型,用于描述来自不同位置的参数。这里按照参数位置进行分组只是便于维护管理的优选方式,才可以采用其他组织形式。
31.本发明实施例公开的一种主动防御网关的api模型构建方法,首先统计web站点api访问日志中的每个uri出现的次数,为每个uri设置对应的分值;然后对每个uri对应的http请求消息中的参数名称进行统计,生成各参数名称对应的单参数模型,并设置模型中分值;接着基于预设的类型树,对每个参数名称对应的参数值进行类型匹配,获取匹配的最深的类型节点,对同一参数名称所有的参数值匹配到的类型进行统计,为匹配到的类型设置分值;再将同一参数名称匹配到的类型及其分值加入到对应的单参数模型中的取值特征表中;最后将一个uri对应的所有单参数模型组织起来,即得到web站点的一个api模型。
32.网关可以根据自身需求,选择实时或者定期生成或更新api模型,生成的动态模型,能够更新到线上,用于校验后续请求。网关还维护用户信用分,在对访问日志进行学习之前, 过滤掉信用低的用户的访问日志和响应码异常(如 4xx、5xx)的访问日志,避免对学习结果造成干扰。
33.网关可通过多种方式采集终端用户侧运行环境的信息,例如下发采集程序,采集浏览器的运行参数;采集鼠标移动轨迹和键盘的按键时间;通过验证码来判断是否排除机器人等。在采集到这些信息之后,网关对用户计算信用分。信用分的范围可设为0~1,信用分越高表示越可能是正常用户,反之则可能是机器人或者恶意用户。
34.本发明实施例构建api模型过程中,基于访问日志学习uri、各类参数名称、参数值类型的具体方法包括:1、对于uri,计算每个uri出现的次数。找出出现次数最多的uri,赋予分值1;其他uri的分值等于它出现的次数除以“出现次数最多的uri”的出现次数。这里也可以换成其他
计算方法,只要保证uri的分值与出现次数正相关。以每个uri作为key,将对应分值记录到uri模型中。uri用不到取值特征表,置为空即可。
35.2、对于路径参数,对参数名称采用上述相同的处理方法;对于参数值,从类型树的根开始往下匹配,力求匹配到最深的节点,作为此参数的类型,且将此类型的计数加一。对每个类型,从本节点到根节点的计数之和,作为本节点的权重。将所有节点的计数之和,作为总权重。本节点的分值等于它的权重除以总权重。这里同样可以换成其他计算方法,只有保证分值与权重正相关。图5给出了一个具体的计算示例。举例来说,对于如下访问日志记录的信息:访问日志1:/testarg=aaaa访问日志2:/testarg=bbbb访问日志3:/testarg=1111访问日志4:/testarg=2222访问日志5:/testarg=3333访问日志6:/testarg=####图5记录了参数arg取值类型匹配的结果,文本类型计数1,英文类型计数2,十进制字符串类型计数3,则参数arg的取值特征表中,文本类型的分值是1/6,英文类型的分值是(2 1)/6,十进制字符串类型的分值是(3 1)/6。
36.3、对于http请求头、http响应头、请求体参数、响应体参数的处理,同路径参数。对http请求消息或响应消息的学习可由管理员配置,若不需要关注响应消息,则忽略响应消息的处理。
37.4、可选地,对于可变长度的类型(例如数字字符串),统计参数值长度范围记录在取值特征模型的长度范围属性中。此外,为进一步能够识别参数值是否会偏离正常范围,还可根据参数值长度出现的频率,参考频率直方图的方法,拆分出多个长度范围,由此生成相同类型的多个取值特征记录。每个取值特征记录的分值,由原类型的分值拆分而来,并且正比于参数值长度落在此长度范围内的频率。在长度范围精确细分后,若一个参数值长度偏离平均值很多,则得到很低的分值;在安全级别较高的场景,若分值低于配置的阈值,会被视为恶意请求而拒绝。
38.5、可选地,根据参数类型,逐字节或逐字符扫描参数值,统计出所有字节或者字符的编码,将最小编码和最大编码记录在取值特征模型的编码范围属性中。
39.6、可选地,统计不同参数值的个数,如果个数较少,那么将这些参数值记录在取值特征模型的枚举值列表属性中。
40.在实际使用时,模型中参数类型的一些属性也可以由管理员进行手工修改。模型构建过程可以设置不同学习模式,如快速学习模式、谨慎学习模式、关闭学习模式。对于快速学习模式,信任所有用户,对所有用户的访问日志进行无差别的处理;快速学习模式用于站点部署阶段,通过对站点进行测试的方式,快速生成api模型。对于谨慎学习模式,管理员可设置一个信用分阈值,只有信用分超过这个阈值的用户才会被信任。在处理访问日志时,信用分过低的用户访问日志将被丢弃,不参与计算。对于关闭学习模式,不再进行api参数的学习,不再自动更新api动态模型。管理员仍然可以手工修改api模型。关闭学习模式的目
的是,用于在预测或者察觉到可能被攻击的情况下,防止api动态模型遭到恶意请求的污染。
41.构建api模型之后,其应用可以有如下三种方式:1、输入参数名称,查询参数名称表,找到此参数名称的分值。分值表示此参数名称的有效性。例如,对于请求头模型,输入参数名称为“x-content-type-options”,返回分值0.1,意味着这个参数很可能不被支持。
42.2、输入参数名称和参数值,先查询参数名称表,找到取值特征表;然后从类型树的根开始往下匹配,匹配到最深的节点,找出输入的参数值的类型;最后从取值特征表中找出这个类型的分值。例如,对于请求头模型,输入参数名称为content-type和参数值application/json,返回分值1.0,表示这个参数值是有效的。
43.3、在搜索取值特征表的过程中,在匹配到类型之后,如果取值特征模型中包含取值范围、编码范围或者枚举值列表,那么还进一步检查参数值是否在这些范围内。如果在范围内,就搜索完成,否则需要继续搜索。
44.在构建了api模型的基础上,本发明实施例公开的一种基于api模型的主动防御方法,主要包括如下步骤:步骤1、网关收到一个http访问请求后,用uri作为参数名称查找uri模型,得到uri的分值。若uri分值低于指定的阈值时,则拦截此请求。典型地,当uri不存在时,或模型返回极低的分值,这个请求就可能被拦截。若uri分值不低于阈值,则查找api模型表,取出uri对应的api模型。
45.步骤2、解析http请求头、请求路径上的参数、请求体中的参数,分别从api模型中取出对应的参数组模型。从模型中查询参数名称的分值。若参数名称不存在或分值低于指定的阈值时,则拦截此请求。否则根据类型书确定参数值的类型,从模型中查询参数值类型的分值,若不存在响应的类型或分值低于指定的阈值时,也要拦截此请求。若匹配到的类型设定有长度范围、编码范围或枚举值列表,不满足设定的条件时也要拦截此请求。
46.步骤3、如果http请求消息中各参数都通过检查,那么放行,转发给后端web站点。web站点回复响应消息。在一些安全级别更高的场景,还执行步骤4对响应消息进行检查。
47.步骤4、解析http响应头、响应体中的参数,参考步骤2再次检查。如果响应消息中某个分值低于指定的阈值,也要拦截此请求。
48.另外,为了降低误判的影响,管理员可以设置允许信用分高于指定的阈值的用户通行,始终不被拦截。
49.本发明实施例公开的一种计算机系统,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述计算机程序被加载至处理器时实现所述的主动防御网关的api模型构建方法,或者基于api模型的主动防御方法。
技术特征:
1.一种主动防御网关的api模型构建方法,其特征在于,包括如下步骤:统计web站点api访问日志中的每个uri出现的次数,为每个uri设置对应的分值,该分值与出现次数正相关,用于标识uri出现的有效性,分值越高表示有效性越高;对每个uri对应的http请求消息中的参数名称进行统计,生成各参数名称对应的单参数模型,并设置模型中分值,该分值与参数名称出现次数正相关,用于标识参数名称出现的有效性,分值越高表示有效性越高;基于预设的类型树,对每个参数名称对应的参数值进行类型匹配,获取匹配的最深的类型节点;所述类型树中子类型节点属于父类型节点;对同一参数名称所有的参数值匹配到的类型进行统计,为匹配到的类型设置分值,该分值与匹配到的次数正相关,用于标识类型出现的有效性,分值越高表示有效性越高;将同一参数名称匹配到的类型及其分值加入到对应的单参数模型中的取值特征表中;将一个uri对应的所有单参数模型组织起来得到web站点的一个api模型。2.根据权利要求1所述的主动防御网关的api模型构建方法,其特征在于,还包括对每个uri对应的http响应消息中的参数名称进行统计,生成各参数名称对应的单参数模型;以及对参数值进行类型匹配,构造单参数模型中的取值特征表;一个api模型中按照参数所在位置组织为多个参数组模型,包括请求头模型、路径参数模型、请求体参数模型、响应头模型和响应体参数模型。3.根据权利要求1所述的主动防御网关的api模型构建方法,其特征在于,对于一个web站点,各uri的分值设置方法为:找出出现次数最多的uri,其分值设为1,其他uri的分值等于各自出现次数除以出现次数最多的uri的出现次数。4.根据权利要求1所述的主动防御网关的api模型构建方法,其特征在于,对于同一单参数模型的参数值匹配的各类型的分值设置方法为:对于一个具体的参数值,从类型树的根开始往下匹配,匹配到最深的类型节点,将对应类型的计数加一;对于匹配到的每个类型,将从根节点到该类型节点的计数之和作为权重,将所有节点的计数之和作为总权重;各类型的分值等于各自的权重除以总权重。5.根据权利要求1所述的主动防御网关的api模型构建方法,其特征在于,单参数模型的取值特征表中还为各类型设置长度范围、编码范围或枚举值列表,其中长度范围用于描述参数值字符串的长度范围,编码范围用于描述参数值所有字节或字符编码的范围,枚举值列表用于描述固定数量的参数值取值。6.根据权利要求5所述的主动防御网关的api模型构建方法,其特征在于,根据参数值长度出现的频率,拆分出多个长度范围,并为各长度范围设置分值,该分值由原类型的分值拆分而来,正比于参数值长度落在对应长度范围内的频率。7.根据权利要求1所述的主动防御网关的api模型构建方法,其特征在于,在对web站点api访问日志进行统计之前,先过滤掉用户信用值不超过设定阈值的用户的访问日志,以及过滤掉响应码异常的访问日志。8.一种基于api模型的主动防御方法,其特征在于,包括如下步骤:根据权利要求1所述的api模型构建方法得到web站点的所有api的uri及其分值,以及api模型;接收到http访问请求后,获取uri分值,若uri不存在或分值低于设定阈值,则拦截请
求;解析http请求消息中的参数名称和参数值,若api模型中不存在对应的单参数模型或模型中分值低于设定阈值,或参数值匹配到的类型不存在或类型分值低于设定阈值,则拦截请求;若匹配到的类型设定有长度范围、编码范围或枚举值列表,不满足设定的条件时也拦截请求;在http请求消息中的所有参数都通过检查后,将请求转发给web站点。9.根据权利要求8所述的基于api模型的主动防御方法,其特征在于,在web站点回复响应消息之后还包括:对解析http响应消息中的参数名称和参数值进行检查,若api模型中不存在对应的单参数模型或模型中分值低于设定阈值,或参数值匹配到的类型不存在或类型分值低于设定阈值,则拦截请求;若匹配到的类型设定有长度范围、编码范围或枚举值列表,不满足设定的条件时也拦截请求。10.一种计算机系统,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述计算机程序被加载至处理器时实现根据权利要求1-7任一项所述的模型构建方法或权利要求8-9任一项所述的主动防御方法。
技术总结
本发明公开了一种主动防御网关的API模型构建与防御方法及系统,先统计API访问日志中的每个URI出现的次数,设置有效性分值;然后对HTTP请求消息中的参数名称进行统计,生成各参数名称对应的单参数模型,并设置有效性分值,再基于类型树对参数值进行类型匹配,获取匹配的最深的类型节点;对同一参数名称所有的参数值匹配到的类型进行统计,为匹配到的类型设置分值;将同一参数名称匹配到的类型及其分值加入到对应的单参数模型中的取值特征表中;最后将一个URI对应的所有单参数模型组织起来即得到一个API模型。本发明能够对API自动学习,识别参数及类型,提高API自动发现精细程度,能够利用学习到的模型对API进行保护。利用学习到的模型对API进行保护。利用学习到的模型对API进行保护。
技术研发人员:谢峥 高庆官 卢成远 高瑞阳 李亚鹏 汪中杰
受保护的技术使用者:南京赛宁信息技术有限公司
技术研发日:2022.04.25
技术公布日:2022/5/25
转载请注明原文地址:https://tc.8miu.com/read-6569.html