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

基于漏洞信息引导的服务端请求伪造漏洞检测方法及装置

文献发布时间:2023-06-19 19:28:50


基于漏洞信息引导的服务端请求伪造漏洞检测方法及装置

技术领域

本发明涉及漏洞检测技术领域,尤其涉及一种基于漏洞信息引导的服务端请求伪造漏洞检测方法及装置。

背景技术

获取由其他网络服务提供的外部资源已经成为现代Web应用的一个标准特点,然而,这些外部资源经常接受用户的输入控制。例如,Web应用程序经常加载用户输入的链接来预览图片和视频,或者在使用信息采集等功能时加载链接对应的资源。为了支持这些方便的功能,Web应用程序依赖于服务端请求,以及由服务端产生并在服务端之间通讯的HTTP请求,而这也会导致服务端请求功能面临着安全威胁。例如,当Web应用程序在没有验证用户提供的URL即发送请求并获得资源时,攻击者就可以伪造请求,让服务器向一个非预期的位置发出请求,进而进一步攻击目标系统,这种现象对应的安全问题即为服务端请求伪造(Server-side Request Forgery,简称SSRF)漏洞。

现有技术中对于PHP Web应用程序中SSRF漏洞检测的研究较少,目前的SSRF漏洞相关敏感函数集合也并不完全,不能覆盖所有的SSRF漏洞相关敏感函数,这会使得静态分析无法全面的分析和评估源代码中SSRF漏洞带来的安全风险。而传统动态应用程序安全测试方法由于是采用黑盒扫描的方式进行,虽然可以检测到SSRF漏洞但是会存在较高的漏报率。因此亟需一种SSRF漏洞检测方法,以使得能够在全面发掘SSRF漏洞相关敏感函数的基础上,降低SSRF漏洞的误报率以及漏报率。

发明内容

本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种实现方法简单、检测效率与精度高以及误报率与漏报率低的基于漏洞信息引导的服务端请求伪造漏洞检测方法及装置,能够精准全面挖掘出服务端请求伪造漏洞,同时降低服务端请求伪造漏洞检测的误报率以及漏报率。

为解决上述技术问题,本发明提出的技术方案为:

一种基于漏洞信息引导的服务端请求伪造漏洞检测方法,步骤包括:

步骤S01.构造对Web应用服务端的请求并发送给Web服务端;

步骤S02.捕获到所述对Web应用服务端的HTTP请求时,对捕获到的HTTP请求进行解析,解析出请求数据包中的输入点后发送给探测引擎;

步骤S03.接收到探测引擎发送给Web服务端的HTTP探测请求时,根据输入源的字符串和污点处的字符串使用阶段化漏洞判别方法判断是否存在漏洞,如果判断出存在漏洞则将漏洞对应的数据包以及漏洞类型反馈给模糊测试器;

步骤S04.模糊测试器根据对应的漏洞类型对漏洞载荷进行变异,将变异后的漏洞载荷发送给Web服务端以作为Web应用对应功能点的输入;

步骤S05.在模糊测试器向Web服务端发送模糊测试请求的发送过程中监测漏洞是否被触发,如果是则判定漏洞存在,并输出漏洞信息以及触发漏洞的请求信息;

所述阶段化漏洞判别方法通过对输入源的字符串和污点处的字符串依次执行子字符串判别、字符串相似度判别以及对比校验判别三个阶段判别出存在漏洞的情况,所述子字符串判别的阶段根据污点处的输入字符串是否是输入源的字符串的子串进行判别,所述字符串相似度的阶段判别字符串之间的相似度,如果满足相似度条件则转入执行所述对比校验判别的阶段,所述对比校验判别的阶段根据各参数值处的输入与污点处值的对比结果判别是否存在漏洞。

进一步的,执行所述子字符串判别的阶段时,判断污点处的输入字符串是否是输入源处输入的字符串的子串,如果是子串并且匹配部分的长度大于预设阈值,则判定当前位置存在漏洞,以及判定对应的HTTP参数点可以输入有效的漏洞载荷;否则转入执行所述字符串相似度判别的阶段。

进一步的,执行所述字符串相似度判别的阶段时,计算从输入源的字符串A到污点处的字符串B之间的距离,以评测从输入源的字符串A变化到污点处的字符串B所需要增加和删除的字符串数量是否满足阈值条件,如果满足阈值条件则判定输入源的字符串A与污点处的字符串B是相似的。

进一步的,执行所述对比校验判别阶段时,对数据包中的每个参数构造两个不同的输入,根据两个参数值处的两个输入对应的进入到污点处的值是否相同判定当前位置是否存在漏洞。

进一步的,数据包中每个参数构造的两个输入分别为A

进一步的,所述步骤S04中根据对应的漏洞类型对漏洞载荷进行变异包括:先将所有的操作类型按照不同组合方式进行组合,得到所有的组合形式形成变异策略链L,再剔除掉其中无效的组合后,形成最终的变异策略链L。

进一步的,其特征在于,所述步骤S01的步骤包括:

步骤S101.采用静态分析从Web应用程序源代码中提取网站地图数据,构建一份初步的网站地图;

步骤S102.以步骤S101构建的网站地图作为状态感知爬虫输入,根据网站地图与Web应用的每一个页面进行交互式爬虫,构造出对Web应用服务端有效的请求;

步骤S103.将步骤S102构造的请求发送给Web服务端。

进一步的,所述步骤S02的步骤包括:

步骤S201.插桩器捕获发送给Web服务端的请求,并将捕获到的请求反馈给HTTP请求解析模块进行解析;

步骤S202.HTTP请求解析模块解析请求中参数对应的输入点,标记出请求数据包中的输入点后,将解析好的数据发送给探测引擎。

一种基于漏洞信息引导的服务端请求伪造漏洞检测装置,包括:

请求构造模块,用于构造对Web应用服务端的请求并发送给Web服务端;

HTTP请求解析模块,用于捕获到所述对Web应用服务端的请求时,对捕获到的请求进行解析,解析出请求数据包中的输入点后发送给探测引擎;

阶段化漏洞判别模块,用于接收到探测引擎发送给Web服务端的探测请求时,根据输入源的字符串和污点处的字符串使用阶段化漏洞判别方法判断是否存在漏洞,如果判断出存在漏洞则将漏洞对应的数据包以及漏洞类型反馈给模糊测试器;

模糊测试器,用于根据对应的漏洞类型对漏洞载荷进行变异,将变异后的漏洞载荷发送给Web服务端以作为Web应用对应功能点的输入;

漏洞检测模块,用于在模糊测试器向Web服务端发送模糊测试请求的发送过程中监测漏洞是否被触发,如果是则判定漏洞存在,输出漏洞信息以及触发漏洞的请求信息;

阶段化漏洞判别模块中所述阶段化漏洞判别方法通过对输入源的字符串和污点处的字符串依次执行子字符串判别、字符串相似度判别以及对比校验判别三个阶段判别出存在漏洞的情况,所述子字符串判别的阶段根据污点处的输入字符串是否是输入源的字符串的子串进行判别,所述字符串相似度的阶段判别字符串之间的相似度,如果满足相似度条件则转入执行所述对比校验判别的阶段,所述对比校验判别的阶段根据各参数值处的输入与污点处值的对比结果判别是否存在漏洞。

一种存储有计算机程序的计算机可读存储介质,所述计算机程序执行时实现如上述方法。

与现有技术相比,本发明的优点在于:本发明通过查找出所有相关的PHP敏感函数,然后使用轻量级的插桩方式采用阶段化漏洞判别方法进行漏洞判断,依次按照执子字符串判别、字符串相似度判别以及对比校验判别三个阶段判别出存在漏洞的情况,判断漏洞较大概率存在之后,对漏洞载荷进行变异并将变异后的漏洞载荷作为Web应用相应功能点的输入,同时持续监测判断SSRF漏洞是否可以被触发,以确定漏洞是否真的存在,能够精准、全面的挖掘出SSRF漏洞,同时结合阶段化漏洞判别方法,能够有效避免SSRF漏洞检测的误报以及漏报。

附图说明

图1是本实施例基于漏洞信息引导的服务端请求伪造漏洞检测方法的实现流程示意图。

图2是本实施例中阶段化漏洞判别方法的实现流程示意图。

具体实施方式

以下结合说明书附图和具体优选的实施例对本发明作进一步描述,但并不因此而限制本发明的保护范围。

如图1所示,本实施例基于漏洞信息引导的服务端请求伪造漏洞检测方法的步骤包括:

步骤S01.构造对Web应用服务端的请求并发送给Web服务端;

步骤S02.捕获到所述对Web应用服务端的HTTP请求时,对捕获到的HTTP请求进行解析,解析出请求数据包中的输入点后发送给探测引擎;

步骤S03.接收到探测引擎发送给Web服务端的HTTP探测请求时,根据输入源的字符串和污点处的字符串使用阶段化漏洞判别方法判断是否存在漏洞,如果判断出存在漏洞则将漏洞对应的数据包以及漏洞类型反馈给模糊测试器;

步骤S04.模糊测试器根据对应的漏洞类型对漏洞载荷进行变异,将变异后的漏洞载荷发送给Web服务端以作为Web应用对应功能点的输入;

步骤S05.在模糊测试器向Web服务端发送模糊测试请求的发送过程中监测漏洞是否被触发,如果是则判定漏洞存在,并输出漏洞信息以及触发漏洞的请求信息;

步骤S03中阶段化漏洞判别方法通过对输入源的字符串和污点处的字符串依次执行子字符串判别、字符串相似度判别以及对比校验判别三个阶段判别出存在漏洞的情况,子字符串判别的阶段根据污点处的输入字符串是否是输入源的字符串的子串进行判别,字符串相似度的阶段判别字符串之间的相似度,如果满足相似度条件则转入执行对比校验判别的阶段,对比校验判别的阶段根据各参数值处的输入与污点处值的对比结果判别是否存在漏洞。

本实施例针对于SSRF(服务端请求伪造)漏洞检测,首先通过查找出所有相关的PHP敏感函数,然后使用轻量级的插桩方式采用阶段化漏洞判别方法进行漏洞判断,依次按照执子字符串判别、字符串相似度判别以及对比校验判别三个阶段判别出存在漏洞的情况,判断漏洞较大概率存在之后,对漏洞载荷进行变异并将变异后的漏洞载荷作为Web应用相应功能点的输入,同时持续监测判断SSRF漏洞是否可以被触发,以确定漏洞是否真的存在,能够精准、全面的挖掘出SSRF漏洞,同时结合阶段化漏洞判别方法,能够有效避免SSRF漏洞检测的误报以及漏报。

本实施例中步骤S01的步骤包括:

步骤S101.采用静态分析从Web应用程序源代码中提取网站地图数据,构建一份初步的网站地图;

步骤S102.以步骤S101构建的网站地图作为状态感知爬虫输入,根据网站地图与Web应用的每一个页面进行交互式爬虫,构造出对Web应用服务端有效的请求;

步骤S103.将步骤S102构造的请求发送给Web服务端。

本实施例中,步骤S02的步骤包括:

步骤S201.插桩器捕获发送给Web服务端的请求,并将捕获到的请求反馈给HTTP请求解析模块进行解析;

步骤S202.HTTP请求解析模块解析请求中参数对应的输入点,标记出请求数据包中的输入点后,将解析好的数据发送给探测引擎。

经过上述步骤,即可以首先查找出所有相关的PHP敏感函数,后续再进一步进行SSRF漏洞的判别与检测。

为了高效的发现与漏洞点相关联的HTTP请求字段中的输入,本实施例结合动态污点传播理论从内核层面对变量的传递进行标记,即通过对应源(source)和汇(sink)的标记,确定污点的输入位置。传统动态污点推理分析并不能准确判断漏洞点是否存在,这是由于在污点传播时,很难确定中间的过滤函数是否有效的对传播值做了有效的过滤,假设过滤不充分,如果在变量传递经过过滤函数之后将污点标记去除,那么就会造成漏报;如果过滤函数已经对数据做了很严格的过滤操作,还是将污点标记继续传播下去,那么也会导致漏报。

考虑到过滤函数的本质是对输入字符串的处理,也即是增加、删除和替换操作,因而只要经过过滤处理之后字符串的改变并不是很大即可以基本判断该sink位置很大可能存在漏洞。本实施例利用字符串过滤处理前后的上述特性,构建形成阶段化漏洞判别方法,以实现对漏洞是否可能存在进行判断,进而决定是否进行下一步的模糊测试,。如图2所示,本实施例阶段化漏洞判别方法共分为三个阶段,详细流程为:

A.子字符串判别阶段:判断污点处的输入字符串是否是输入源处输入的字符串的子串,如果是子串并且匹配部分的长度大于预设阈值,则直接判断当前位置存在漏洞,并且对应的HTTP参数点可以输入有效的漏洞载荷;否则转入执行字符串相似度判别阶段,即如果只是大致的匹配,例如字符串被替换或者增加,则还不能判断是否存在漏洞,需要进行下一阶段(字符串相似度判别阶段)判断。

B.字符串相似度判别阶段:计算从输入源的字符串A到污点处的字符串B之间的距离(具体可采用莱文斯坦距离),以评测从输入源的字符串A变化到污点处的字符串B所需要增加和删除的字符串数量是否满足阈值条件,如果满足阈值条件则判定输入源的字符串A与污点处的字符串B是相似的。由于有可能存在过滤函数将存在危险操作的漏洞载荷替换成了固定的字符串,因而当判断到字符串相似后仍不能判断此处的漏洞存在,需要继续进入下阶段(对比校验判别阶段)的判断;

C.对比校验判别阶段:探测模块对数据包中每个参数构造的两个输入分别为A

上述对比校验判别阶段中,具体在同一个输入点构造两个相似的输入A

