CN108322428B - 一种异常访问检测方法及设备 - Google Patents
一种异常访问检测方法及设备 Download PDFInfo
- Publication number
- CN108322428B CN108322428B CN201710036024.6A CN201710036024A CN108322428B CN 108322428 B CN108322428 B CN 108322428B CN 201710036024 A CN201710036024 A CN 201710036024A CN 108322428 B CN108322428 B CN 108322428B
- Authority
- CN
- China
- Prior art keywords
- access data
- sample
- cluster
- access
- sample set
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/14—Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
- H04L63/1408—Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic by monitoring network traffic
- H04L63/1425—Traffic logging, e.g. anomaly detection
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请的目的是提供一种异常访问检测方法及设备,本申请在服务器端通过在需要对访问数据进行检测时,获取待检测访问数据,分别比较待检测数据与预先设置的正样品集合和负样本集合的相似度,得到正样本相似度和负样本相似度,其中,正样本集合是样本访问数据中正常访问的访问数据集合,负样本集合样本访问数据中异常访问的访问数据的集合;基于得到的正样本相似度和负样本相似度,确定访问数据为异常访问数据还是正常访问数据。不仅避免了现有技术中基于经验规则导致的漏查异常访问数据和误判率高的问题,还实现了在得到的正样本集合和负样本集合的基础上,能够准确高效实时地识别出每一条待检测访问数据是否为异常访问数据或正常访问数据。
Description
技术领域
本申请涉及计算机领域,尤其涉及一种异常访问检测方法及设备。
背景技术
在实际应用场景的web访问(网页访问)中,不是所有的访问都是正常的,中间常有一些有意或无意的根据实际应用的漏洞对服务进行攻击,而大多数攻击(即异常访问)均是所携带的访问参数存在问题,例如,sql(Structured Query Language,结构化查询语言)注入、shell(批处理)脚本攻击等,因此为了对攻击进行识别,需要对web访问中的访问参数进行检测,将正常访问模式与异常访问模式区分开来。
现有技术中基于依靠人工经验的经验规则来检测web访问中存在的异常访问相关的访问参数,只能在发现一条异常访问之后增加该条异常访问对应的异常规则至经验规则中,导致基于经验规则对异常访问进行检测对应的经验规则无法穷举,有可能造成大量的误判;其次由于经验规则是基于实际应用场景中对应的异常访问提取出来的,导致经验规则的泛化能力差,无法检测历史访问中的未发生的异常访问,进而无法精确地检测出异常访问;再次由于经验规则中通过检测web访问中是否存在包含特殊命令来检测异常访问,导致只能检测到少部分的异常访问,对于那些伪装得很深或者历史未发生的异常访问就无法有效地检测出来,造成漏掉一些异常访问。
发明内容
本申请的一个目的是提供一种异常访问检测方法及设备,以解决无法准确高效地检测出访问数据中存在的异常访问的问题。
根据本申请的一个方面,提供了一种异常访问检测方法,其中,应用于对网页访问服务器端的样本访问数据进行异常访问检测的服务器,所述方法包括:
获取待检测访问数据;
分别比较所述待检测数据与预先设置的正样品集合和负样本集合的相似度,得到正样本相似度和负样本相似度,其中,正样本集合是样本访问数据中正常访问的访问数据集合,负样本集合样本访问数据中异常访问的访问数据的集合;
基于得到的正样本相似度和负样本相似度,确定该访问数据为异常访问数据还是正常访问数据。
进一步地,上述方法中,所述方法还包括:获取样本访问数据,以根据所述样本访问数据得到正样本集合和负样本集合。进一步地,上述方法中,所述根据所述样本访问数据得到正样本集合和负样本集合,包括:
通过聚类方式,将相似度高于第一预设值的样本访问数据归入正样本集合,将相似度低于第二预设值的样本访问数据归入负样本集合。进一步地,上述方法中,所述样本访问数据为同一URL下的访问参数字符串中的参数对的值。
进一步地,上述方法中,所述同一URL下的访问参数字符串中的参数对的值之间的距离,根据所述参数对的值的长度差异、字符集差异和字符2gram差异中的一种或任意组合确定。
进一步地,上述方法中,所述根据所述样本访问数据得到正样本集合和负样本集合,包括:
将每一个样本访问数据都自成一个簇后,重复选择当前相似度最大的两个簇进行合并得到合并簇,直至成员个数最多的合并簇中的成员个数大于预设成员个数阈值;
将成员个数最多的合并簇作为所述正样本集合,将所述成员个数最多的合并簇之外的簇作为所述负样本集合。
进一步地,上述方法中,所述选择当前相似度最大的两个簇进行合并,包括:
计算每两个簇之间的相似度,并将每两个簇与对应的这两个簇之间的相似度作为一个元素存储入一优先队列,其中,所述优先队列的队头元素始终保持是相似度最大的两个簇;
每次从优先队列中取出队头元素,将该队头元素的两个簇进行合并。
进一步地,上述方法中,所述将每一个样本访问数据都自成一个簇后,重复选择当前相似度最大的两个簇进行合并得到合并簇,直至成员个数最多的合并簇中的成员个数大于预设成员个数阈值,包括:
将每一个样本访问数据都自成一个簇,将所有簇作为初始的类簇,计算所述类簇中每两个样本访问数据之间的相似度并存储入一相似度矩阵,并创建一个初始空的栈后,重复如下步骤,直至成员个数最多的合并簇中的成员个数大于预设成员个数阈值:
当所述栈为空时,从所述类簇中随机挑选一个簇放入所述栈中;
根据所述相似度矩阵,从所述类簇中查找与所述栈中的栈顶元素相似度最高的簇;
若查找到的与所述栈中的栈顶元素相似度最高的簇不在所述栈中,将与所述栈中的栈顶元素相似度最高的簇入栈;
否则,将所述栈中的栈顶元素及与其相似度最高的簇出栈并合并得到合并簇,将所述合并簇放入所述类簇,并从所述类簇中删除所述栈中的栈顶元素及与其相似度最高的簇;
更新所述相似度矩阵。
进一步地,上述方法中,所述根据所述样本访问数据得到正样本集合和负样本集合之后,还包括:
从所述负样本集合中筛选样本访问数据加入正样本集合,并将加入正样本集合的样本访问数据从所述负样本集合中删除,得到最终的正样本集合和负样本集合。
进一步地,上述方法中,所述从所述负样本集合中筛选样本访问数据加入正样本集合,并将加入正样本集合的样本访问数据从所述负样本集合中删除,得到最终的正样本集合和负样本集合,包括:
重复本步骤直至负样本集合为空:每次从上一次的负样本集合中选择与所述上一次正样本集合相似度最大的一个样本访问数据,将所述相似度最大的一个样本访问数据加入正样本集合,并将所述相似度最大的一个样本访问数据从所述负样本集合中删除,并记录每一次的正样本集合和负样本集合;
筛选出记录的其中一次的正样本集合和负样本集合,作为最终的正样本集合和负样本集合。
进一步地,上述方法中,所述筛选出记录的其中一次的正样本集合和负样本集合,作为最终的正样本集合和负样本集合,包括:
计算记录的每一次的正样本集合和负样本集合的损失值;
将损失值最小的一次的正样本集合和负样本集合作为最终的正样本集合和负样本集合。
进一步地,上述方法中,所述
基于得到的正样本相似度和负样本相似度,确定该访问数据为异常访问数据还是正常访问数据之后,还包括:
若所述待检测访问数据为正常访问数据,则将该待检测数据归入正样本集合;
若所述待检测访问数据为异常访问数据,则将该待检测数据归入负样本集合。根据本申请的一个方面,还提供了对网页访问服务器端的样本访问数据进行异常访问检测的服务器,所述服务器包括:
获取装置,用于获取待检测访问数据;
比较装置,用于分别比较所述待检测数据与预先设置的正样品集合和负样本集合的相似度,得到正样本相似度和负样本相似度,其中,正样本集合是样本访问数据中正常访问的访问数据集合,负样本集合样本访问数据中异常访问的访问数据的集合;
确定装置,用于基于得到的正样本相似度和负样本相似度,确定该访问数据为异常访问数据还是正常访问数据。进一步地,上述服务器中,所述
设备还包括集合确定装置,其中,所述集合确定装置用于:
获取样本访问数据,以根据所述样本访问数据得到正样本集合和负样本集合。进一步地,上述服务器中,所述集合确定装置:
通过聚类方式,将相似度高于第一预设值的样本访问数据归入正样本集合,将相似度低于第二预设值的样本访问数据归入负样本集合。进一步地,上述服务器中,所述样本访问数据为同一URL下的访问参数字串中的参数对的值。
进一步地,上述服务器中,所述同一URL下的访问参数字符串中的参数对的值之间的距离,根据所述参数对的值的长度差异、字符集差异和字符2gram差异中的一种或任意组合确定。
进一步地,上述服务器中,所述集合确定装置用于:
将每一个样本访问数据都自成一个簇后,重复选择当前相似度最大的两个簇进行合并得到合并簇,直至成员个数最多的合并簇中的成员个数大于预预设成员个数阈值;
将成员个数最多的合并簇簇作为所述正样本集合,将所述成员个数最多的合并簇之外的簇作为所述负样本集合。
进一步地,上述服务器中,所述集合确定装置装置用于:
计算每两个簇之间的相似度,并将每两个簇与对应的这两个簇之间的相似度作为一个元素存储入一优先队列,其中,所述优先队列的队头元素始终保持是相似度最大的两个簇;
每次从优先队列中取出队头元素,将该队头元素的两个簇进行合并。
进一步地,上述服务器中,所述集合确定装置用于:
将每一个样本访问数据都自成一个簇,将所有簇作为初始的类簇,计算所述类簇中每两个样本访问数据之间的相似度并存储入一相似度矩阵,并创建一个初始空的栈后,重复如下步骤,直至成员个数最多的合并簇中的成员个数大于预设成员个数阈值:
当所述栈为空时,从所述类簇中随机挑选一个簇放入所述栈中;
根据所述相似度矩阵,从所述类簇中查找与所述栈中的栈顶元素相似度最高的簇;
若查找到的与所述栈中的栈顶元素相似度最高的簇不在所述栈中,将与所述栈中的栈顶元素相似度最高的簇入栈;
否则,将所述栈中的栈顶元素及与其相似度最高的簇出栈并合并得到合并簇,将所述合并簇放入所述类簇,并从所述类簇中删除所述栈中的栈顶元素及与其相似度最高的簇;
更新所述相似度矩阵。
进一步地,上述服务器中,所述集合确定装置还用于:
从所述负样本集合中筛选样本访问数据加入正样本集合,并将加入正样本集合的样本访问数据从所述负样本集合中删除,得到最终的正样本集合和负样本集合。
进一步地,上述服务器中,所述集合确定装置还用于:
重复本步骤直至负样本集合为空:每次从上一次的负样本集合中选择与所述上一次正样本集合相似度最大的一个样本访问数据,将所述相似度最大的一个样本访问数据加入正样本集合,并将所述相似度最大的一个样本访问数据从所述负样本集合中删除,并记录每一次的正样本集合和负样本集合;
筛选出记录的其中一次的正样本集合和负样本集合,作为最终的正样本集合和负样本集合。
进一步地,上述服务器中,所述集合确定装置还用于:
计算记录的每一次的正样本集合和负样本集合的损失值;
将损失值最小的一次的正样本集合和负样本集合作为最终的正样本集合和负样本集合。
进一步地,上述服务器中,所述集合确定装置还用于:
若所述待检测访问数据为正常访问数据,则将该待检测数据归入正样本集合;
若所述待检测访问数据为异常访问数据,则将该待检测数据归入负样本集合。根据本申请的另一面,还提供一种基于计算的设备,包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:
获取待检测访问数据;
分别比较所述待检测数据与预先设置的正样品集合和负样本集合的相似度,得到正样本相似度和负样本相似度,其中,正样本集合是样本访问数据中正常访问的访问数据集合,负样本集合样本访问数据中异常访问的访问数据的集合;
基于得到的正样本相似度和负样本相似度,确定该访问数据为异常访问数据还是正常访问数据。本申请在服务器端通过首先在需要对访问数据进行检测时,获取待检测访问数据,接着分别比较所述待检测数据与预先设置的正样品集合和负样本集合的相似度,得到正样本相似度和负样本相似度,其中,正样本集合是样本访问数据中正常访问的访问数据集合,负样本集合样本访问数据中异常访问的访问数据的集合;最后基于得到的正样本相似度和负样本相似度,确定该访问数据为异常访问数据还是正常访问数据。不仅避免了现有技术中基于经验规则导致的漏查异常访问数据和误判率高的问题,还实现了在得到的正样本集合和负样本集合的基础上,能够准确高效实时地识别出每一条待检测访问数据是否为异常访问数据或正常访问数据。进一步的,本申请在基于得到的正样本相似度和负样本相似度,确定该访问数据为异常访问数据还是正常访问数据之后,还包括:若所述待检测访问数据为正常访问数据,则将该待检测数据归入正样本集合;若所述待检测访问数据为异常访问数据,则将该待检测数据归入负样本集合,使得周期性地对正样本集合和负样本集合进行更新,实现了在离线状态下对所述样本访问数据进行离线检测,以得到更新后的正常访问数据对应的正样本集合和异常访问数据对应的负样本集合。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1示出根据本申请一个方面的一种应用于网页访问服务器端的对样本访问数据进行异常访问检测的方法的流程图;
图2示出根据本申请一个方面的一种应用于网页访问服务器端的对样本访问数据进行异常访问检测服务器的模块图。
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
下面结合附图对本申请作进一步详细描述。
根据本申请的一个方面,提供了一种异常访问检测方法,其中,应用于对网页访问服务器端的样本访问数据进行异常访问检测的服务器,所述方法包括:步骤S11~步骤S13。
所述步骤S11,在需要对访问数据进行检测时,获取待检测访问数据;接着,所述步骤S12,分别比较所述待检测数据与预先设置的正样品集合和负样本集合的相似度,得到正样本相似度和负样本相似度,其中,正样本集合是样本访问数据中正常访问的访问数据集合,负样本集合样本访问数据中异常访问的访问数据的集合;最后,所述步骤S13基于得到的正样本相似度和负样本相似度,确定该待检测访问数据为异常访问数据还是正常访问数据;若该待检测访问数据与所述正样本集合的正样本相似度更高,则所述待检测访问数据为正常访问数据,若该待检测访问数据与所述负样本集合的负样本相似度更高,则所述待检测访问数据为异常访问数据。不仅避免了现有技术中基于经验规则导致的漏查异常访问数据和误判率高的问题,还实现了在预先设置的正样本集合和负样本集合的基础上,能够准确高效实时地识别出每一条待检测访问数据是否为异常访问数据或正常访问数据。
下面采用大数据分布式计算工具MapReducer(映射归约)为例,对基于样本访问数据得到正常访问的正样本集合和异常访问的负样本集合进行说明。其中,在Mapper阶段(映射阶段)对web访问下的访问数据对应的访问记录进行预处理,以得到包含有每一访问地址(host+path)下对应的访问参数对(key-value对,kv对)的用于后续确定正常访问的正样本集合和异常访问的负样本集合的有效的样本访问数据,在Reducer阶段(归约阶段)发现同一访问地址(host+path)下所有有效的所述样本访问数据中的异常访问数据。当然,采用MapReducer对基于样本访问数据得到正常访问的正样本集合和异常访问的负样本集合进行说明仅为本申请一个方面的实施例,还可以采用非分布式的计算工具来实现基于样本访问数据得到正常访问的正样本集合和异常访问的负样本集合。
本申请一实施例中,由于在实际应用场景的web访问中,大多数异常访问攻击都是所携带的访问参数存在问题,例如,sql注入、shell脚本攻击等,因此为了进行识别异常访问对应的攻击,本申请从web访问所携带的访问参数入手,对web访问中的所有有效的访问记录中的参数字符串中的参数对进行是否异常的检测。在基于对web访问中的所有有效的访问记录中的参数字符串中的参数对进行是否异常的检测之前,需要对web访问中的所有访问记录进行预处理,以得到不同访问地址下对应的参数字符串中的参数对,用于后续基于包含有参数字符串中的参数对的样本访问数据得到正常访问的正样本集合和异常访问的负样本集合。
本申请一实施例中,本申请的异常访问检测方法还包括:获取样本访问数据,以根据所述样本访问数据得到正样本集合和负样本集合。在获取样本访问数据之前,还可以具体包括:获取实际应用场景中的所有的访问记录;并对所述访问记录进行预处理得到样本访问数据。例如,在基于已有的样本访问数据得到正常访问的正样本集合和异常访问的负样本集合之前,获取到web访问(网页访问)时对应的所有的访问地址对应的访问记录,若获取到的所有的访问记录如下9条访问记录:
?aaaaa=1
www.feizu.com/news?city=北京&district=东城区&spam=1
www.feizu.com/news?city=上海&district=浦东新区&spam=2
www.feizu.com/news?city=杭州&district=西湖区&spam=3
www.feizu.com/news?city=drop table a&district=123&spam=4
www.feimao.com/buy?product_name=上衣&color=蓝色&token=1
www.feimao.com/buy?product_name=裤子&color=红色&token=2
www.feimao.com/buy?product_name=裙子&color=黑色&token=3
www.feimao.com/buy?product_name=/*select*/&color=123&token=4
由于web访问下的访问数据对应的访问记录的数据量很大,且为了获取到用于后续确定正常访问的正样本集合和异常访问的负样本集合,故需要对web访问下的访问数据对应的访问记录进行数据筛选过滤。即在获取到web访问下的上述9条访问记录之后,接着在Mapper阶段(映射阶段)对web访问下的访问数据对应的上述9条访问记录进行预处理,以得到包含有每一访问地址(host+path)下对应的访问参数对(key-value对,kv对)的用于后续确定正常访问的正样本集合和异常访问的负样本集合的有效的样本访问数据。
接着本申请的上述实施例,在获取样本访问数据之前Mapper阶段(映射阶段)对web访问下的访问数据对应的上述9条访问记录进行预处理以得到样本访问数据,可以包括如下至少一种预处理方法:
从所述访问记录选择有效的数据作为样本访问数据;其中,所述有效的数据可以包括web访问下的访问成功后的有效的数据对应的访问记录,所述有效的数据可以包括含有host(域名)且不能为空、访问者源IP地址(Internet Protocol Address,互联网协议地址)存在、响应码为2xx与3xx以及访问参数不为空等。即在Mapper阶段(映射阶段)从web访问下的访问数据对应的上述9条访问记录中选择包含有不为空的域名、存在源IP地址、响应码为2xx与3xx以及访问参数不为空的访问数据来作为所述样本访问数据,以便后续基于该样本访问数据得到该web访问下的不同访问地址对应的正样本集合和负样本集合;
将格式标准化转换后的所述访问记录作为样本访问数据;其中,所述格式标准化转换可以包括将访问记录中的访问参数的字符串转换到相同的编码上来进行后续的比较与计算;所述格式标准化可以包括URL(统一资源定位符)标准化,例如,协议头标准化、urldecode(将字符串以URL进行编码)、base64decode以及转换为utf8等;
将无意义的参数删除后的访问记录作为样本访问数据。其中,所述无意义的参数为非访问者提供的参数,即由前端网页、浏览器以及客户端提供的每个web访问都会携带的固有参数,例如spam、_、__preventCache、lang、token、sessionid等;由于web访问中的异常访问中对应的访问参数及其对应的参数值都是由访问者提供的,故为了减少后续基于所述样本访问数据确定正常访问的正样本集合和异常访问的负样本集合的计算量和更能快速地查找到相应的异常访问,需将web访问中的所有访问记录中的包含有无意义的参数的访问记录删除,以得到删除后的访问记录,并将所述删除后的访问记录作为所述样本访问数据,进而达到减少后续基于所述样本访问数据得到正常访问的正样本集合和异常访问的负样本集合的计算量的目的。
本申请一实施例中,假设大数据分布式计算工具MapReducer中具有2个mapper和对应的2个reducer,分别为mapper1与maaper2及对应的reducer1和reducer2,首先,该两个mapper1与maaper2同时并行对上述web访问下的9条访问记录进行预处理,以得到每一访问地址下对应的参数对。其中,mapper1对上述web访问下的9条访问记录中的如下5条访问记录进行预处理:
?aaaaa=1
www.feizu.com/news?city=北京&district=东城区&spam=1
www.feizu.com/news?city=上海&district=浦东新区&spam=2
www.feimao.com/buy?product_name=上衣&color=蓝色&token=1
www.feimao.com/buy?product_name=裤子&color=红色&token=2
mapper2对上述web访问下的9条访问记录中的剩余的如下4条访问记录进行预处理:
www.feizu.com/news?city=杭州&district=西湖区&spam=3
www.feizu.com/news?city=drop table a&district=123&spam=4
www.feimao.com/buy?product_name=裙子&color=黑色&token=3
www.feimao.com/buy?product_name==/*select*/&color=123&token=4
待mapper1和mapper2并行预处理访问记录完成后,则mapper1有如下4条输出:
?aaaaa=1
//访问记录1无host(域名),为无效访问参数记录,因此丢弃该条访问记录且不输出;
www.feizu.com/news?city=北京&district=东城区&spam=1
//访问记录2输出为:
host+path=www.feizu.com/news,key-value={city=北京,district=东城区}
www.feizu.com/news?city=上海&district=浦东新区&spam=2
//访问记录3输出为:
host+path=www.feizu.com/news,key-value={city=上海,district=浦东新区}
www.feimao.com/buy?product_name=上衣&color=蓝色&token=1
//访问记录4输出为:
host+path=www.feimao.com/buy,key-value={product_name=上衣,color=蓝色}
www.feimao.com/buy?product_name=裤子&color=红色&token=2
//访问记录5输出为:
host+path=www.feimao.com/buy,key-value={product_name=裤子,color=红色}
同时,mapper2有如下4条输出:
www.feizu.com/news?city=杭州&district=西湖区&spam=3
//访问记录6输出为:
host+path=www.feizu.com/news,key-value={city=杭州,district=西湖区}
www.feizu.com/news?city=drop table a&district=123&spam=4
//访问记录7输出为:
host+path=www.feizu.com/news,key-value={city=drop table a,district=123}
www.feimao.com/buy?product_name=裙子&color=黑色&token=3
//访问记录8输出为:
host+path=www.feimao.com/buy,key-value={product_name=裙子,color=黑色}
www.feimao.com/buy?product_name=/*select*/&color=123&token=4
//访问记录9输出为:
host+path=www.feimao.com/buy,key-value={product_name=/*select*/,color=123}
在mapper阶段对web访问中的所有的访问记录进行预处理后,得到mapper阶段对应输出的有效地在不同访问地址(host+path)下对应的参数对(key-value),即得到访问记录中访问成功时对应的有效的访问记录作为样本访问数据;接着在reducer阶段中基于该样本访问数据得到正常访问时对应的正样本集合和异常访问时对应的负样本集合。
本申请一实施例中,由于在不同域名对应的访问地址(host+path)下所访问的参数不一样,故在reducer阶段中分别对每一相同的访问地址(host+path)下的所有的有效的访问就对应的样本访问数据进行异常发现,而不是将所有访问地址下对应的样本访问数据全部放在一起进行异常发现,即样本访问数据为同一URL(统一资源定位符)下的访问参数字符串中的参数对的值。以实现分别基于不同访问地址下的样本访问数据得到正常访问的正样本集合和异常访问的负样本集合,以便后续基于各个访问地址对应的正常访问的正样本集合和异常访问的负样本集合对对应的某一访问地址下的待检测访问数据进行相应的异常检测。
例如,将所述mapper阶段进行预处理后输出得到的样本访问数据作为reducer的输入,其中,样本访问数据由mapper1和mapper2共同输出,对应的应该设置2个ruducer,分别为reducer1,reducer2,由于在reducer阶段中分别对每一相同的访问地址(host+path)下的所有的有效的访问就对应的样本访问数据进行异常发现,故设置reducer1的输入为访问地址(host+path)为www.feizu.com/news下的所有的样本访问数据,如下4条样本访问数据:
key-value={city=北京,district=东城区}
key-value={city=上海,district=浦东新区}
key-value={city=杭州,district=西湖区}
key-value={city=drop table a,district=123}
设置reducer2的输入为访问地址(host+path)为www.feimao.com/buy下的所有的样本访问数据,如下4条样本访问数据:
key-value={product_name=上衣,color=蓝色}
key-value={product_name=裤子,color=红色}
key-value={product_name=裙子,color=黑色}
key-value={product_name=/*select*/,color=123}
本申请一实施例中,所述reducer阶段中根据所述样本访问数据得到正样本集合和负样本集合,具体过程可以为:通过聚类方式,将相似度高于第一预设值的样本访问数据归入正样本集合,将相似度低于第二预设值的样本访问数据归入负样本集合。由于同一访问地址下的正常访问的访问参数的形式之间的变化较小,且具有很好的聚类特性;又由于异常访问与正常访问之间的模式具有较大的差异,并且异常访问聚类特性较差,即异常访问的异常多种多样;又由于对于web服务来说存在很多用户的访问,正常访问下的访问者向服务器传递的访问参数比较规范,而恶意的异常访问用户较少且异常访问的攻击方式并不是重复的且攻击的形式也没有规律性可言,故在根据所述样本访问数据得到正样本集合和负样本集合中,通过聚类方式,将相似度高于第一预设值的样本访问数据归入正样本集合,将相似度低于第二预设值的样本访问数据归入负样本集合。
需要说明的是,所述聚类方式可以包括但不限于包括K-means算法(硬聚类算法)、层次聚类算法、SOM(Self Organizing Maps,自组织映射神经网络)聚类算法以及FCM(fuzzy C-means,模糊c-均值聚类算法)聚类算法,其中,所述层次聚类算法可以包括自下向上的层次聚类算法和自上向下的层次聚类。下面以自下向上的层次聚类算法对同一访问地址下的所有的样本访问数据进行层次聚类,以达到将相似度高于第一预设值的样本访问数据归入正样本集合,将相似度低于第二预设值的样本访问数据归入负样本集合的目的。
接着本申请的上述实施例,在reducer阶段使用层次聚类算法对不同访问地址下的所有样本访问数据分别进行异常访问的发现,其中,reducer1使用层次聚类算法对访问地址(host+path)为www.feizu.com/news下的所有的样本访问数据进行异常访问的发现,得到的处理结果输出:
正常访问的正样本集合为:{{key-value={city=北京,district=东城区},key-value={city=上海,district=浦东新区},key-value={city=杭州,district=西湖区}},异常访问的负样本集合为:{key-value={city=drop table a,district=123}},则有样本访问数据:key-value={city=drop table a,district=123}为访问地址(host+path)为www.feizu.com/news下的异常访问。
与此同时,同理进行并行处理的reducer2使用层次聚类算法对访问地址(host+path)为www.feimao.com/buy下的所有的样本访问数据进行异常访问的发现,得到的处理结果输出:
正常访问的正样本集合为:{key-value={product_name=上衣,color=蓝色},key-value={product_name=裤子,color=红色},key-value={product_name=裙子,color=黑色}},异常访问的负样本集合为:{key-value={product_name=/*select*/,color=123}},则有样本访问数据key-value={product_name=/*select*/,color=123}为访问地址(host+path)为www.feimao.com/buy下的异常访问。
需要说明的是,对不同的访问地址分别为www.feizu.com/news和www.feimao.com/buy下的样本访问数据进行层次聚类,可以在上述实施例中在MapReducer中设置有2个reducer,使得该2个reducer分别并行处理访问地址分别为www.feizu.com/ news和www.feimao.com/buy下的样本访问数据;也可以在MapReducer中只设置有1个reducer,为了保证分别处理不同访问地址对应的样本访问数据,则将访问地址分别为www.feizu.com/news对应的样本访问数据和访问地址为www.feimao.com/buy对应的样本访问数据在该1个reducer中进行串行处理。当然,若在MapReducer中设置的reducer的个数大于不同访问地址的个数,则不同访问地址下对应的样本访问数据可以在不同的reducer中进行并行处理,即不同中央处理器(CPU)的mapper与mapper之间,reducer与reducer之间是并行处理的,不仅提高了对不同访问地址下的所有访问记录进行预处理的效率和对同一访问地址对应的样本访问数据的层次聚类算法的计算效率,还能够并行进行层次聚类算法得到每一访问地址下的正常访问的正样本集合和异常访问的负样本集合。
本申请一实施例中,在reducer阶段将相似度高于第一预设值的样本访问数据归入正样本集合,将相似度高于第二预设值的的样本访问数据归入负样本集合,具体过程可以包括:首先基于任意两个样本访问数据之间的距离来对应指示样本访问数据之间的相似度,若两个样本访问数据之间的距离越小,则表示这两个样本访问数据之间的相似度越高,反之,若两个样本访问数据之间的距离越大,则表示这两个样本访问数据之间的相似度越低;然后,基于样本访问数据之间的距离来得到样本访问数据之间的相似度,传统的欧式距离适合计算数值型向量之间的距离,而本申请中的样本访问数据是以文本字符串的形式体现的,故本申请需基于包含有访问参数字符串中的参数对的值的样本访问参数,对与样本访问数据之间的距离有关的所有距离公式重新进行如下实施例的定义。
本申请一实施例中,在reducer阶段基于样本访问之间的距离来计算各样本访问数据之间的相似度之前,首先要计算任意两个样本访问数据之间的距离,即首先要在所述reducer阶段中基于包含有访问参数字符串中的参数对的值的样本访问参数,对样本访问数据之间的距离进行如下定义:
在同一访问地址(host+path)下的两个访问参数para1与para2的访问参数字符串,分别表示为xi和xj,并分别将每一访问参数字符串分割为多个kv参数对(key-value,其中,k为参数名,v为参数值),假设两个访问参数字符串中共有的参数集合为I,仅访问参数字符串para1才有的参数集合为U1,仅访问参数字符串para2才有的参数集合为U2,使用vik表示参数字符串xi的第k个参数名对应的字符串值。则有任意两个样本访问数据之间的距离(即所述同一URL下的访问参数字符串中的参数对的值之间的距离),是根据所述参数对的值的长度差异、字符集差异和字符2gram差异中的一种或任意组合确定,其中,该2gram用于指示字符串的连续2个字符所构成的集合。首先,定义两个访问参数字符串xi和xj中的参数对的值的长度差异:
其中,|·|表示字符串长度。
接着,对两个访问参数字符串xi和xj中的参数对的值的字符集差异进行定义,访问参数对kv中的字符串v的字符集用于指示组成该字符串v的所有字符的集合,用Cv进行表示;例如,参数对中的字符串v=“123abc”,则有字符集Cv={1,2,3,a,b,c}。在本申请的实施例中定义了五种不同类型的字符集,分别是数字字符集、字母字符集、字母字符集、非ASCII码字符串、特殊字符集、有危害的特殊字符集,如表-1所示:
表-1
字符集类型 | 字符范围 |
数字字符集 | [0-9] |
字母字符集 | [a-zA-Z] |
非ASCII码字符集 | Int(c)>255 |
特殊字符集 | [[]”#$%’+,.:=@\^`{}~-] |
有危害的特殊字符集 | [|/!<>*-;&] |
本申请的实施例中的字符集差异是为了描述参数字符串在字符选择上的差异,当两个参数字符串的字符集在数量上和类型上存在较大的不同时给出一定的惩罚,该惩罚主要表现在字符之间的距离定义上。例如若一个字符集是有危害的特殊字符时,而另一个字符集不是有危害的特殊字符集时,需要加大这种惩罚,即这两个字符集之间的距离定义会相应增大。故在定义字符集差异之前,首先定义字符之间的距离,预设任意两个字符分别为c1和c2,则有字符c1和c2之间的距离如下:
接着定义字符集C与字符c之间的距离如下:
其中,ci是字符集C中的第i个字符。
则有两个字符串xi和xj中的参数对的值之间的字符集差异为:
然后,定义两个字符串xi和xj中的参数对的值之间的字符2gram差异如下:
其中,2gram(.)表示字符串的2-gram集合,即字符串的连续2字符所构成的集合,|·|表示集合中元素的个数。
综上本申请的实施例中定义的三种差异,得到参数字符串xi和xj中的参数对的值之间的距离,即样本访问数据之间的距离定义为:
d(xi,xj)=α1·d1(xi,xj)+α2·d2(xi,xj)+α3·d3(xi,xj)
其中,α1,α2,α3分别是上述三种差异之间的权值,下面以默认的比值1:1:1为例对样本访问数据之间的距离进行计算。
下面接着基于样本访问数据之间的距离,对本申请的实施例中需要涉及的样本访问数据与簇之间的距离和簇与簇之间的簇间距离作简单介绍:
样本访问数据o与簇C={o1,o2…on}之间的距离定义如下:
其中,o1为簇C中的第i个样本访问数据。
簇Ci={oi1,oi2…oin}与簇Cj={oj1,oj2…ojm}之间的簇间距离定义如下:
其中,oip为簇Ci中的第p个样本访问数据,ojm为簇Cj中的第m个样本访问数据。
需要说明的是,上述的簇仅为本申请实施例中的正样本集合和负样本集合的一个方面的一种表现形式,其他现有或今后可能出现的用于表示正样本集合和负样本集合的表现形式仍可适用于本申请。下面以簇的形式为例,对所述正样本集合和所述负样本集合进行进一步说明。
本申请一实施例中,在所述reducer阶段中基于包含有访问参数字符串中的参数对的值的样本访问参数,对任意两个样本访问数据之间的距离进行定义之后,所述reducer阶段中基于自下向上的层次聚类算法根据所述样本访问数据得到正样本集合和负样本集合,具体可以包括:
将每一个样本访问数据都自成一个簇后,重复选择当前相似度最大的两个簇进行合并得到合并簇,直至成员个数最多的合并簇中的成员个数大于预预设成员个数阈值;本申请一实施例中,由于在同一访问地址下的正常访问和异常访问中,正常访问在数量上占绝大多数,而异常访占比较小,故在所有的簇中重复选择当前相似度最大的两个簇进行合并时,并不是重复选择合并直至所有的簇都并合并为一个簇,而是会设置一个预预设成员个数阈值(即停止准则,表示为t),用于当成员个数最多的合并簇中的成员个数占所有簇的簇总个数的百分比超过t时,则停止进行重复选择当前相似度最大的两个簇;然后,将成员个数最多的合并簇作为所述正样本集合,将所述成员个数最多的合并簇之外的簇作为所述负样本集合,以实现对同一访问地址下的所有样本访问数据对应的簇进行层次聚类。
本申请一实施例中,在reducer阶段采用自下向上的层次聚类算法对同一访问地址下的样本访问数据进行聚类具体可以包括如下步骤:
步骤一、将同一访问地址下的所有的n个样本访问数据:o1,o2…on都自成一个簇,得到簇集合C={C1,C2,……,Cn},其中,簇集合中的簇Ci={oi},即簇集合C中的第i个簇对应为样本访问数据oi自成的簇;
接着步骤二、选择簇集合C中的所有簇中的相似度最大的两个簇(即选择两个簇之间的簇间距离最小的两个簇)进行合并,若本次选择得到的距离最小的两个簇分别为Ci和Cj,即i,j=arg mink,l(k≠l)d(Ck,Cl)用于表示簇间距离值d(Ck,Cl)达到最小时对应的簇为Ci和Cj,则将Ci和Cj进行合并得到合并簇C合并,然后将簇集合C中的本次簇间距离最小的两个簇Ci和Cj删除,并将该合并簇C合并加入至删除本次簇间距离最小的两个簇Ci和Cj之后的簇集合C中,以实现基于本次合并簇对该簇集合C进行更新;
本申请一实施例中,由于在层次聚类算法中的所述步骤二中需要对每次选择簇集合C中的当前簇间距离最小的两个簇之间簇间距离进行存储,因此空间复杂度为O(n2),即在层次聚类算法中步骤二的的时间复杂度是O(n2),而在所述步骤三种循环重复执行m(m<n),则时间复杂度为O(m.n2)。
需要说明的是,所述时间复杂度和空间复杂度统称为算法复杂度,即上述的层次聚类算法的复杂度。其中,所述时间复杂度用于指示执行算法所需要的计算工作量;而所述空间复杂度用于指示执行这个算法所需要的内存空间。
为了减少上述reducer阶段中的层次聚类算法中的空间复杂度和时间复杂度,所述选择当前相似度最大的两个簇进行合并,可以具体包括如下步骤:
首先,计算每两个簇之间的相似度,并将每两个簇与对应的这两个簇之间的相似度作为一个元素存储入一优先队列,其中,所述优先队列的队头元素始终保持是相似度最大的两个簇;需要说明的是,所述优先队列中的每一个元素是一个pair对(对象对),每个pair对是由两个簇与该两个簇之间的簇间距离组成的,例如,优先队列中的每一个pair对为{(Cm,Cn),d(Cm,Cn)},其中,队头元素为{(Cm,Cn),d(Cm,Cn)min},即队头元素为簇集合C中的相似度最大的两个簇与其对应的簇间距离的pair对。当每次从所述优先队列中取出队头元素时,都会重新更新取出队头元素后的优先队列,以保证所述优先队列中的队头元素(即第一个元素)始终是簇集合C中的所有簇中的最相似的两个簇及其簇间距离对应的pair对。
接着,步骤二每次从优先队列中取出队头元素,将该队头元素的两个簇进行合并,使得在每次需要选择当前相似度最大的两个簇进行合并的时候,可以快速地从所述优先队列中取出队头元素中的两个簇进行合并即可,进而将层次聚类算法中对应的时间复杂度有效地下降为O(m×n×log n)+O(n2)。
然后步骤三、选择出成员个数最多的合并簇Cm,即m=arg maxi|Ci|,表示成员个数最大时对应的合并簇Ci的成员个数为m,得到Cm=Ci;在获得成员个数最多的合并簇Cm之后,判断合并簇的成员个数|Cm|是否大于预预设成员个数阈值t,即|Cm|>t,若是,则执行步骤四;若否,则继续重复执行所述步骤二和所述步骤三;
最后步骤四、将合并簇的成员个数|Cm|大于预预设成员个数阈值t时对应的合并簇Cm作为正样本簇,即C1=Cm,并将簇集合C中的所述成员个数最多的合并簇Cm之外的所有簇进行合并,以得到负样本簇,即Cn=Ui≠mCi,C2=Cn。例如,若预预设成员个数阈值t预置为70%,则认为同一访问地址下的所有样本访问数据对应的簇中的至少70%的簇为正常访问的正样本簇C1,而同一访问地址下的所有样本访问数据对应的簇中的正样本簇C1之外的所有的簇为负样本簇C2。
本申请的上述实施例中,通过所述步骤一~所述步骤四,实现了基于层次聚类算法对同一访问地址下的所有样本访问数据对应的簇进行聚类。其中,正样本簇C1中包含了比例为t的正常访问的样本访问数据,而负样本簇C2(存在异常访问的样本访问数据)不仅包含有正常访问时对应的样本访问数据,还包含有异常访问时对应的样本访问数据,以待后续从所述负样本簇C2(存在异常访问的样本访问数据)中筛选出正常访问的样本访问数据加入正样本簇C1,并将加入正样本簇C1的样本访问数据从所述负样本簇C2中删除,以得到准确的最终的正样本集合和负样本集合
本申请一实施例中,由于上述层次聚类算法中引入的优先队列需要其他的辅助结构或工具来存储每个pair对在优先队列中的位置并加以更新在该优先队列中的位置,又由于优先队列只是始终保持队头元素中的两个簇的簇间距离为最短,其他元素没有顺序要求,故不能采用顺序存储的结构,导致空间占用有所提高。为了降低对内存空间的额外占用,在本申请的上述实施例中采用相似度矩阵来存储簇集合C中的任意两个簇之间的相似度(即簇间距离),为了降低层次聚类算法中的时间复杂度,在上述实施例中采用NearestNeighbor Chain(最近邻链)算法对同一访问地址下的所有样本访问数据对应的簇进行合并,直至成员个数最多的合并簇中的成员个数大于预预设成员个数阈值,不仅可以降低层次聚类算法中的时间复杂度,还可以将层次聚类算法中的时间复杂度降低为O(n2)。
需要说明的是,Nearest Neighbor Chain(最近邻链)算法能够改进绝大多数条件下的凝聚层次聚类(自下向上的层次聚类)算法中的时空效率。但是使用Nearest NeighborChain的前提条件是:必须满足可规约性,其中,所述可规约性的定义如下:
对于任意类簇A,B,C及其距离函数dist,应当满足以下的约束条件:
dist(A∪B,C)≥min(diast(A,C),diast(B,C))
即类簇A和类错B合并之后的合并簇A∪B与类簇C之间的距离dist(A∪B,C),大于等于类簇A与类簇B之间的簇间距离min(diast(A,C)和类簇B与类簇C之间的簇间距离diast(B,C))中的最小的一个簇间距离。
当然,采用上述Nearest Neighbor Chain(最近邻链)算法对同一访问地址下的所有样本访问数据对应的簇进行合并,直至成员个数最多的合并簇中的成员个数大于预预设成员个数阈值仅为本申请一个方面的一实施例,其他满足以上可归约性的距离函数也可以适用与本申请的实施例中,例如,凝聚层次聚类中常见的Single-Linkage(单一连接距离),Complete-Linkage(全连接距离),Average-Linkage(平均连接距离),质心法,Ward层次聚类等距离函数。
还需说明的是,Nearest Neighbor Chain(最近邻链)算法通过构建类似A->B->C->D->…的最近邻链来决定所有类簇中的那两个簇可以进行合并,其中,最近邻链中的每个当前簇都是其上一个簇的最近邻居,即当前簇是与其上一个簇的簇间距离最小的簇。
下面以Nearest Neighbor Chain(最近邻链)算法为例,对所述将每一个样本访问数据都自成一个簇后,重复选择当前相似度最大的两个簇进行合并得到合并簇,直至成员个数最多的合并簇中的成员个数大于预预设成员个数阈值进行说明,具体步骤如下:
首先,将同一访问地址下的每一个样本访问数据都自成一个簇,将所有簇作为初始的类簇,此处的初始的类簇与上述层次聚类中的簇集合相同,即初始的类簇为C={C1,C2,……,Cn},其中,初始的类簇中的每一个簇都是只包含一个样本访问数据;
接着,计算所述类簇中每两个簇之间的相似度并存储入一相似度矩阵H=n×n(即簇间距离矩阵)中,该相似度矩阵中的每一个元素为所述初始的类簇中的对应的簇与簇之间的距离,且该相似度矩阵中的元素按照簇与簇之间的距离的从小到大的顺序进行依次存储的;由于不仅在层次聚类中会用到类簇中的簇与簇之间的距离,而且后续对正样本簇和负样本簇进行划分也需要簇与簇之间的距离,因此使用HashMap(哈希表)来存储除去距离冗余的相似度矩阵(即该相似度矩阵可以为上三角相似度矩阵或下三角相似度矩阵),使得不仅不需要额外的内存空间来保存类簇中的簇与簇之间的距离,还可以用于后续更新相似度矩阵为H=(n-s)×(n-s),(n>s≥1)或者选择与当前簇之间的距离最短(相似度最高)的一个簇以及选择簇间距离最短时对应的两个簇时,能够快速准确地从所述HashMap对应的相似度矩阵中查找到对应簇,进而提高了后续合并簇时需查找某一个簇的查找效率,同时也减少了计算任意簇与簇之间的距离的计算量;
然后,创建一个初始空的栈后,重复如下步骤,直至成员个数最多的合并簇中的成员个数大于预预设成员个数阈值:
当所述栈为空时,从所述类簇中随机挑选一个簇Ci放入所述栈中,该簇Ci为类簇中的第i个簇;
根据所述相似度矩阵H,从所述类簇C中查找与所述栈中的栈顶元素CC相似度最高的簇;其中,所述栈中的栈顶元素为所述栈中的多个元素中的第一个元素;
若查找到的与所述栈中的栈顶元素CC相似度最高(簇间距离最短)的簇CD不在所述栈中,将与所述栈中的栈顶元素相似度最高的簇CD入栈;
否则,将所述栈中的栈顶元素CC及与其相似度最高的簇CD出栈并合并得到合并簇CE,将所述合并簇CE放入所述类簇C中,并从所述类簇C中删除所述栈中的栈顶元素CC及与其相似度最高的簇CD;
更新所述相似度矩阵H=(n-1)×(n-1);
随后,继续重复执行选择当前相似度最大的两个簇进行合并得到合并簇,不需要重复执行至所有的簇都被合并,而是直至成员个数最多的合并簇Cm中的成员个数|Cm|大于预预设成员个数阈值t,那么共重复选择了m(m<n)次,因此基于最近邻链的层次聚类算法的时间复杂度为O(m×n),再加上需要计算类簇中的任意两个簇之间的簇间距离,得到基于最近邻链的层次聚类的总的时间复杂度为O(n2),实现了降低层次聚类中的时间复杂度,且降低至O(n2)。
本申请的上述实施例中,通过自下向上的层次聚类算法和最近邻链算法,实现了基于层次聚类算法对同一访问地址下的所有样本访问数据对应的簇进行聚类,其中,正样本簇C1中包含了比例为t的正常访问的样本访问数据,而负样本簇C2(存在异常访问的样本访问数据)不仅包含有正常访问时对应的样本访问数据,还包含有异常访问时对应的样本访问数据。为了将负样本簇C2中包含有的正常访问的样本访问数据筛选出来,加入到正样本簇C1中,以得到更加准确的正样本簇和负样本簇,所述根据所述样本访问数据得到正样本集合和负样本集合之后,还可以包括步骤:
从所述负样本集合中筛选样本访问数据加入正样本集合,并将加入正样本集合的样本访问数据从所述负样本集合中删除,得到最终的正样本集合和负样本集合。例如,设同一访问地址下的样本访问数据为100个,若步骤S11中基于层次聚类算法得到的正样本簇C1={o1,o2,o3,o4,……,o70},则有负样本簇C2={o71,o72,o73,o74,……,o100},其中,负样本簇C2(存在异常访问的样本访问数据)中不仅包含有正常访问时对应的样本访问数据,还包含有异常访问时对应的样本访问数据,故按照簇间距离最优划分的策略从负样本簇C2中筛选样本访问数据加入至正样本簇C1中,若按照簇间距离最优划分的策略从负样本簇C2中筛选出来的样本访问数据为{o71,o72,o73,o74,o75,o76,o77,o78,o79,o80,o81,o83,o84,o85,o86,o87,o88,o89,o90,o91,o92,o93,o95,o96,o97,o98,o99,o100},则将从负样本簇C2中筛选出来的正常访问的样本访问数据{o71,o72,o73,o74,o75,o76,o77,o78,o79,o80,o81,o83,o84,o85,o86,o87,o88,o89,o90,o91,o92,o93,o95,o96,o97,o98,o99,o100}加入至正样本簇C1中,以得到更加准确的最终的正样本簇C1和负样本簇C2,以待后续基于更加准确的正样本簇和负样本簇对同一访问地址下的任意一条在线或者离线的访问数据进行异常判断,进而提高判断的精确度并减低误判率。
下面以迭代划分为例,对按照簇间距离的最优划分策略从所述负样本集合中筛选样本访问数据加入正样本集合,并将加入正样本集合的样本访问数据从所述负样本集合中删除,得到最终的正样本集合和负样本集合进行进一步说明,具体可以包括如下步骤:
重复本步骤直至负样本集合为空:每次从上一次的负样本集合中选择与所述上一次正样本集合相似度最大的一个样本访问数据,将所述相似度最大的一个样本访问数据加入正样本集合,并将所述相似度最大的一个样本访问数据从所述负样本集合中删除,并记录每一次的正样本集合和负样本集合;例如,首先将在所述步骤S11中基于层次聚类得到的正样本簇C1和负样本簇C2作为初始划分P0={C1,C2},当前划分为index=1;接着,从负样本簇C2中选择与正样本簇C1距离最近(即相似度最大)的样本访问数据oi,即i=arg mink d(ok,ol),ok∈C2,将所述样本访问数据oi加入至正样本簇C1,并将样本访问数据oi从负样本簇C2中删除,即C1:=C1+{oi},C2:=C2-{oi};同时记录本次划分后得到的正样本簇和负样本簇,即Pindex={C1,C2};然后,index=index+1,即循环执行将从上一次的负样本簇中选择与所述上一次正样本簇相似度最大的一个样本访问数据,将所述相似度最大的一个样本访问数据加入正样本簇,并将所述相似度最大的一个样本访问数据从所述负样本簇中删除,并记录每一次的正样本簇和负样本簇,直至|C2|=0,以得到多个划分所对应的正样本簇和负样本簇;
最后,从每一次记录的正样本簇和负样本簇中筛选出记录的其中一次的正样本集合和负样本集合,作为最终的正样本集合和负样本集合,以筛选得到最优的划分时对应的最终的正样本簇C1和负样本簇C2。
接着本申请的上述实施例,为了从多个划分所对应的正样本簇和负样本簇中筛选出最优划分所对应的正样本簇和负样本簇,在对正样本簇和负样本簇进行多个迭代划分之后,设定一个损失函数,用于在所述步骤S11中从多个划分所对应的正样本簇和负样本簇中筛选出记录的其中一次的正样本集合和负样本集合,作为最终的正样本集合和负样本集合,具体筛选过程可以包括:
计算记录的每一次的正样本集合和负样本集合的损失值;需要说明的是,用于计算正样本簇和负样本簇之间的损失值所对应的损失函数e为:
其中,正样本簇C1是样本访问数据还没有加入之前的正样本簇(即上一次正样本簇),负样本簇C2是样本访问数据还没有删除之前的负样本簇(即上一次负样本簇),由损失函数e可知,被划分的样本访问数据oi与正样本簇C1的距离越小越好,同时与负样本簇C2的距离越大越好。基于该损失函数e计算多个划分对应的正样本簇和负样本簇的损失值,以待后续从多个损失值中删选出最小的损失值。
接着,将损失值最小的一次的正样本集合和负样本集合作为最终的正样本集合和负样本集合。例如若多个划分对应的正样本簇和负样本簇的损失值{e1,e2,e3,……,en}中的emin=ep,其中e1对应初始划分P0={C1,C2},则将第p次划分对应的正样本簇C1和负样本簇C2确定为最终的正样本簇和负样本簇,进而得到emin=ep对应的最优划分P*={C1,C2},以待后续基于得到的准确的最优划分对应的最终正样本簇和负样本簇对同一访问地址下的在线访问数据进行异常检测。
本申请一实施例中,在基于同一访问地址下的所有的样本访问数据确定正常访问的正样本簇和异常访问的负样本簇之后,在需要对访问数据进行检测时,所述步骤S11获取待检测访问数据,接着,所述步骤S12分别比较待检测访问数据与所述正样本集合和负样本集合中的正样本相似度和负样本相似度相似度,得到正样本相似度和负样本相似度;所述若所述待检测访问数据与所述负样本簇的负样本相似度更高(距离更短),则所述待检测访问数据为异常访问数据;在所述步骤S13中,若所述待检测访问数据与所述正样本簇的正样本相似度更高,则所述待检测访问数据为正常访问数据,以实现对在线访问的待检测访问数据进行异常访问的检测。不仅避免了现有技术中基于经验规则导致的漏查异常访问数据和误判率高的问题,还实现了在得到的正样本集合和负样本集合的基础上,能够准确高效实时地识别出每一条待检测访问数据是否为异常访问数据或正常访问数据。
本申请一实施例中,为了更方便地检测并显示出待检测访问数据是否为异常访问还是正常访问,在得到最优划分P*={C1,C2}之后,设置如下判断判断输出准则:
其中,0表示当前判断的待检测访问数据oi属于正样本簇C1,即当前判断的待检测访问数据oi为正常访问;1表示当前判断的待检测访问数据oi属于负样本簇C2,即当前判断的待检测访问数据oi为异常访问。例如,当待检测访问数据为www.feimao.com/buy? product_name==/*select*/&color=123&token=4时,若异常检测判断输出为1,则表示该条待检测访问数据为异常访问下对应的访问记录;当待检测访问数据为www.feimao.com/buy?product_name=裙子&color=黑色&token=3时,若异常检测判断输出为0,则表示该条待检测访问数据为正常访问下对应的访问记录,实现了对待检测访问数据进行快速准确地异常检测,并降低了误判率。
本申请一实施例中,为了保证同一访问地址下的正样本簇和负样本簇能够随时准确地且误判率最小的判断出所述待检测访问数据是否为异常访问,则需要在基于得到的正样本相似度和负样本相似度,确定该访问数据为异常访问数据还是正常访问数据之后,还包括:若所述待检测访问数据为正常访问数据,则将该待检测数据归入正样本集合;若所述待检测访问数据为异常访问数据,则将该待检测数据归入负样本集合,还会周期性地对正样本集合和负样本集合进行更新,实现了在离线状态下对所述样本访问数据进行离线检测,以得到更新后的正常访问数据对应的正样本集合和异常访问数据对应的负样本集合。例如,基于访问地址(host+path)为www.feizu.com/news下的2016年7月12日当天的所有样本访问数据得到的正样本簇和负样本簇,来对2016年7月13日当天的在线的待检测访问数据进行相似度比较之后,由于2016年7月13日当天对在线的待检测访问数据进行相似度比较基于的是2016年7月12日当天的所有样本访问数据得到的正样本簇和负样本簇,而2016年7月13日当天访问地址(host+path)为www.feizu.com/news下的所有的样本访问数据已经更新,故若想在2016年7月14日当天对在线的待检测访问数据进行相似度比较之前,需要基于2016年7月12日当天的所有样本访问数据和2016年7月13日当天的所有样本访问数据对所述正常访问的正样本集合和异常访问的负样本集合进行离线更新,以得到用于在2016年7月14日当天对若想在2016年7月14日当天对在线的待检测访问数据进行相似度比较的更新后的正样本簇和负样本簇,使得能够有效准确地判断出待检测访问数据是否为异常访问。
本申请一具体的应用实例中,如图1所示,本申请的实施例中提供的一种应用于网页访问服务器端的对样本访问数据进行异常访问检测的方法,具体可以包括如下五个步骤:
首先,步骤S1对同一访问地址下的所有访问记录进行预处理;例如获取同一访问地址下的所有访问的数据对应的访问记录,并对所述访问记录进行预处理以得到样本访问数据。
接着,步骤S2对所有样本访问数据进行自底向上层次聚类;通过自底向上的层次聚类方式,对同一访问地址下的所有样本访问数据进行层次聚类,以将相似度高的样本访问数据归入正样本集合,将相似度低的样本访问数据归入负样本集合。
然后,步骤S3对正样本集合和负样本集合进行迭代划分;对基于自底向上的层次聚类的方式得到的负样本集合进行筛选,以从每次从上一次的所述负样本集合中筛选出与上一次的正样本集合相似度最高(距离最近)的样本访问数据加入正样本集合,并将加入正样本集合的样本访问数据从所述负样本集合中删除,以得到每一次划分对应的正样本集合和负样本集合。
随后,步骤S4选择最优划分;计算记录的每一次划分对应的正样本集合和负样本集合的损失值;将损失值最小的一次的正样本集合和负样本集合作为最终的正样本集合和负样本集合。
最后,步骤S5对待检测访问数据进行异常检测;比较待检测访问数据与所述最终的正样本集合和负样本集合分别对应的正样本相似度和负样本相似度相似度,检测若所述待检测访问数据与所述负样本集合的负样本相似度更高,则所述待检测访问数据为异常访问数据;检测若所述待检测访问数据与所述正样本集合的正样本相似度更高,则所述待检测访问数据为正常访问数据。实现了对同一访问地址下的待检测访问数据进行异常访问的检测,不仅避免了现有技术中基于经验规则导致的漏查异常访问数据和误判率高的问题,还实现了在得到的正样本集合和负样本集合的基础上,能够准确高效实时地识别出每一条待检测访问数据是否为异常访问数据或正常访问数据。
根据本申请的另一个方面,还提供了一种异常访问检测设备,应用于对网页访问服务器端的样本访问数据进行异常访问检测的服务器,如图2所示,所述服务器包括:获取装置11、比较装置12和确定装置13。
获取装置,用于在需要对访问数据进行检测时,获取待检测访问数据;接着比较装置12,用于分别比较所述待检测数据与预先设置的正样品集合和负样本集合的相似度,得到正样本相似度和负样本相似度,其中,正样本集合是样本访问数据中正常访问的访问数据集合,负样本集合样本访问数据中异常访问的访问数据的集合;最后,所述确定装置13基于得到的正样本相似度和负样本相似度,确定该待检测访问数据为异常访问数据还是正常访问数据;若该待检测访问数据与所述正样本集合的正样本相似度更高,则所述待检测访问数据为正常访问数据,若该待检测访问数据与所述负样本集合的负样本相似度更高,则所述待检测访问数据为异常访问数据。不仅避免了现有技术中基于经验规则导致的漏查异常访问数据和误判率高的问题,还实现了在预先设置的正样本集合和负样本集合的基础上,能够准确高效实时地识别出每一条待检测访问数据是否为异常访问数据或正常访问数据。
下面采用大数据分布式计算工具MapReducer(映射归约)为例,对基于样本访问数据得到正常访问的正样本集合和异常访问的负样本集合进行说明。其中,在Mapper阶段(映射阶段)对web访问下的访问数据对应的访问记录进行预处理,以得到包含有每一访问地址(host+path)下对应的访问参数对(key-value对,kv对)的用于后续确定正常访问的正样本集合和异常访问的负样本集合的有效的样本访问数据,在Reducer阶段(归约阶段)发现同一访问地址(host+path)下所有有效的所述样本访问数据中的异常访问数据。当然,采用MapReducer对基于样本访问数据得到正常访问的正样本集合和异常访问的负样本集合进行说明仅为本申请一个方面的实施例,还可以采用非分布式的计算工具来实现基于样本访问数据得到正常访问的正样本集合和异常访问的负样本集合。
本申请一实施例中,由于在实际应用场景的web访问中,大多数异常访问攻击都是所携带的访问参数存在问题,例如,sql注入、shell脚本攻击等,因此为了进行识别异常访问对应的攻击,本申请从web访问所携带的访问参数入手,对web访问中的所有有效的访问记录中的参数字符串中的参数对进行是否异常的检测。在基于对web访问中的所有有效的访问记录中的参数字符串中的参数对进行是否异常的检测之前,需要对web访问中的所有访问记录进行预处理,以得到不同访问地址下对应的参数字符串中的参数对,用于后续基于包含有参数字符串中的参数对的样本访问数据得到正常访问的正样本集合和异常访问的负样本集合。
本申请一实施例中,在本申请的异常访问检测的设备还包括:集合确定装置,其中,所述集合确定装置还可以具体用于:获取实际应用场景中的所有的访问记录;并对所述访问记录进行预处理得到样本访问数据。例如,在基于已有的样本访问数据得到正常访问的正样本集合和异常访问的负样本集合之前,获取到web访问(网页访问)时对应的所有的访问地址对应的访问记录,若获取到的所有的访问记录如下9条访问记录:
?aaaaa=1
www.feizu.com/news?city=北京&district=东城区&spam=1
www.feizu.com/news?city=上海&district=浦东新区&spam=2
www.feizu.com/news?city=杭州&district=西湖区&spam=3
www.feizu.com/news?city=drop table a&district=123&spam=4
www.feimao.com/buy?product_name=上衣&color=蓝色&token=1
www.feimao.com/buy?product_name=裤子&color=红色&token=2
www.feimao.com/buy?product_name=裙子&color=黑色&token=3
www.feimao.com/buy?product_name==/*select*/&color=123&token=4
由于web访问下的访问数据对应的访问记录的数据量很大,且为了获取到用于后续确定正常访问的正样本集合和异常访问的负样本集合,故需要对web访问下的访问数据对应的访问记录进行数据筛选过滤。即在获取到web访问下的上述9条访问记录之后,接着在Mapper阶段(映射阶段)对web访问下的访问数据对应的上述9条访问记录进行预处理,以得到包含有每一访问地址(host+path)下对应的访问参数对(key-value对,kv对)的用于后续确定正常访问的正样本集合和异常访问的负样本集合的有效的样本访问数据。
接着本申请的上述实施例,所述集合确定装置在Mapper阶段(映射阶段)对web访问下的访问数据对应的上述9条访问记录进行预处理以得到样本访问数据,可以包括如下至少一种预处理方法:
从所述访问记录选择有效的数据作为样本访问数据;其中,所述有效的数据可以包括web访问下的访问成功后的有效的数据对应的访问记录,所述有效的数据可以包括含有host(域名)且不能为空、访问者源IP地址(Internet Protocol Address,互联网协议地址)存在、响应码为2xx与3xx以及访问参数不为空等。即在Mapper阶段(映射阶段)从web访问下的访问数据对应的上述9条访问记录中选择包含有不为空的域名、存在源IP地址、响应码为2xx与3xx以及访问参数不为空的访问数据来作为所述样本访问数据,以便后续基于该样本访问数据得到该web访问下的不同访问地址对应的正样本集合和负样本集合;
将格式标准化转换后的所述访问记录作为样本访问数据;其中,所述格式标准化转换可以包括将访问记录中的访问参数的字符串转换到相同的编码上来进行后续的比较与计算;所述格式标准化可以包括URL(统一资源定位符)标准化,例如,协议头标准化、urldecode(将字符串以URL进行编码)、base64decode以及转换为utf8等;
将无意义的参数删除后的访问记录作为样本访问数据;其中,所述无意义的参数为非访问者提供的参数,即由前端网页、浏览器以及客户端提供的每个web访问都会携带的固有参数,例如spam、_、__preventCache、lang、token、sessionid等;由于web访问中的异常访问中对应的访问参数及其对应的参数值都是由访问者提供的,故为了减少后续基于所述样本访问数据确定正常访问的正样本集合和异常访问的负样本集合的计算量和更能快速地查找到相应的异常访问,需将web访问中的所有访问记录中的包含有无意义的参数的访问记录删除,以得到删除后的访问记录,并将所述删除后的访问记录作为所述样本访问数据,进而达到减少后续基于所述样本访问数据得到正常访问的正样本集合和异常访问的负样本集合的计算量的目的。
本申请一实施例中,假设大数据分布式计算工具MapReducer中具有2个mapper和对应的2个reducer,分别为mapper1与maaper2及对应的reducer1和reducer2,首先,该两个mapper1与maaper2同时并行对上述web访问下的9条访问记录进行预处理,以得到每一访问地址下对应的参数对。其中,mapper1对上述web访问下的9条访问记录中的如下5条访问记录进行预处理:
?aaaaa=1
www.feizu.com/news?city=北京&district=东城区&spam=1
www.feizu.com/news?city=上海&district=浦东新区&spam=2
www.feimao.com/buy?product_name=上衣&color=蓝色&token=1
www.feimao.com/buy?product_name=裤子&color=红色&token=2
mapper2对上述web访问下的9条访问记录中的剩余的如下4条访问记录进行预处理:
www.feizu.com/news?city=杭州&district=西湖区&spam=3
www.feizu.com/news?city=drop table a&district=123&spam=4
www.feimao.com/buy?product_name=裙子&color=黑色&token=3
www.feimao.com/buy?product_name==/*select*/&color=123&token=4
待mapper1和mapper2并行预处理访问记录完成后,则mapper1有如下4条输出:
?aaaaa=1
//访问记录1无host(域名),为无效访问参数记录,因此丢弃该条访问记录且不输出;
www.feizu.com/news?city=北京&district=东城区&spam=1
//访问记录2输出为:
host+path=www.feizu.com/news,key-value={city=北京,district=东城区}
www.feizu.com/news?city=上海&district=浦东新区&spam=2
//访问记录3输出为:
host+path=www.feizu.com/news,key-value={city=上海,district=浦东新区}
www.feimao.com/buy?product_name=上衣&color=蓝色&token=1
//访问记录4输出为:
host+path=www.feimao.com/buy,key-value={product_name=上衣,color=蓝色}
www.feimao.com/buy?product_name=裤子&color=红色&token=2
//访问记录5输出为:
host+path=www.feimao.com/buy,key-value={product_name=裤子,color=红色}
同时,mapper2有如下4条输出:
www.feizu.com/news?city=杭州&district=西湖区&spam=3
//访问记录6输出为:
host+path=www.feizu.com/news,key-value={city=杭州,district=西湖区}
www.feizu.com/news?city=drop table a&district=abc&spam=4
//访问记录7输出为:
host+path=www.feizu.com/news,key-value={city=drop table a,district=123}
www.feimao.com/buy?product_name=裙子&color=黑色&token=3
//访问记录8输出为:
host+path=www.feimao.com/buy,key-value={product_name=裙子,color=黑色}
www.feimao.com/buy?product_name=/*select*/&color=123&token=4
//访问记录9输出为:
host+path=www.feimao.com/buy,key-value={product_name=/*select*/,color=123}
在mapper阶段对web访问中的所有的访问记录进行预处理后,得到mapper阶段对应输出的有效地在不同访问地址(host+path)下对应的参数对(key-value),即得到访问记录中访问成功时对应的有效的访问记录作为样本访问数据;接着在reducer阶段在所述集合确定装置中基于该样本访问数据得到正常访问时对应的正样本集合和异常访问的负样本集合。
本申请一实施例中,由于在不同域名对应的访问地址(host+path)下所访问的参数不一样,故在reducer阶段中分别对每一相同的访问地址(host+path)下的所有的有效的访问就对应的样本访问数据进行异常发现,而不是将所有访问地址下对应的样本访问数据全部放在一起进行异常发现,即样本访问数据为同一URL(统一资源定位符)下的访问参数字符串中的参数对的值。以实现分别基于不同访问地址下的样本访问数据得到正常访问的正样本集合和异常访问的负样本集合,以便后续基于各个访问地址对应的正常访问的正样本集合和异常访问的负样本集合对对应的某一访问地址下的待检测访问数据进行相应的异常检测。
例如,将所述mapper阶段进行预处理后输出得到的样本访问数据作为reducer的输入,其中,样本访问数据由mapper1和mapper2共同输出,对应的应该设置2个ruducer,分别为reducer1,reducer2,由于在reducer阶段中分别对每一相同的访问地址(host+path)下的所有的有效的访问就对应的样本访问数据进行异常发现,故设置reducer1的输入为访问地址(host+path)为www.feizu.com/news下的所有的样本访问数据,如下4条样本访问数据:
key-value={city=北京,district=东城区}
key-value={city=上海,district=浦东新区}
key-value={city=杭州,district=西湖区}
key-value={city=drop table a,district=123}
设置reducer2的输入为访问地址(host+path)为www.feimao.com/buy下的所有的样本访问数据,如下4条样本访问数据:
key-value={product_name=上衣,color=蓝色}
key-value={product_name=裤子,color=红色}
key-value={product_name=裙子,color=黑色}
key-value={product_name=/*select*/,color=123}
本申请一实施例中,所述reducer阶段在所述集合确定装置中根据所述样本访问数据得到正样本集合和负样本集合,具体过程可以为:通过聚类方式,将相似度高于第一预设值的样本访问数据归入正样本集合,将相似度低于第二预设值的样本访问数据归入负样本集合。。由于同一访问地址下的正常访问的访问参数的形式之间的变化较小,且具有很好的聚类特性;又由于异常访问与正常访问之间的模式具有较大的差异,并且异常访问聚类特性较差,即异常访问的异常多种多样;又由于对于web服务来说存在很多用户的访问,正常访问下的访问者向服务器传递的访问参数比较规范,而恶意的异常访问用户较少且异常访问的攻击方式并不是重复的且攻击的形式也没有规律性可言,故所述集合确定装置用于在根据所述样本访问数据得到正样本集合和负样本集合中,通过聚类方式,将相似度高于第一预设值的样本访问数据归入正样本集合,将相似度低于第二预设值的样本访问数据归入负样本集合。
需要说明的是,所述聚类的方式可以包括但不限于包括K-means算法(硬聚类算法)、层次聚类算法、SOM(Self Organizing Maps,自组织映射神经网络)聚类算法以及FCM(fuzzy C-means,模糊c-均值聚类算法)聚类算法,其中,所述层次聚类算法可以包括自下向上的层次聚类算法和自上向下的层次聚类。下面以自下向上的层次聚类算法对同一访问地址下的所有的样本访问数据进行层次聚类,以达到将相似度高于第一预设值的样本访问数据归入正样本集合,将相似度低于第二预设值的样本访问数据归入负样本集合的目的。
接着本申请的上述实施例,在reducer阶段使用层次聚类算法对不同访问地址下的所有样本访问数据分别进行异常访问的发现,其中,reducer1使用层次聚类算法对访问地址(host+path)为www.feizu.com/news下的所有的样本访问数据进行异常访问的发现,得到的处理结果输出:
正常访问的正样本集合为:{{key-value={city=北京,district=东城区},key-value={city=上海,district=浦东新区},key-value={city=杭州,district=西湖区}},异常访问的负样本集合为:{key-value={city=drop table a,district=123}},则有样本访问数据:key-value={city=drop table a,district=123}为访问地址(host+path)为www.feizu.com/news下的异常访问。
与此同时,同理进行并行处理的reducer2使用层次聚类算法对访问地址(host+path)为www.feimao.com/buy下的所有的样本访问数据进行异常访问的发现,得到的处理结果输出:
正常访问的正样本集合为:{key-value={product_name=上衣,color=蓝色},key-value={product_name=裤子,color=红色},key-value={product_name=裙子,color=黑色}},异常访问的负样本集合为:{key-value={product_name=/*select*/,color=123}},则有样本访问数据key-value={product_name=/*select*/,color=123}为访问地址(host+path)为www.feimao.com/buy下的异常访问。
需要说明的是,对不同的访问地址分别为www.feizu.com/news和www.feimao.com/buy下的样本访问数据进行层次聚类,可以在上述实施例中在MapReducer中设置有2个reducer,使得该2个reducer分别并行处理访问地址分别为www.feizu.com/ news和www.feimao.com/buy下的样本访问数据;也可以在MapReducer中只设置有1个reducer,为了保证分别处理不同访问地址对应的样本访问数据,则将访问地址分别为www.feizu.com/news对应的样本访问数据和访问地址为www.feimao.com/buy对应的样本访问数据在该1个reducer中进行串行处理。当然,若在MapReducer中设置的reducer的个数大于不同访问地址的个数,则不同访问地址下对应的样本访问数据可以在不同的reducer中进行并行处理,即不同中央处理器(CPU)的mapper与mapper之间,reducer与reducer之间是并行处理的,不仅提高了对不同访问地址下的所有访问记录进行预处理的效率和对同一访问地址对应的样本访问数据的层次聚类算法的计算效率,还能够并行进行层次聚类算法得到每一访问地址下的正常访问的正样本集合和异常访问的负样本集合。
本申请一实施例中,在reducer阶段的将相似度高于第一预设值的样本访问数据归入正样本集合,将相似度高于第二预设值的的样本访问数据归入负样本集合,具体可以用于:首先基于任意两个样本访问数据之间的距离来来指示样本访问数据之间的相似度,若两个样本访问数据之间的距离越小,则表示这两个样本访问数据之间的相似度越高,反之,若两个样本访问数据之间的距离越大,则表示这两个样本访问数据之间的相似度越低;然后,基于样本访问数据之间的距离来得到样本访问数据之间的相似度,传统的欧式距离适合计算数值型向量之间的距离,而本申请中的样本访问数据是以文本字符串的形式体现的,故本申请需基于包含有访问参数字符串中的参数对的值的样本访问参数,对与样本访问数据之间的距离有关的所有距离公式重新进行如下实施例的定义。
本申请一实施例中,在reducer阶段的所述集合确定装置还可以用于:首先计算任意两个样本访问数据之间的距离来计算各样本访问数据之间的相似度之前,即首先要在所述reducer阶段中基于包含有访问参数字符串中的参数对的值的样本访问参数,对样本访问数据之间的距离进行如下定义:
在同一访问地址(host+path)下的两个访问参数para1与para2的访问参数字符串,分别表示为xi和xj,并分别将每一访问参数字符串分割为多个kv参数对(key-value,其中,k为参数名,v为参数值),假设两个访问参数字符串中共有的参数集合为I,仅访问参数字符串para1才有的参数集合为U1,仅访问参数字符串para2才有的参数集合为U2,使用vik表示参数字符串xi的第k个参数名对应的字符串值。则有任意两个样本访问数据之间的距离(即所述同一URL下的访问参数字符串中的参数对的值之间的距离),是根据所述参数对的值的长度差异、字符集差异和字符2gram差异中的一种或任意组合确定,其中,该2gram用于指示字符串的连续2个字符所构成的集合。首先,定义两个访问参数字符串xi和xj中的参数对的值的长度差异:
其中,|·|表示字符串长度。
接着,对两个访问参数字符串xi和xj中的参数对的值的字符集差异进行定义,访问参数对kv中的字符串v的字符集用于指示组成该字符串v的所有字符的集合,用Cv进行表示;例如,参数对中的字符串v=“123abc”,则有字符集Cv={1,2,3,a,b,c}。在本申请的实施例中定义了五种不同类型的字符集,分别是数字字符集、字母字符集、字母字符集、非ASCII码字符串、特殊字符集、有危害的特殊字符集,如表-1所示:
表-1
字符集类型 | 字符范围 |
数字字符集 | [0-9] |
字母字符集 | [a-zA-Z] |
非ASCII码字符集 | Int(c)>255 |
特殊字符集 | [[]”#$%’+,.:=@\^`{}~-] |
有危害的特殊字符集 | [|/!<>*-;&] |
本申请的实施例中的字符集差异是为了描述参数字符串在字符选择上的差异,当两个参数字符串的字符集在数量上和类型上存在较大的不同时给出一定的惩罚,该惩罚主要表现在字符之间的距离定义上。例如若一个字符集是有危害的特殊字符时,而另一个字符集不是有危害的特殊字符集时,需要加大这种惩罚,即这两个字符集之间的距离定义会相应增大。故在定义字符集差异之前,首先定义字符之间的距离,预设任意两个字符分别为c1和c2,则有字符c1和c2之间的距离如下:
接着定义字符集C与字符c之间的距离如下:
其中,ci是字符集C中的第i个字符。
则有两个字符串xi和xj中的参数对的值之间的字符集差异为:
然后,定义两个字符串xi和xj中的参数对的值之间的字符2gram差异如下:
其中,2gram(.)表示字符串的2-gram集合,即字符串的连续2字符所构成的集合,|·|表示集合中元素的个数。
综上本申请的实施例中定义的三种差异,得到参数字符串xi和xj中的参数对的值之间的距离,即样本访问数据之间的距离定义为:
d(xi,xj)=α1·d1(xi,xj)+α2·d2(xi,xj)+α3·d3(xi,xj)
其中,α1,α2,α3分别是上述三种差异之间的权值,下面以默认的比值1:1:1为例对样本访问数据之间的距离进行计算。
下面接着基于样本访问数据之间的距离,对本申请的实施例中需要涉及的样本访问数据与簇之间的距离和簇与簇之间的簇间距离作简单介绍:
样本访问数据o与簇C={o1,o2…on}之间的距离定义如下:
其中,o1为簇C中的第i个样本访问数据。
簇Ci={oi1,oi2…oin}与簇Cj={oj1,oj2…ojm}之间的簇间距离定义如下:
其中,oip为簇Ci中的第p个样本访问数据,ojm为簇Cj中的第m个样本访问数据。
需要说明的是,上述的簇仅为本申请实施例中的正样本集合和负样本集合的一个方面的一种表现形式,其他现有或今后可能出现的用于表示正样本集合和负样本集合的表现形式仍可适用于本申请。下面以簇的形式为例,对所述正样本集合和所述负样本集合进行进一步说明。
本申请一实施例中,在所述reducer阶段用于基于包含有访问参数字符串中的参数对的值的样本访问参数,对任意两个样本访问数据之间的距离进行定义之后,所述集合确定装置具体可以用于:
将每一个样本访问数据都自成一个簇后,重复选择当前相似度最大的两个簇进行合并得到合并簇,直至成员个数最多的合并簇中的成员个数大于预预设成员个数阈值;本申请一实施例中,由于在同一访问地址下的正常访问和异常访问中,正常访问在数量上占绝大多数,而异常访占比较小,故在所有的簇中重复选择当前相似度最大的两个簇进行合并时,并不是重复选择合并直至所有的簇都并合并为一个簇,而是会设置一个预预设成员个数阈值(即停止准则,表示为t),用于当成员个数最多的合并簇中的成员个数占所有簇的簇总个数的百分比超过t时,则停止进行重复选择当前相似度最大的两个簇;然后,所述集合确定装置将成员个数最多的合并簇作为所述正样本集合,将所述成员个数最多的合并簇之外的簇作为所述负样本集合,以实现对同一访问地址下的所有样本访问数据对应的簇进行层次聚类。
本申请一实施例中,所述集合确定装置可以用于:采用自下向上的层次聚类算法对同一访问地址下的样本访问数据进行聚类具体可以包括如下步骤:
步骤一、将同一访问地址下的所有的n个样本访问数据:o1,o2…on都自成一个簇,得到簇集合C={C1,C2,……,Cn},其中,簇集合中的簇Ci={oi},即簇集合C中的第i个簇对应为样本访问数据oi自成的簇;
接着步骤二、选择簇集合C中的所有簇中的相似度最大的两个簇(即选择两个簇之间的簇间距离最小的两个簇)进行合并,若本次选择得到的距离最小的两个簇分别为Ci和Cj,即i,j=arg mink,l(k≠l)d(Ck,Cl)用于表示簇间距离值d(Ck,Cl)达到最小时对应的簇为Ci和Cj,则将Ci和Cj进行合并得到合并簇C合并,然后将簇集合C中的本次簇间距离最小的两个簇Ci和Cj删除,并将该合并簇C合并加入至删除本次簇间距离最小的两个簇Ci和Cj之后的簇集合C中,以实现基于本次合并簇对该簇集合C进行更新;
本申请一实施例中,由于在层次聚类算法中的所述步骤二中需要对每次选择簇集合C中的当前簇间距离最小的两个簇之间簇间距离进行存储,因此空间复杂度为O(n2),即在层次聚类算法中步骤二的的时间复杂度是O(n2),而在所述步骤三种循环重复执行m(m<n),则时间复杂度为O(m.n2)。
需要说明的是,所述时间复杂度和空间复杂度统称为算法复杂度,即上述的层次聚类算法的复杂度。其中,所述时间复杂度用于指示执行算法所需要的计算工作量;而所述空间复杂度用于指示执行这个算法所需要的内存空间。
为了减少上述集合确定装置中的层次聚类算法中的空间复杂度和时间复杂度,所述集合确定装置用于选择当前相似度最大的两个簇进行合并,可以具体包括如下步骤:
首先,计算每两个簇之间的相似度,并将每两个簇与对应的这两个簇之间的相似度作为一个元素存储入一优先队列,其中,所述优先队列的队头元素始终保持是相似度最大的两个簇;需要说明的是,所述优先队列中的每一个元素是一个pair对(对象对),每个pair对是由两个簇与该两个簇之间的簇间距离组成的,例如,优先队列中的每一个pair对为{(Cm,Cn),d(Cm,Cn)},其中,队头元素为{(Cm,Cn),d(Cm,Cn)min},即队头元素为簇集合C中的相似度最大的两个簇与其对应的簇间距离的pair对。当每次从所述优先队列中取出队头元素时,都会重新更新取出队头元素后的优先队列,以保证所述优先队列中的队头元素(即第一个元素)始终是簇集合C中的所有簇中的最相似的两个簇及其簇间距离对应的pair对。
接着步骤二,每次从优先队列中取出队头元素,将该队头元素的两个簇进行合并,使得在每次需要选择当前相似度最大的两个簇进行合并的时候,可以快速地从所述优先队列中取出队头元素中的两个簇进行合并即可,进而将层次聚类算法中对应的时间复杂度有效地下降为O(m×n×log n)+O(n2)。
然后步骤三、选择出成员个数最多的合并簇Cm,即m=arg maxi|Ci|,表示成员个数最大时对应的合并簇Ci的成员个数为m,得到Cm=Ci;在获得成员个数最多的合并簇Cm之后,判断合并簇的成员个数|Cm|是否大于预预设成员个数阈值t,即|Cm|>t,若是,则执行步骤四;若否,则继续重复执行所述步骤二和所述步骤三;
最后步骤四、将合并簇的成员个数|Cm|大于预预设成员个数阈值t时对应的合并簇Cm作为正样本簇,即C1=Cm,并将簇集合C中的所述成员个数最多的合并簇Cm之外的所有簇进行合并,以得到负样本簇,即Cn=Ui≠mCi,C2=Cn。例如,若预预设成员个数阈值t预置为70%,则认为同一访问地址下的所有样本访问数据对应的簇中的至少70%的簇为正常访问的正样本簇C1,而同一访问地址下的所有样本访问数据对应的簇中的正样本簇C1之外的所有的簇为负样本簇C2。
本申请的上述实施例中,通过所述步骤一~所述步骤四,实现了基于层次聚类算法对同一访问地址下的所有样本访问数据对应的簇进行聚类。其中,正样本簇C1中包含了比例为t的正常访问的样本访问数据,而负样本簇C2(存在异常访问的样本访问数据)不仅包含有正常访问时对应的样本访问数据,还包含有异常访问时对应的样本访问数据,以待后续从所述负样本簇C2(存在异常访问的样本访问数据)中筛选出正常访问的样本访问数据加入正样本簇C1,并将加入正样本簇C1的样本访问数据从所述负样本簇C2中删除,以得到准确的最终的正样本集合和负样本集合
本申请一实施例中,由于在所述集合确定装置中的层次聚类算法中引入的优先队列需要其他的辅助结构或工具来存储每个pair对在优先队列中的位置并加以更新在该优先队列中的位置,又由于优先队列只是始终保持队头元素中的两个簇的簇间距离为最短,其他元素没有顺序要求,故不能采用顺序存储的结构,导致空间占用有所提高。为了降低对内存空间的额外占用,在本申请的所述集合确定装置中采用相似度矩阵来存储簇集合C中的任意两个簇之间的相似度(即簇间距离),为了降低层次聚类算法中的时间复杂度,在所述集合确定装置中采用Nearest Neighbor Chain(最近邻链)算法对同一访问地址下的所有样本访问数据对应的簇进行合并,直至成员个数最多的合并簇中的成员个数大于预预设成员个数阈值,不仅可以降低层次聚类算法中的时间复杂度,还可以将层次聚类算法中的时间复杂度降低为O(n2)。
需要说明的是,Nearest Neighbor Chain(最近邻链)算法能够改进绝大多数条件下的凝聚层次聚类(自下向上的层次聚类)算法中的时空效率。但是使用Nearest NeighborChain的前提条件是:必须满足可规约性,其中,所述可规约性的定义如下:
对于任意类簇A,B,C及其距离函数dist,应当满足以下的约束条件:
dist(A∪B,C)≥min(diast(A,C),diast(B,C))
即类簇A和类错B合并之后的合并簇A∪B与类簇C之间的距离dist(A∪B,C),大于等于类簇A与类簇B之间的簇间距离min(diast(A,C)和类簇B与类簇C之间的簇间距离diast(B,C))中的最小的一个簇间距离。
当然,采用上述Nearest Neighbor Chain(最近邻链)算法对同一访问地址下的所有样本访问数据对应的簇进行合并,直至成员个数最多的合并簇中的成员个数大于预预设成员个数阈值仅为本申请一个方面的一实施例,其他满足以上可归约性的距离函数也可以适用与本申请的实施例中,例如,凝聚层次聚类中常见的Single-Linkage(单一连接距离),Complete-Linkage(全连接距离),Average-Linkage(平均连接距离),质心法,Ward层次聚类等距离函数。
还需说明的是,Nearest Neighbor Chain(最近邻链)算法通过构建类似A->B->C->D->…的最近邻链来决定所有类簇中的那两个簇可以进行合并,其中,最近邻链中的每个当前簇都是其上一个簇的最近邻居,即当前簇是与其上一个簇的簇间距离最小的簇。
下面以Nearest Neighbor Chain(最近邻链)算法为例,对所述将每一个样本访问数据都自成一个簇后,重复选择当前相似度最大的两个簇进行合并得到合并簇,直至成员个数最多的合并簇中的成员个数大于预预设成员个数阈值进行说明,具体步骤如下:
首先,将同一访问地址下的每一个样本访问数据都自成一个簇,将所有簇作为初始的类簇,此处的初始的类簇与上述层次聚类中的簇集合相同,即初始的类簇为C={C1,C2,……,Cn},其中,初始的类簇中的每一个簇都是只包含一个样本访问数据。
接着,计算所述类簇中每两个样本访问数据之间的相似度并存储入一相似度矩阵H=n×n(即簇间距离矩阵)中,该相似度矩阵中的每一个元素为所述初始的类簇中的对应的簇与簇之间的距离,且该相似度矩阵中的元素按照簇与簇之间的距离的从小到大的顺序进行依次存储的;由于不仅在层次聚类中会用到类簇中的簇与簇之间的距离,而且后续对正样本簇和负样本簇进行划分也需要簇与簇之间的距离,因此使用HashMap(哈希表)来存储除去距离冗余的相似度矩阵(即该相似度矩阵可以为上三角相似度矩阵或下三角相似度矩阵),使得不仅不需要额外的内存空间来保存类簇中的簇与簇之间的距离,还可以用于后续更新相似度矩阵为H=(n-s)×(n-s),(n>s≥1)或者选择与当前簇之间的距离最短(相似度最高)的一个簇以及选择簇间距离最短时对应的两个簇时,能够快速准确地从所述HashMap对应的相似度矩阵中查找到对应簇,进而提高了后续合并簇时需查找某一个簇的查找效率,同时也减少了计算任意簇与簇之间的距离的计算量。
然后,创建一个初始空的栈后,重复如下步骤,直至成员个数最多的合并簇中的成员个数大于预预设成员个数阈值:
当所述栈为空时,从所述类簇中随机挑选一个簇Ci放入所述栈中,该簇Ci为类簇中的第i个簇;
根据所述相似度矩阵H,从所述类簇C中查找与所述栈中的栈顶元素CC相似度最高的簇;其中,所述栈中的栈顶元素为所述栈中的多个元素中的第一个元素;
若查找到的与所述栈中的栈顶元素CC相似度最高(簇间距离最短)的簇CD不在所述栈中,将与所述栈中的栈顶元素相似度最高的簇CD入栈;
否则,将所述栈中的栈顶元素CC及与其相似度最高的CDCD出栈并合并得到合并簇CE,将所述合并簇CE放入所述类簇C中,并从所述类簇C中删除所述栈中的栈顶元素CC及与其相似度最高的CDCD;
更新所述相似度矩阵H=(n-1)×(n-1);
随后,继续重复执行选择当前相似度最大的两个簇进行合并得到合并簇,不需要重复执行至所有的簇都被合并,而是直至成员个数最多的合并簇Cm中的成员个数|Cm|大于预预设成员个数阈值t,那么共重复选择了m(m<n)次,因此基于最近邻链的层次聚类算法的时间复杂度为O(m×n),再加上需要计算类簇中的任意两个簇之间的簇间距离,得到基于最近邻链的层次聚类的总的时间复杂度为O(n2),实现了降低层次聚类中的时间复杂度,且降低至O(n2)。
本申请的上述实施例中,通过集合确定装置中的自下向上的层次聚类算法和最近邻链算法,实现了基于层次聚类算法对同一访问地址下的所有样本访问数据对应的簇进行聚类,其中,正样本簇C1中包含了比例为t的正常访问的样本访问数据,而负样本簇C2(存在异常访问的样本访问数据)不仅包含有正常访问时对应的样本访问数据,还包含有异常访问时对应的样本访问数据。为了将负样本簇C2中包含有的正常访问的样本访问数据筛选出来,加入到正样本簇C1中,以得到更加准确的正样本簇和负样本簇,所述集合确定装置用于根据所述样本访问数据得到正样本集合和负样本集合之后,还可以用于:
从所述负样本集合中筛选样本访问数据加入正样本集合,并将加入正样本集合的样本访问数据从所述负样本集合中删除,得到最终的正样本集合和负样本集合。例如,设同一访问地址下的样本访问数据为100个,若样本确定装置11基于层次聚类算法得到的正样本簇C1={o1,o2,o3,o4,……,o70},则有负样本簇C2={o71,o72,o73,o74,……,o100},其中,负样本簇C2(存在异常访问的样本访问数据)中不仅包含有正常访问时对应的样本访问数据,还包含有异常访问时对应的样本访问数据,故按照簇间距离最优划分的策略从负样本簇C2中筛选样本访问数据加入至正样本簇C1中,若按照簇间距离最优划分的策略从负样本簇C2中筛选出来的样本访问数据为{o71,o72,o73,o74,o75,o76,o77,o78,o79,o80,o81,o83,o84,o85,o86,o87,o88,o89,o90,o91,o92,o93,o95,o96,o97,o98,o99,o100},则将从负样本簇C2中筛选出来的正常访问的样本访问数{o71,o72,o73,o74,o75,o76,o77,o78,o79,o80,o81,o83,o84,o85,o86,o87,o88,o89,o90,o91,o92,o93,o95,o96,o97,o98,o99,o100}加入至正样本簇C1中,以得到更加准确的最终的正样本簇C1和负样本簇C2,以待后续基于更加准确的正样本簇和负样本簇对同一访问地址下的任意一条在线或者离线的访问数据进行异常判断,进而提高判断的精确度并减低误判率。
下面以迭代划分为例,对所述集合确定装置中的从所述负样本集合中筛选样本访问数据加入正样本集合,并将加入正样本集合的样本访问数据从所述负样本集合中删除,得到最终的正样本集合和负样本集合进行进一步说明,具体可以包括如下步骤:
重复本步骤直至负样本集合为空:每次从上一次的负样本集合中选择与所述上一次正样本集合相似度最大的一个样本访问数据,将所述相似度最大的一个样本访问数据加入正样本集合,并将所述相似度最大的一个样本访问数据从所述负样本集合中删除,并记录每一次的正样本集合和负样本集合;例如,首先将在所述样本确定装置11中基于层次聚类得到的正样本簇C1和负样本簇C2作为初始划分P0={C1,C2},当前划分为index=1;接着,从负样本簇C2中选择与正样本簇C1距离最近(即相似度最大)的样本访问数据oi,即i=argmink d(ok,ol),ok∈C2,将所述样本访问数据oi加入至正样本簇C1,并将样本访问数据oi从负样本簇C2中删除,即C1:=C1+{oi},C2:=C2-{oi};同时记录本次划分后得到的正样本簇和负样本簇,即Pindex={C1,C2};然后,index=index+1,即循环执行将从上一次的负样本簇中选择与所述上一次正样本簇相似度最大的一个样本访问数据,将所述相似度最大的一个样本访问数据加入正样本簇,并将所述相似度最大的一个样本访问数据从所述负样本簇中删除,并记录每一次的正样本簇和负样本簇,直至|C2|=0,以得到多个划分所对应的正样本簇和负样本簇;
最后,从每一次记录的正样本簇和负样本簇中筛选出记录的其中一次的正样本集合和负样本集合,作为最终的正样本集合和负样本集合,以筛选得到最优的划分时对应的最终的正样本簇C1和负样本簇C2。
接着本申请的上述实施例,为了从多个划分所对应的正样本簇和负样本簇中筛选出最优划分所对应的正样本簇和负样本簇,在对正样本簇和负样本簇进行多个迭代划分之后,设定一个损失函数,用于在所述样本确定装置11中从多个划分所对应的正样本簇和负样本簇中筛选出记录的其中一次的正样本集合和负样本集合,作为最终的正样本集合和负样本集合,具体筛选过程可以包括:
计算记录的每一次的正样本集合和负样本集合的损失值;需要说明的是,用于计算正样本簇和负样本簇之间的损失值所对应的损失函数e为:
其中,正样本簇C1是样本访问数据还没有加入之前的正样本簇(即上一次正样本簇),负样本簇C2是样本访问数据还没有删除之前的负样本簇(即上一次负样本簇),由损失函数e可知,被划分的样本访问数据oi与正样本簇C1的距离越小越好,同时与负样本簇C2的距离越大越好。基于该损失函数e计算多个划分对应的正样本簇和负样本簇的损失值,以待后续从多个损失值中删选出最小的损失值。
接着,将损失值最小的一次的正样本集合和负样本集合作为最终的正样本集合和负样本集合。例如若多个划分对应的正样本簇和负样本簇的损失值{e1,e2,e3,……,en}中的emin=ep,其中e1对应初始划分P0={C1,C2},则将第p次划分对应的正样本簇C1和负样本簇C2确定为最终的正样本簇和负样本簇,进而得到emin=ep对应的最优划分P*={C1,C2},以待后续基于得到的准确的最优划分对应的最终正样本簇和负样本簇对同一访问地址下的在线访问数据进行异常检测。
本申请一实施例中,在所述集合确定装置中基于同一访问地址下的所有的样本访问数据确定正常访问的正样本簇和异常访问的负样本簇之后,在需要对访问数据进行检测时,所述获取装置11获取待检测访问数据,接着在所述比较装置12中比较待检测访问数据与所述正样本集合和负样本集合中的相似度,得到正样本相似度和负样本相似度;在所述确定装置13中,若所述待检测访问数据与所述负样本簇的负样本相似度更高(距离更短),则所述待检测访问数据为异常访问数据;若所述待检测访问数据与所述正样本簇的正样本相似度更高,则所述待检测访问数据为正常访问数据,以实现对在线访问的待检测访问数据进行异常访问的检测。不仅避免了现有技术中基于经验规则导致的漏查异常访问数据和误判率高的问题,还实现了在得到的正样本集合和负样本集合的基础上,能够准确高效实时地识别出每一条待检测访问数据是否为异常访问数据或正常访问数据。
本申请一实施例中,为了更方便地检测并显示出待检测访问数据是否为异常访问还是正常访问,在得到最优划分P*={C1,C2}之后,设置如下判断判断输出准则:
其中,0表示当前判断的待检测访问数据oi属于正样本簇C1,即当前判断的待检测访问数据oi为正常访问;1表示当前判断的待检测访问数据oi属于负样本簇C2,即当前判断的待检测访问数据oi为异常访问。例如,当待检测访问数据为www.feimao.com/buy? product_name==/*select*/&color=123&token=4时,若异常检测判断输出为1,则表示该条待检测访问数据为异常访问下对应的访问记录;当待检测访问数据为www.feimao.com/buy?product_name=裙子&color=黑色&token=3时,若异常检测判断输出为0,则表示该条待检测访问数据为正常访问下对应的访问记录,实现了对待检测访问数据进行快速准确地异常检测,并降低了误判率。
本申请一实施例中,为了保证同一访问地址下的正样本簇和负样本簇能够随时准确地且误判率最小的判断出所述待检测访问数据是否为异常访问,则需要在所述基于样本访问数据得到正常访问的正样本集合和异常访问的负样本集合之后,周期性地基于对同一访问地址下的更新的样本访问数据对所述正常访问的正样本集合和异常访问的负样本集合进行更新,以得到更新后的同一访问地址下的正常访问的正样本集合和异常访问的负样本集合,进而实现了对同一访问地址下的样本访问数据进行离线计算。
例如,基于访问地址(host+path)为www.feizu.com/news下的2016年7月12日当天的所有样本访问数据得到的正样本簇和负样本簇,来对2016年7月13日当天的在线的待检测访问数据进行相似度比较之后,由于2016年7月13日当天对在线的待检测访问数据进行相似度比较基于的是2016年7月12日当天的所有样本访问数据得到的正样本簇和负样本簇,而2016年7月13日当天访问地址(host+path)为www.feizu.com/news下的所有的样本访问数据已经更新,故若想在2016年7月14日当天对在线的待检测访问数据进行相似度比较之前,需要基于2016年7月12日当天的所有样本访问数据和2016年7月13日当天的所有样本访问数据对所述正常访问的正样本集合和异常访问的负样本集合进行离线更新,以得到用于在2016年7月14日当天对若想在2016年7月14日当天对在线的待检测访问数据进行相似度比较的更新后的正样本簇和负样本簇,使得能够有效准确地判断出待检测访问数据是否为异常访问。
综上所述,本申请在服务器端通过首先在需要对访问数据进行检测时,获取待检测访问数据,接着分别比较所述待检测数据与预先设置的正样品集合和负样本集合的相似度,得到正样本相似度和负样本相似度,其中,正样本集合是样本访问数据中正常访问的访问数据集合,负样本集合样本访问数据中异常访问的访问数据的集合;最后基于得到的正样本相似度和负样本相似度,确定该访问数据为异常访问数据还是正常访问数据。不仅避免了现有技术中基于经验规则导致的漏查异常访问数据和误判率高的问题,还实现了在得到的正样本集合和负样本集合的基础上,能够准确高效实时地识别出每一条待检测访问数据是否为异常访问数据或正常访问数据。进一步的,本申请在基于得到的正样本相似度和负样本相似度,确定该访问数据为异常访问数据还是正常访问数据之后,还包括:若所述待检测访问数据为正常访问数据,则将该待检测数据归入正样本集合;若所述待检测访问数据为异常访问数据,则将该待检测数据归入负样本集合,使得周期性地对正样本集合和负样本集合进行更新,实现了在离线状态下对所述样本访问数据进行离线检测,以得到更新后的正常访问数据对应的正样本集合和异常访问数据对应的负样本集合。在本申请提供的一种应用于网页访问服务器端的对样本访问数据进行异常访问方法的实际应用场景中,若需要基于web服务器中的同一访问地址(host+path)为:www.feizu.com/news对应的所有的访问数据对应的访问记录对待访问数据进行监,首先,需要获取web服务器中的同一访问地址(host+path)为:www.feizu.com/news对应的所有的访问数据对应的访问记录如下:
?aaaaa=1
www.feizu.com/news?city=北京&district=东城区&spam=1
www.feizu.com/news?city=上海&district=浦东新区&spam=2
www.feizu.com/news?city=杭州&district=西湖区&spam=3
www.feizu.com/news?city=drop table a&district=123&spam=4
www.feizu.com/news?city=北京&district=西城区&spam=1
www.feizu.com/news?city=上海&district=徐汇区&spam=2
www.feizu.com/news?city=杭州&district=滨江区&spam=3
www.feizu.com/news?city=北京&district=朝阳区&spam=1
www.feizu.com/news?city=上海&district=嘉定区&spam=2
www.feizu.com/news?city=杭州&district=上城区&spam=3
对上述的11条访问记录进行预处理,以得到用于后续确定正常访问的正样本簇和异常访问的负样本簇的同一访问地址(host+path)为:www.feizu.com/news对应的访问成功时对应的样本访问数据,如下所示:
host+path=www.feizu.com/news,key-value={city=北京,district=东城区}
host+path=www.feizu.com/news,key-value={city=上海,district=浦东新区}
host+path=www.feizu.com/news,key-value={city=杭州,district=西湖区}
host+path=www.feizu.com/news,key-value={city=drop table a,district=123}
host+path=www.feizu.com/news,key-value={city=北京,district=西城区}
host+path=www.feizu.com/news,key-value={city=上海,district=徐汇区}
host+path=www.feizu.com/news,key-value={city=杭州,district=滨江区}
host+path=www.feizu.com/news,key-value={city=北京,district=朝阳区}
host+path=www.feizu.com/news,key-value={city=上海,district=嘉定区}
host+path=www.feizu.com/news,key-value={city=杭州,district=上城区}
接着,对预处理后得到的上述10个样本访问数据进行自下向上的层次聚类,将上述10个样本访问数据中的比较相似的样本访问数据归入正样本簇,将剩余的样本访问数据归入负样本簇,以得到正常访问的正样本簇C1={{key-value={city=北京,district=东城区}},{key-value={city=上海,district=浦东新区}},{key-value={city=杭州,district=西湖区}},{key-value={city=北京,district=西城区}},{key-value={city=上海,district=徐汇区}},{key-value={city=杭州,district=滨江区}},{key-value={city=北京,district=朝阳区}}},得到异常访问的负样本簇C2={{key-value={city=drop table a,district=123}},{key-value={city=上海,district=嘉定区}},{key-value={city=杭州,district=上城区}}};
由于正样本簇C1中包含了比例为t=70%的正常访问的样本访问数据,而负样本簇C2(存在异常访问的样本访问数据)不仅包含有正常访问时对应的样本访问数据,还包含有异常访问时对应的样本访问数据。为了将负样本簇C2中包含有的正常访问的样本访问数据筛选出来,加入到正样本簇C1中,以得到更加准确的正样本簇和负样本簇,然后对层次聚类得到的正常访问的正样本簇C1和异常访问的负样本簇C2进行迭代划分,得到如下划分:
P0={C1,C2}
P1={C1,C2},其中,正样本簇C1中增加了{key-value={city=上海,district=嘉定区}},而负样本簇C2删除了{key-value={city=上海,district=嘉定区}},即异常访问的负样本簇C2={{key-value={city=drop table a,district=123}},{key-value={city=杭州,district=上城区}}};
P2={C1,C2},其中,正样本簇C1中又增加了{key-value={city=杭州,district=上城区}},而负样本簇C2删除了{key-value={city=杭州,district=上城区}},即异常访问的负样本簇C2={key-value={city=123,district=123}};
P3={C1,C2},其中,正样本簇C1中又增加了{key-value={city=123,district=123},而负样本簇C2删除了{key-value={city=drop table a,district=123},即异常访问的负样本簇C2=0;以得到4次迭代划分对应的正常访问的正样本簇C1和异常访问的负样本簇C2;
然后,为了得到更加准确的该访问地址(host+path)为:www.feizu.com/news对应的最优的正样本簇C1和异常访问的负样本簇C2,基于该损失函数e计算上述4个划分对应的正样本簇和负样本簇的损失值以待后续从多个损失值中删选出最小的损失值。可以看出P3={C1,C2}对应的划分为最优划分,则最终的有效准确的正常访问的正样本簇C1={{key-value={city=北京,district=东城区}},{key-value={city=上海,district=浦东新区}},{key-value={city=杭州,district=西湖区}},{key-value={city=北京,district=西城区}},{key-value={city=上海,district=徐汇区}},{key-value={city=杭州,district=滨江区}},{key-value={city=北京,district=朝阳区}},{key-value={city=上海,district=嘉定区}},{key-value={city=上海,district=嘉定区}}},最终的有效准确的异常访问的负样本簇C2={key-value={city=drop tablea,district=123}};
最后,若待检测的访问记录为:host+path=www.feizu.com/news,key-value={city=上海,district=徐汇区},比较该访问记对应的样本访问数据{key-value={city=上海,district=宝山区}}分别与最终的正样本簇C1和异常访问的负样本簇C2的相似度,可见,该样本访问数据{key-value={city=上海,district=宝山区}}与最终的正样本簇C1最相似,则该样本访问数据{key-value={city=上海,district=宝山区}}对应的访问为正常访问;若待检测的访问记录为:host+path=www.feizu.com/news,key-value={city=vA&,district=vA&},比较该访问记对应的样本访问数据{key-value={city=vA&,district=vA&}}分别与最终的正样本簇C1和异常访问的负样本簇C2的相似度,可见,该样本访问数据{key-value={city=vA&,district=vA&}}与最终的正样本簇C1最相似,则该样本访问数据{key-value={city=vA&,district=vA&}}对应的访问为异常访问,不仅避免了现有技术中基于经验规则导致的漏查异常访问数据和误判率高的问题,还实现了在得到的正样本集合和负样本集合的基础上,能够准确高效实时地识别出每一条待检测访问数据是否为异常访问数据或正常访问数据。
根据本申请的一种基于计算的设备,包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:
获取待检测访问数据;
分别比较所述待检测数据与预先设置的正样品集合和负样本集合的相似度,得到正样本相似度和负样本相似度,其中,正样本集合是样本访问数据中正常访问的访问数据集合,负样本集合样本访问数据中异常访问的访问数据的集合;
基于得到的正样本相似度和负样本相似度,确定该访问数据为异常访问数据还是正常访问数据。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。
对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
Claims (15)
1.一种异常访问检测方法,其中,所述方法包括:
获取待检测访问数据;
分别比较所述待检测数据与预先设置的正样品集合和负样本集合的相似度,得到正样本相似度和负样本相似度,其中,正样本集合是样本访问数据中正常访问的访问数据集合,负样本集合样本访问数据中异常访问的访问数据的集合;
基于得到的正样本相似度和负样本相似度,确定该访问数据为异常访问数据还是正常访问数据;
其中,所述方法还包括:获取样本访问数据,以根据所述样本访问数据得到正样本集合和负样本集合;
其中,根据所述样本访问数据得到正样本集合和负样本集合,包括:
将每一个样本访问数据都自成一个簇后,重复选择当前相似度最大的两个簇进行合并得到合并簇,直至成员个数最多的合并簇中的成员个数大于预预设成员个数阈值;
将成员个数最多的合并簇作为所述正样本集合,将所述成员个数最多的合并簇之外的簇作为所述负样本集合。
2.根据权利要求1所述的方法,其中,根据所述样本访问数据得到正样本集合和负样本集合,包括:
通过聚类方式,将相似度高于第一预设值的样本访问数据归入正样本集合,将相似度低于第二预设值的样本访问数据归入负样本集合。
3.根据权利要求1所述的方法,其中,所述样本访问数据为同一URL下的访问参数字符串中的参数对的值。
4.根据权利要求3所述的方法,其中,同一URL下的访问参数字符串中的参数对的值之间的相似度,根据所述参数对的值的长度差异、字符集差异和字符2gram差异中的一种或任意组合确定。
5.根据权利要求1所述的方法,其中,选择当前相似度最大的两个簇进行合并,包括:
计算每两个簇之间的相似度,并将每两个簇与对应的这两个簇之间的相似度作为一个元素存储入一优先队列,其中,所述优先队列的队头元素始终保持是相似度最大的两个簇;
每次从优先队列中取出队头元素,将该队头元素的两个簇进行合并。
6.根据权利要求1所述的方法,其中,将每一个样本访问数据都自成一个簇后,重复选择当前相似度最大的两个簇进行合并得到合并簇,直至成员个数最多的合并簇中的成员个数大于预预设成员个数阈值,包括:
将每一个样本访问数据都自成一个簇,将所有簇作为初始的类簇,计算所述类簇中每两个样本访问数据之间的相似度并存储入一相似度矩阵,并创建一个初始空的栈后,重复如下步骤,直至成员个数最多的合并簇中的成员个数大于预预设成员个数阈值:
当所述栈为空时,从所述类簇中随机挑选一个簇放入所述栈中;
根据所述相似度矩阵,从所述类簇中查找与所述栈中的栈顶元素相似度最高的簇;
若查找到的与所述栈中的栈顶元素相似度最高的簇不在所述栈中,将与所述栈中的栈顶元素相似度最高的簇入栈;
否则,将所述栈中的栈顶元素及与其相似度最高的簇出栈并合并得到合并簇,将所述合并簇放入所述类簇,并从所述类簇中删除所述栈中的栈顶元素及与其相似度最高的簇;
更新所述相似度矩阵。
7.根据权利要求1所述的方法,其中,根据所述样本访问数据得到正样本集合和负样本集合之后,还包括:
从所述负样本集合中筛选样本访问数据加入正样本集合,并将加入正样本集合的样本访问数据从所述负样本集合中删除,得到最终的正样本集合和负样本集合。
8.根据权利要求7所述的方法,其中,从所述负样本集合中筛选样本访问数据加入正样本集合,并将加入正样本集合的样本访问数据从所述负样本集合中删除,得到最终的正样本集合和负样本集合,包括:
重复本步骤直至负样本集合为空:每次从上一次的负样本集合中选择与所述上一次正样本集合相似度最大的一个样本访问数据,将所述相似度最大的一个样本访问数据加入正样本集合,并将所述相似度最大的一个样本访问数据从所述负样本集合中删除,并记录每一次的正样本集合和负样本集合;
筛选出记录的其中一次的正样本集合和负样本集合,作为最终的正样本集合和负样本集合。
9.根据权利要求8所述的方法,其中,筛选出记录的其中一次的正样本集合和负样本集合,作为最终的正样本集合和负样本集合,包括:
计算记录的每一次的正样本集合和负样本集合的损失值;
将损失值最小的一次的正样本集合和负样本集合作为最终的正样本集合和负样本集合。
10.根据权利要求1至9任一项所述的方法,其中,基于得到的正样本相似度和负样本相似度,确定该访问数据为异常访问数据还是正常访问数据之后,还包括:
若所述待检测访问数据为正常访问数据,则将该待检测数据归入正样本集合;
若所述待检测访问数据为异常访问数据,则将该待检测数据归入负样本集合。
11.一种异常访问检测的设备,其中,所述设备包括:
获取装置,用于获取待检测访问数据;
比较装置,用于分别比较所述待检测数据与预先设置的正样品集合和负样本集合的相似度,得到正样本相似度和负样本相似度,其中,正样本集合是样本访问数据中正常访问的访问数据集合,负样本集合样本访问数据中异常访问的访问数据的集合;
确定装置,用于基于得到的正样本相似度和负样本相似度,确定该访问数据为异常访问数据还是正常访问数据;
其中,所述设备还包括集合确定装置,其中,所述集合确定装置用于:
获取样本访问数据,以根据所述样本访问数据得到正样本集合和负样本集合;
其中,所述集合确定装置用于:
将每一个样本访问数据都自成一个簇后,重复选择当前相似度最大的两个簇进行合并得到合并簇,直至成员个数最多的合并簇中的成员个数大于预预设成员个数阈值;
将成员个数最多的合并簇簇作为所述正样本集合,将所述成员个数最多的合并簇之外的簇作为所述负样本集合。
12.根据权利要求11所述的设备,其中,所述集合确定装置:
通过聚类方式,将相似度高于第一预设值的样本访问数据归入正样本集合,将相似度低于第二预设值的样本访问数据归入负样本集合。
13.根据权利要求11所述的设备,其中,所述集合确定装置还用于:
从所述负样本集合中筛选样本访问数据加入正样本集合,并将加入正样本集合的样本访问数据从所述负样本集合中删除,得到最终的正样本集合和负样本集合。
14.根据权利要求11至13任一项所述的设备,其中,所述确定装置还用于:
若所述待检测访问数据为正常访问数据,则将该待检测数据归入正样本集合;
若所述待检测访问数据为异常访问数据,则将该待检测数据归入负样本集合。
15.一种基于计算的设备,包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:
获取待检测访问数据;
分别比较所述待检测数据与预先设置的正样品集合和负样本集合的相似度,得到正样本相似度和负样本相似度,其中,正样本集合是样本访问数据中正常访问的访问数据集合,负样本集合样本访问数据中异常访问的访问数据的集合;
基于得到的正样本相似度和负样本相似度,确定该访问数据为异常访问数据还是正常访问数据;
其中,所述可执行指令在被执行时还使所述处理器:
获取样本访问数据,以根据所述样本访问数据得到正样本集合和负样本集合;
其中,根据所述样本访问数据得到正样本集合和负样本集合,包括:
将每一个样本访问数据都自成一个簇后,重复选择当前相似度最大的两个簇进行合并得到合并簇,直至成员个数最多的合并簇中的成员个数大于预预设成员个数阈值;
将成员个数最多的合并簇作为所述正样本集合,将所述成员个数最多的合并簇之外的簇作为所述负样本集合。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710036024.6A CN108322428B (zh) | 2017-01-18 | 2017-01-18 | 一种异常访问检测方法及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710036024.6A CN108322428B (zh) | 2017-01-18 | 2017-01-18 | 一种异常访问检测方法及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108322428A CN108322428A (zh) | 2018-07-24 |
CN108322428B true CN108322428B (zh) | 2021-11-05 |
Family
ID=62892071
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710036024.6A Active CN108322428B (zh) | 2017-01-18 | 2017-01-18 | 一种异常访问检测方法及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108322428B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109871870B (zh) * | 2019-01-15 | 2021-05-25 | 中国科学院信息工程研究所 | 一种大数据流中的基于最近邻的时间敏感性异常检测方法 |
CN110191085B (zh) * | 2019-04-09 | 2021-09-10 | 中国科学院计算机网络信息中心 | 基于多分类的入侵检测方法、装置及存储介质 |
CN110113228B (zh) * | 2019-04-25 | 2020-12-18 | 新华三信息安全技术有限公司 | 一种网络连接检测方法及装置 |
CN110457626A (zh) * | 2019-07-03 | 2019-11-15 | 微梦创科网络科技(中国)有限公司 | 一种异常访问请求筛选方法及装置 |
CN110381151B (zh) * | 2019-07-24 | 2021-12-28 | 秒针信息技术有限公司 | 一种异常设备检测方法及装置 |
CN111476610B (zh) * | 2020-04-16 | 2023-06-09 | 腾讯科技(深圳)有限公司 | 一种信息检测方法、装置及计算机可读存储介质 |
CN112488175B (zh) * | 2020-11-26 | 2023-06-23 | 中孚安全技术有限公司 | 一种基于行为聚合特征的异常用户检测方法、终端及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103577755A (zh) * | 2013-11-01 | 2014-02-12 | 浙江工业大学 | 一种基于支持向量机的恶意脚本静态检测方法 |
WO2015186662A1 (ja) * | 2014-06-06 | 2015-12-10 | 日本電信電話株式会社 | ログ分析装置、攻撃検知装置、攻撃検知方法およびプログラム |
CN106228188A (zh) * | 2016-07-22 | 2016-12-14 | 北京市商汤科技开发有限公司 | 聚类方法、装置及电子设备 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8856926B2 (en) * | 2008-06-27 | 2014-10-07 | Juniper Networks, Inc. | Dynamic policy provisioning within network security devices |
CN105205394B (zh) * | 2014-06-12 | 2019-01-08 | 腾讯科技(深圳)有限公司 | 用于入侵检测的数据检测方法和装置 |
CN106302350B (zh) * | 2015-06-01 | 2019-09-03 | 阿里巴巴集团控股有限公司 | Url监测方法、装置及设备 |
CN105939350B (zh) * | 2016-05-30 | 2020-02-07 | 北京京东尚科信息技术有限公司 | 网络访问控制方法和系统 |
-
2017
- 2017-01-18 CN CN201710036024.6A patent/CN108322428B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103577755A (zh) * | 2013-11-01 | 2014-02-12 | 浙江工业大学 | 一种基于支持向量机的恶意脚本静态检测方法 |
WO2015186662A1 (ja) * | 2014-06-06 | 2015-12-10 | 日本電信電話株式会社 | ログ分析装置、攻撃検知装置、攻撃検知方法およびプログラム |
CN106228188A (zh) * | 2016-07-22 | 2016-12-14 | 北京市商汤科技开发有限公司 | 聚类方法、装置及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN108322428A (zh) | 2018-07-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108322428B (zh) | 一种异常访问检测方法及设备 | |
Zimek et al. | There and back again: Outlier detection between statistical reasoning and data mining algorithms | |
Effendy et al. | Classification of intrusion detection system (IDS) based on computer network | |
De Souza et al. | Two-step ensemble approach for intrusion detection and identification in IoT and fog computing environments | |
CN108737423B (zh) | 基于网页关键内容相似性分析的钓鱼网站发现方法及系统 | |
Yun et al. | An efficient mining algorithm for maximal weighted frequent patterns in transactional databases | |
Zhao et al. | A synergistic approach for graph anomaly detection with pattern mining and feature learning | |
WO2017143907A1 (zh) | 一种字符串距离计算方法和装置 | |
Yun et al. | Efficient mining of maximal correlated weight frequent patterns | |
Chi et al. | Fast graph stream classification using discriminative clique hashing | |
Dai et al. | Identifying and estimating persistent items in data streams | |
CN110719106A (zh) | 一种基于节点分类排序的社交网络图压缩方法及系统 | |
CN111507385A (zh) | 一种可扩展的网络攻击行为分类方法 | |
US10810458B2 (en) | Incremental automatic update of ranked neighbor lists based on k-th nearest neighbors | |
CN106909619B (zh) | 一种基于偏移调节和竞价的混合社交网络聚类方法及系统 | |
CN115114484A (zh) | 异常事件检测方法、装置、计算机设备和存储介质 | |
CN107423319B (zh) | 一种垃圾网页检测方法 | |
CN117155701A (zh) | 一种网络流量入侵检测方法 | |
Plattel | Distributed and incremental clustering using shared nearest neighbours | |
CN112364243B (zh) | 一种基于大数据的信息推荐系统 | |
CN115292303A (zh) | 数据处理方法及装置 | |
WO2022249179A1 (en) | Anomaly detection for tabular data with internal contrastive learning | |
CN111259117B (zh) | 短文本批量匹配方法及装置 | |
CN113408579A (zh) | 一种基于用户画像的内部威胁预警方法 | |
Gurav et al. | Hybrid approach for outlier detection in high dimensional dataset |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |