本发明涉及web服务的技术领域,特别是涉及一种基于机器学习的web指纹识别方法。
背景技术:
众所周知,web指纹是指在对web服务的相关组件进行设计开发的过程中,由于在开发时所使用的开发工具,相关技术以及实现方式的不同,最终在形成成果时每个web服务组件都会形成它们各自独有的信息,根据这些信息可以对每个web服务组件进行标记,这里我们就把这些独有的信息称为web指纹。通常web指纹包括web容器,web服务端语言,web后端框架,web应用,web前端框架,web前端语言,web运营商,第三方内容,cdn运营商等。而web指纹识别则是指借助已有的web指纹信息,通过与目标web对象的相关特征进行对比从而识别出该web对象的服务组件相关信息。常用的web指纹识别方法包括header判断,body关键词匹配,url内容的md5匹配,url状态码判断,url相对路径匹配等。该技术一般用于对目标web站点的信息收集,获取目标站点的web服务组件相关内容。用户常常可以通过具体的web服务组件类型和版本查找获得该类型版本的web服务组件中存在何种漏洞,进而进行下一步的操作。
现有的web指纹识别方法,通常采用构建出特殊的http请求,将请求发送给目标web服务,然后通过目标web服务发送回来的响应报文中存在的特殊内容或特殊字符、字符串,从而确定目标web服务的类型和版本。而一些主流的web指纹扫描工具,包括whatweb、wappalyzer,直接通过响应报文中的banner和html中的关键字进行web指纹的判断。以上方法均需要通过大量的人工,对响应报文进行收集和分析,最终得出可以作为判断依据的特殊内容和关键字;同时,响应报文中的banner信息等一些特殊内容和html中的内容极易被修改或删除,在遇到一些关键词或关键内容被掩盖的目标web服务时,这些常见方法就会显得有心无力,web指纹的检测成功率就会大大下降。
技术实现要素:
为解决上述技术问题,本发明提供一种基于机器学习的web指纹识别方法,其使用机器学习算法,通过对响应报文中的内容和对应的web指纹进行训练,生成web指纹识别模型,通过将响应报文输入该模型可以快速对其对应的web指纹进行判断,最终实现对web服务的类型版本的高精度、快速预测。
本发明的一种基于机器学习的web指纹识别方法,包括以下步骤:
s1数据收集:收集或创建多个站点,之后我们对这些站点发送设计好的请求,分别对其对应的响应报文进行分类,将这些响应报文和其对应的web指纹进行归类,将这些响应报文分为训练集和测试集;
s2数据处理:对于收集到的存在不同web指纹的响应报文,将其中包含的每个字符以数字进行代替;
s3模型训练;
s4结束训练;
s5行为预测。
本发明的一种基于机器学习的web指纹识别方法,所述步骤s2具体步骤为:这里假设所有的响应报文中包含的字符类型总数为n,每一个字符a都对应一个数字xa,这样可以将一条响应报文使用一个长度为n的向量代替,这里对于每一个报文m的第i个字符mi,若其对应的数字为
所述步骤s3具体步骤为:在获得响应报文对应的字符向量后,首先我们对这些向量进行聚类,类的个数即为原响应报文集中需要进行分类的不同种类web指纹个数:
对于两个不同的响应报文,他们的距离为:
其中ti为向量中第i个元素的参数;
对于预测集中的响应报文,计算出他们与所有测试集响应报文的距离,得出距离最近的前10个响应报文集,根据这10个响应报文集中不同的web指纹出现频率,返回web指纹出现频率最高的类别作为预测的web指纹;
在每次预测结束后,若本次预测结果与实际结果一致,则误差记为0;若本次预测结果与实际结果不一致,则取对应web指纹中与预测报文最近的5个报文,计算其平均向量,则他们的误差为:
当一轮训练结束后,每次预测的误差之和即为该轮预测的误差;
所述步骤s4中具体步骤为:若当前轮误差在规定阈值内或已经达到最大轮数,则结束训练过程,将此时的参数保存在本地,此时即视为模型已经达到稳定状态,可以用于进行web指纹的预测;之后进行web指纹预测时,可以直接调用保存在本地的参数进行预测,不再需要进行额外的模型参数训练;若当前轮误差仍在规定阈值外且尚未达到最大轮数,则根据误差对模型参数进行更新:
其中α为学习速率,δ为误差;
所述步骤s5具体步骤为:在得到训练完成的web指纹预测模型后,当我们需要对目标站点的web指纹进行预测时,我们只需要向目标站点发送构建好的web请求,在得到返回的响应报文后,将其转换成数字向量形式后输入web指纹预测模型,模型则会将预测的web指纹输出,完成预测,用户可以根据预测的web指纹进行下一步操作。
本发明的一种基于机器学习的web指纹识别方法,所述步骤s1中web指纹具体包括:web容器包含nginx、apache等,web服务端语言包括php、asp、java等,web后端框架包括laravel、thinkphp、django等,web应用包括dedecms、wordpress、discuz等,web前端框架包括bootstrap、extjs、flex等,web前端语言包含javascript、php、c#等。
与现有技术相比本发明的有益效果为:在对收集到的web服务的响应报文进行处理时,为了将字符形式的响应报文转化为数字向量形式的响应报文,这里将每个字符以数字进行代替,然后根据其在报文中出现的次数分别将每个字符存储在向量的各个元素之中,这样做保留了各个字符出现的次数这一特征,虽然忽略了字符的出现顺序,但是最后从结果来看无序字符串已经可以达到web指纹预测精度目标,字符顺序的加入可能会使得模型复杂度上升,训练时间变长,但是对预测精度的提升并不是很大,在计算不同报文之间的距离时并没有使用常见的欧式距离,而是在欧氏距离中加入了参数,这是响应报文向量中的不同元素的重要性可能会有所不同,使用常见的欧式距离可能无法准确地展现出两个报文之间的准确距离,所以这里加入参数,通过训练集的结果来影响向量中不同元素的参数,使得不同报文之间的距离更加准确,训练时在完成预测进行评估时,这里选择正确对应web指纹中与预测报文最近的5个报文作为目标结果,是为了模拟在假设预测完成后,若在最近的前10个响应报文集中存在这5个报文则会使得预测成功这一事件,于是添加这5个报文作为预测报文加入参数之后的距离移动方向,使得在进行参数更新后,再次进行本次预测的精度会有所提升,选择最近的5个报文是为了尽可能地减少对其他预测产生方向的影响,相较于常见的指纹扫描工具或基于banner、html特征的web指纹检测,基于机器学习的web指纹识别方法在完成训练后再次进行检测所需时间短,预测准确度高,对于人为进行banner或html修改所造成的预测精度下降,该方法可以有效地对其进行识别,减少信息损失或篡改的影响,可以在相对较低的成本下完成大量web服务对应的指纹信息的识别。
具体实施方式
下面结合实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
本发明的一种基于机器学习的web指纹识别方法,包括以下步骤:
s1数据收集:收集或创建多个站点,这些站点包含各种类型、不同版本的web服务组件,web容器包含nginx、apache等,web服务端语言包括php、asp、java等,web后端框架包括laravel、thinkphp、django等,web应用包括dedecms、wordpress、discuz等,web前端框架包括bootstrap、extjs、flex等,web前端语言包含javascript、php、c#等,之后我们对这些站点发送设计好的请求,分别对其对应的响应报文进行分类,将这些响应报文和其对应的web指纹进行归类,将这些响应报文分为训练集和测试集;
s2数据处理:对于收集到的存在不同web指纹的响应报文,将其中包含的每个字符以数字进行代替,这里假设所有的响应报文中包含的字符类型总数为n,每一个字符a都对应一个数字xa,这样可以将一条响应报文使用一个长度为n的向量代替,这里对于每一个报文m的第i个字符mi,若其对应的数字为
s3模型训练;在获得响应报文对应的字符向量后,首先我们对这些向量进行聚类,类的个数即为原响应报文集中需要进行分类的不同种类web指纹个数:
对于两个不同的响应报文,他们的距离为:
其中ti为向量中第i个元素的参数;
对于预测集中的响应报文,计算出他们与所有测试集响应报文的距离,得出距离最近的前10个响应报文集,根据这10个响应报文集中不同的web指纹出现频率,返回web指纹出现频率最高的类别作为预测的web指纹;
在每次预测结束后,若本次预测结果与实际结果一致,则误差记为0;若本次预测结果与实际结果不一致,则取对应web指纹中与预测报文最近的5个报文,计算其平均向量,则他们的误差为:
当一轮训练结束后,每次预测的误差之和即为该轮预测的误差;
s4结束训练;若当前轮误差在规定阈值内或已经达到最大轮数,则结束训练过程,将此时的参数保存在本地,此时即视为模型已经达到稳定状态,可以用于进行web指纹的预测;之后进行web指纹预测时,可以直接调用保存在本地的参数进行预测,不再需要进行额外的模型参数训练;若当前轮误差仍在规定阈值外且尚未达到最大轮数,则根据误差对模型参数进行更新:
其中α为学习速率,δ为误差;
s5行为预测:在得到训练完成的web指纹预测模型后,当我们需要对目标站点的web指纹进行预测时,我们只需要向目标站点发送构建好的web请求,在得到返回的响应报文后,将其转换成数字向量形式后输入web指纹预测模型,模型则会将预测的web指纹输出,完成预测,用户可以根据预测的web指纹进行下一步操作。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变型,这些改进和变型也应视为本发明的保护范围。