本实施例通过上述阶段化漏洞判别方法,对输入源的字符串和污点处的字符串依次进行子字符串判别、字符串相似度判别以及对比校验判别三个阶段的判断,可以充分挖掘过滤处理之后字符串的改变状态,实现对漏洞是否可能存在进行精准判断,不仅能够减少造成漏报的概率,还能够提升模糊测试的效率。

本实施例中步骤S03的步骤包括:

S301.模糊测试引擎会根据当前检测出的漏洞类型,采用针对性的链式变异策略进行种子生成,并将生成的种子发送给Web服务端;

S302.在模糊测试请求发送的这个过程中监测漏洞是否可以被触发,如果判断漏洞可以被触发并且漏洞存在,则输出漏洞信息和能触发漏洞的请求信息。

本实施例步骤S04中根据对应的漏洞类型对漏洞载荷进行变异采用链式变异策略,具体对相应类型的漏洞,先将所有的操作类型按照不同组合方式进行组合,构成一系列变异操作的组合,从而完成对初始漏洞载荷的变异,得到一个变异策略链L,该变异策略链L是列表类型,由该列表包含了对应漏洞类型的所有突变操作组合,利用这些组合可以基于初始的漏洞载荷生成多样化的漏洞载荷,相比于只使用一种变异操作变异的漏洞载荷能够更大概率的绕过复杂的过滤条件,从而有效完成漏洞触发;在变异策略链L的基础上进一步剔除掉无效的变异组合,即可形成最终的变异策略链L。即本实施例中完善的变异策略链L的生成需要经过两步,首先先对所有的操作类型做一个组合,得到所有的组合形式,以表1中操作类型为例,初始形成的变异策略链Linit={S0,S1,S2,...,S1S2,S2S3,...,S10S11,S12S13,...S1S2S3,...};随后剔除掉无效的变异组合,例如表1中S1和S2组合为不必要组合且会存在重复,可以予以剔除,最终得到完善的变异策略链L。

表1:链式变异策略中操作类型

本发明通过基于漏洞信息引导的灰盒模糊测试方式实现服务端请求伪造漏洞检测,使用分阶段的漏洞识别方法可以快速定位SSRF漏洞,使得在向用户反馈漏洞出现的同时,可以有效触发SSRF漏洞的PoC以及定位漏洞位于代码中的位置信息,从而帮助用户更好地理解安全问题。

本实施例基于漏洞信息引导的服务端请求伪造漏洞检测装置,包括:

请求构造模块,用于构造对Web应用服务端的请求并发送给Web服务端;

HTTP请求解析模块,用于捕获到所述对Web应用服务端的请求时,对捕获到的请求进行解析,解析出请求数据包中的输入点后发送给探测引擎;

阶段化漏洞判别模块,用于接收到探测引擎发送给Web服务端的探测请求时,根据输入源的字符串和污点处的字符串使用阶段化漏洞判别方法判断是否存在漏洞,如果判断出存在漏洞则将漏洞对应的数据包以及漏洞类型反馈给模糊测试器;

模糊测试器,用于根据对应的漏洞类型对漏洞载荷进行变异,将变异后的漏洞载荷发送给Web服务端以作为Web应用对应功能点的输入;

漏洞检测模块,用于在模糊测试器向Web服务端发送模糊测试请求的发送过程中监测漏洞是否被触发,如果是则判定漏洞存在,输出漏洞信息以及触发漏洞的请求信息;

阶段化漏洞判别模块中阶段化漏洞判别方法通过对输入源的字符串和污点处的字符串依次执行子字符串判别、字符串相似度判别以及对比校验判别三个阶段判别出存在漏洞的情况,子字符串判别的阶段根据污点处的输入字符串是否是输入源的字符串的子串进行判别,字符串相似度的阶段判别字符串之间的相似度,如果满足相似度条件则转入执行所述对比校验判别的阶段,对比校验判别的阶段根据各参数值处的输入与污点处值的对比结果判别是否存在漏洞。

本实施例基于漏洞信息引导的服务端请求伪造漏洞检测装置与上述基于漏洞信息引导的服务端请求伪造漏洞检测方法为一一对应,在此不再一一赘述。

本实施例还提供存储有计算机程序的计算机可读存储介质,计算机程序执行时实现如上述方法。

上述只是本发明的较佳实施例,并非对本发明作任何形式上的限制。虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明。因此,凡是未脱离本发明技术方案的内容,依据本发明技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均应落在本发明技术方案保护的范围内。

相关技术
  • 预测代码存在漏洞概率的方法、漏洞检测方法、相关装置
  • 跨站伪造请求漏洞检测的方法及装置
  • 检测WebSocket跨站请求伪造漏洞的方法和装置
技术分类

06120115923406