一种安全协议消息构造方法与流程

文档序号:14879875发布日期:2018-07-07 09:27阅读:165来源:国知局

本发明属于信息安全技术领域,涉及一种安全协议消息构造方法,具体涉及一种高效的安全协议消息构造方法。



背景技术:

安全协议作为网络空间安全的重要组成部分,是保障网络空间安全的关键和灵魂。所以,对运行于计算机网络、通信网络和分布式系统中的安全协议的安全性进行分析与验证,发现其逻辑错误与安全漏洞,对保障网络空间安全至关重要。

从安全协议设计、安全协议抽象规范安全性的分析与验证、到安全协议实施(安全协议代码),人们主要集中在对安全协议抽象规范的安全性分析和验证方面,实用性较差。近几年来,人们对安全协议的最终表现形式:安全协议实施越来越感兴趣。因为无论任何安全协议,要想发挥作用,必须进行安全协议实施,故对其安全性进行分析对保障网络空间安全具有重要意义。安全协议实施本身不仅比其抽象规范复杂,而且在安全协议实施过程中,因程序员的专业素质层次不齐,无法保证不引入逻辑错误或者是代码错误,进而可能会造成安全协议实施与其抽象规范不一致。此外,很多实践表明,即使对形式化方法已证明安全的安全协议,在实施过程中,也可能因为人为的失误而引入了新的安全问题,变得不再安全。由此可见,仅仅在安全协议抽象模型层面对其进行安全性分析研究是远远不够的,必须对安全协议实施的安全性进行研究,以得到具有很强实用性的安全协议实施,这是保证信息网络空间安全的基础前提,更是网络空间安全的重要组成部分。安全协议实施目前主要依靠人为的理解和提取。通过程序分析理解实施代码,需要准确理解其语义特征和含义,由于先验模式的局限性,就导致了安全协议实施理解的误差。此外,有些私有协议在保证自身规范的同时使用了自定义的加密/解密函等函数,这些函数的先验模式的建立便存在模式不完整等缺陷,这对安全协议实施的语义特征及规范化理解也造成了较大难度,进而对分析安全协议实施的安全性也产生了很大的挑战。

安全协议实施由安全协议客户端实施和安全协议服务器端实施两部分组成。当前的研究主要分别基于以下三个假设:①.安全协议客户端实施及服务器端实施都不能获得;②.安全协议客户端实施及服务器端实施都能获得;③.安全协议客户端实施可以获得。根据目前实际网络安全应用,研究者几乎不可能获得安全协议服务器端实施。所以,从获得安全协议服务器端实施、获得安全协议客户端实施及安全协议服务器端实施两个假设来分析安全协议实施安全性,其应用价值与意义较小。

基于以上三点前提假设,目前对安全协议实施安全性分析主要应用了程序分析(代码分析)、网络轨迹(net-trace)、指令分析、软件测试及模型抽取的方法。相关研究工作存在以下主要问题:

1)、对安全协议实施理解不全面、不准确,导致分析结果不准确;

2)、对安全协议些实施的规范抽象准确率不高。



技术实现要素:

为了解决上述技术问题,本发明提供了一种高效的安全协议消息构造方法。

本发明所采用的技术方案是:一种高效的安全协议消息构造方法,其特征在于:首先建立消息构造模型,然后基于函数迹进行协议消息构造;

所述建立消息构造模型,首先设fun()函数是通过函数钩子方法监控的javascript函数,arg为fun()函数对应的参数,argm为修改之后的参数,sg是fun()函数修改参数重新执行后得到的输出值,tn为协议消息中的消息cell,m为原始协议消息,mg为构造后得到的协议消息;则所述模型的工作流程包括以下子步骤:

步骤a1:用argm替换掉fun(arg)中的参数arg得到参数修改后的函数fun(argm);

步骤a2:重新执行fun(argm)得到新的函数输出sg,sg用来替代消息cell中对应位置的消息cell块tn;

步骤a3:在消息m中定位到需要被替换的消息cell,tn(n=1,2,3...,n);然后得到新的消息mg,该mg消息就是得到的构造消息;

所述基于函数迹进行协议消息构造,具体实现包括以下子步骤:

步骤b1:对使用函数钩子方法得到的函数迹进行解析,得到函数名funname与函数参数arg的栈结构;

步骤b2:修改相应函数参数得到新的函数输出,调用栈结构中的函数参数arg和函数名funname,修改arg得到argm,然后重新执行funname对应的函数得到新的函数输出sg;

步骤b3:在拦截的客户端协议消息m中,定位需要被替换的消息cell-tn,接着从m消息中删除tn,然后把步骤b2中得到的sg值嵌入到原tn所在位置,便得到新的消息mg,该消息即构造消息。

本发明首先,对截获的安全协议消息进行cell解析,提出了适用于实际应用的安全协议消息解析算法,该算法有针对性地对安全协议消息进行解析,对协议消息中不必要进行最小cell解析的协议消息进行cell解析,具有较高的效率;接着,使用安全函数的原始输出与解析后的函数迹进行序列对比,以此定位协议消息中需要被替换的协议消息cell,该过程把函数输出与cell块进行全序列对比,具有很高准确率;其次,从安全协议实施着手,通过使用函数钩子技术对安全协议实施的安全相关函数进行精确的监控、跟踪及函数输出重构,这里从安全协议实施入手,对安全相关函数的参数、输出等信息进行精确监控,结果准确;然后,使用重构的安全函数输出替代已经被定位的需要被替换的cell,便得到构造的安全协议消息,该消息被发送至安全协议服务器端。

本发明的整个过程中,对安全协议实施进行代码级的分析及处理,对协议消息进行最小单元cell的解析以及准确地cell定位,均对安全协议相关的最小单元进行收集、分析及处理,具备很高的效率及准确率。

附图说明

图1为本发明实施例的消息构造模型;

图2为本发明实施例的函数迹解析算法;

图3为本发明实施例中以http1.1为例的协议协议消息的分块划分示意图;

图4为本发明实施例的安全函数输出直接组成协议消息块时的替换消息块的定位示意图;

图5为本发明实施例的安全函数输出直接组成协议消息块情形下的协议消息构造示意图;

图6为本发明实施例的被钩函数输出经过其他函数处理后组成协议消息块时的替换消息块的定位示意图;

图7为本发明实施例的被钩函数输出经过其他函数变换处理后组成协议消息cell时的协议消息构造示意图。

具体实施方式

为了便于本领域普通技术人员理解和实施本发明,下面结合附图及实施例对本发明作进一步的详细描述,应当理解,此处所描述的实施示例仅用于说明和解释本发明,并不用于限定本发明。

为了分析基于b/s模式下网络应用系统所部署的安全协议的实施(协议部署代码)安全性,提出了基于消息构造的方法进行安全协议实施安全性分析。此处,消息构造意为自动化生成合法的安全协议客户端消息,该消息被发往安全协议服务器端。后面对服务端的响应消息进行分析,由此分析安全协议实施安全性。

对于协议消息构造,建立了消息构造模型,具体如图1所示。

图1中fun是通过函数钩子技术监控的javascript函数,arg为该函数对应的参数,argm为修改之后的参数(modifiedargument),sg(generatedstatement)是fun函数修改参数重新执行后得到的输出值(返回值),tn为协议消息中的消息cell,m为原始协议消息,mg为构造后得到的协议消息。

整个模型的流程如下:

(1)首先,用argm替换掉fun(arg)中的参数arg得到参数修改后的函数fun(argm);

(2)然后,重新执行fun(argm)得到新的函数输出sg,该sg用来替代消息cell中对应位置的消息cell块tn;

(3)最后,在消息m中定位到需要被替换的消息cell,tn(n=1,2,3...,n),然后得到新的消息mg,该mg消息就是得到的构造消息,它被发送到安全协议服务器端。

基于该模型,本实施例提出了基于函数迹的协议消息构造方法。该方法主要用于解决消息构造部分(messagegenerated)产生构造消息的问题,然后构造的协议消息被发往服务器端。该方法的主要步骤如下:

(1)首先,对使用函数钩子技术得到的函数迹进行解析,得到函数名funname与函数参数arg的栈结构;

(2)然后,修改相应函数参数得到新的函数输出,调用栈结构中的函数参数arg和函数名funname,修改arg得到argm,然后重新执行funname对应的函数得到新的函数输出(如图1中的sg);

(3)最后,在拦截的客户端协议消息m中,定位本实施例需要被替换的消息cell,tn,接着从m消息中删除tn,然后把(2)中得到的sg值嵌入到原tn所在位置,便得到新的消息mg,该消息即构造消息。

本实施例主要涉及了高效的协议消息的构造,因为通过函数钩子技术得到的函数迹是原始的函数迹数据,没有便于本发明适用的数据结构。为了在协议消息构造过程中拥有较适合的数据结构,需要对其进行规范化解析处理。从图1中可知,该协议消息构造方法也涉及了消息cell的替换,而在进行消息cell替换之前必须先对需要被替换的消息cell位置进行定位,然后把该位置的消息cell丢弃,再把修改函数参数得到的新的函数输出(如图1的sg)嵌入到被删除消息cell的位置(如图1中的t2消息cell所在位置)。这样就得到了新的消息,如图1中的mg消息。由此可知,该协议消息构造方法主要分为函数迹解析和消息构造两个部分。

一、函数迹解析

函数迹解析是协议消息构造的重要前提部分,因为在消息构造部分,需要得到被钩函数的新输出,而新输出的产生则依赖于被钩函数的参数修改,被钩函数参数的修改首先需要对被钩函数的迹进行解析,得到被钩函数的函数名及其参数,然后根据其参数得到修改的参数argm。在消息构造部分,使用得到的新函数参数argm替代被钩函数的原始参数arg,基于此完成消息构造功能。故提出的安全函数迹解析算法,如图2所示;

首先,将通过函数钩子技术获得的安全函数的执行迹保存在日志文件中。再对该日志文件进行遍历,直到该文件的结束(图2算法中的1行),把读取的函数迹按照函数名、函数输入及函数输出的形式表示成相的安全函数迹—apii(图2算法中2-3行所示)。然后,若得到的函数函数迹(算法中apii)不空,则将其存入到建立的栈结构中(图2算法中6行),直到把所有函数返回值不空的函数迹存入栈中。以此便完成函数迹解析部分,解析结果以栈结构的形式保存。

二、协议消息构造

1、获得一条协议消息

在安全协议客户端输入特定的输入数据,客户端必将产生一条完整的协议消息。在其被发送过程中,使用中间人代理(proxy)拦截该条消息。由此便获得一条完整的协议消息。

2、对协议消息进行解析划分得到消息cell

在协议消息中,包含协议消息字符最多的一段称为协议消息段,记为集合p,消息块中最小的单元称为协议消息cell,记为集合t;协议消息段中由一个或多个协议消息cell组成的协议消息部分,且该部分所包含的协议消息字符或协议消息cell在数量上比协议消息段少,该部分消息称为协议消息块,记为集合b,且t∈b∈p,

在获得协议消息后,需要对该消息进行cell解析划分操作,以便高效、准确地定位出协议消息中需要被替换的消息cell块tn(n=1,2,…,n)。协议消息解析划分操作需要解决的核心问题是协议消息的cell解析,即在协议消息中识别出消息中的结束符、分界符及连接符,以得到协议消息具体cell分块。

在协议消息中,消息结束符为“\r”或者是“\r\n”,它们用来指示某条协议消息的结束或对协议消息进行分行。分界符用来区分不同协议消息的不同字段或消息段,常用的分界符有“/”等。一般来说,从协议消息起始位置到第一个分界符出现,其间出现的消息字段或消息段为一个协议消息段p,第一个协议消息分界符和第二个协议消息分界符之间是第二个协议消息段,该消息段p中还包含了更小的协议消息。以此依据分界符就可以完成协议消息的消息段的解析划分。

通过识别协议消息中的分界符划分的消息段p包含协议消息块b,该类消息块通常是通过常见的协议消息连接符连接而成。通常,一个分界符与其相邻的连接符之间则是一个协议消息块,同时两个连接符之间部分也是协议消息块。这类消息块通过连接符的连接便组成了较大的协议消息块。常见的连接符有“?”、“&”及“=”等。

通常情况下,协议消息块中还包含整个协议消息中最小的组成单位,本实施例称之为协议消息单元(cell),这些cell中不包含任何协议消息符号,均是一串确定字符,在协议消息中它们不可再进行协议消息的cell解析操作。

在本实施例中的应用场景中,直接运用消息分界符和连接符语义来解析协议消息存在很大难度,因为通过扫面安全协议客户端实施能够得到协议消息中所使用的分界符和连接符,但是不能判断这些符号的种类,即通过扫描协议实施不能判断出某个符号的语义特征。

故本实施例以某个协议消息符号在协议消息中出现的次数为基础进行协议消息的cell解析。首先,对安全协议客户端实施进行扫描,识别出该实施中所包含的特殊符号,并对每个符号出现的次数进行统计;接着,将在协议消息中出现次数较多的符号进行降序排列,并依次将出现次数多的协议符号周边的消息块段分开,便得到协议消息段p;然后,在每个协议消息段中再通过对出现次数多的消息符进行识别,便得到协议消息块b;最后,继续对b中出现次数相对多地协议消息符进行识别及消息块解析,直到所有消息块均为协议消息cell,由此便完成协议消息的cell解析。

为了根据实际需求并能够高效地完成协议消息解析,在协议消息cell解析过程中,对某些消息块没有必要解析成协议消息的最小cell,这样会在很大程度上提高解析方法的效率。如在图3的httpget协议消息中,不需把协议消息中的ip地址“127.0.0.1”解析成“127”、“0”、“0”及“1”。因为在实际应协议消息中,ip地址是协议消息中一个整体,若对其进行cell级别的解析,一方面会降低协议消息解析划分的效率,另一方面也可能会使协议消息cell的定位产生错误,以至于在不能完成重构的函数输出对需要替换协议消息cell的替代。如在协议消息cell定位时,目标是为了替换协议消息中pw对应的值“127”,若最终安全相关函数输出是构成协议消息中的某个cell块,且其值为“127”,该函数输出数值与ip地址中的127匹配成功,则会对协议消息中127所在的cell进行定位标记,在协议消息cell替换过程时便可能会替换掉ip地址中的“127”字段,以此就会造成安全协议客户端或中间代理人与服务器建立连接失败或本实施例提出的消息构造方法构造消息失败的结果。为了避免该类错误的发生,因此在本实施例的应用实际中,对协议消息中某些特定的消息cell组合不进行cell解析和划分。以http1.1版本为例,协议消息的分块解析如图3所示;

(1)识别出整条get协议消息中的消息结束符“\r”或“\r\n”(“\r”符表示协议消息的结束,而“\r\n”表示某部分协议消息结束后,其余的协议消息另取一行显示),以此便得到协议消息中某部分完整消息段p;

(2)对p进行cell解析处理,识别空格符便得到解析后的协议消息cell-t1和待进一步解析消息块b2,其中t1的内容为get方法,消息块b2为需要进一步解析部分;

(3)对b2进行cell解析处理,识别分界符“/”,便得到协议消息cell-t2和待处理消息块b3,其中t2为ip地址,这里不做进一步解析;

(4)对b3进行cell解析处理,识别连接符“?”,便得到消息cell-t3和待处理消息块b4,这里t3为login.jsp,其为一个具体登录地址,不做更细致cell解析,即不识别协议消息符“.”将其解析称为“login”和“jsp”。在该步骤中,因“?”和“&”均是连接符,故可以同时识别二者。若解析时,识别“?”与“&”的先后顺序不同,在同层级解析上,得到的结果会有所区别,但不影响最终cell解析结果;

(5)对b4进行cell解析处理,识别符号“&”,得到协议消息块b4和b5;

(6)再对b4和b5进行cell解析处理,识别协议消息符“=”,便得到协议消息cell,t4,t5,t6及t7;

(7)对以上得到的t1~t7消息块组合,就得到图3中(b)中所示的消息块。

基于上述方法,便完成了协议消息的cell解析,图3中(b)部分所示为协议消息cell解析结果,其中tn在协议消息构造时需要完成与被钩函数及其相关函数输出序列匹配的步骤,以此来定位协议消息中需要被替换的协议消息cell块。

3、被替换协议消息cell的定位与安全函数输出的构造

该部分的主要目的有两个:其一,对需要被替换协议消息cell进行定位;其二,对被钩安全函数的输出进行重构。首先,准确定位需要被替换消息cell在协议消息中的位置,对该位置进行标记,并移除该位置的协议消息cell块。然后,从使用函数钩子方法得到的函数迹进行解析结果中调用被钩函数及其参数,并修改其参数,重新运行该函数便得到新的函数输出;最后,使用得到的函数输出替代被定位需要替代协议消息cell,由此便得到新的协议消息,该消息称之为构造协议消息。该构造协议消息之后将被发送至协议服务器端。

该部分的最终目的是构造协议消息,而在构造协议消息之前需要完成对协议消息中需要被替换消息cell的定位,而被替换协议消息cell的定位分为被钩函数的输出直接作为协议消息组成cell和被钩函数的输出经过变换处理后组成协议消息cell两种情况来讨论。因为在实际协议实施过程中,为了满足实际情形的需要,需要对函数的输出做出相应的调整和处理在作为构成协议消息cell,如对函数输出值做hash散列、加密及签名等操作。在后一种情形中,首先需要通过扫描安全协议客户端javascript实施,并主要对安全相关函数及其相关函数进行关注,然后建立函数处理关系,该关系只需要考虑向下处理关系,即从安全相关函数开始,关注处理安全函数的输出序列作为下一个函数的输入参数的函数链。这些函数之间有如下关系:

f1→f2→...→fn

在该关系中,f1函数的输出作为f2函数的输入,fn-1函数输出作为fn函数输入。

3.1被钩函数的输出直接作为协议消息cell

该情形下,安全函数的输出直接作为协议消息中的cell。首先,使用被钩函数的最终输出与已完成分块cell解析的协议消息进行逐cell序列匹配,并对匹配成功的协议消息cell做标记。然后,把该协议消息cell从协议消息中移除。最后,使用重构的被钩函数输出替代被移除的协议消息cell位置。至此,协议消息构造完成。而消息构造的重要前提是需要先定位协议消息中需要被替换的协议消息cell,在被钩函数的输出直接组成协议消息中的某cell的情形下,直接使用函数的输出序列与完成cell解析的协议消息块进行序列匹配即可完成需被替换消息cell的定位。

该情形下,首先,从函数迹解析结果调用被钩函数及其原始函数参数。然后,执行该函数便得到函数输出,再使用该输出与协议划分解析后的消息cell块进行序列匹配,并对匹配位置进行标记,处于改位置的协议消息cell即需要被替换的协议消息块。具体步骤如图4所示:

图4中,f1为被钩的安全函数,arg1为该函数的原始参数,sg1为该函数参数为arg1时的输出,sg1&&tn表示使用函数f1输出sg1与划分的协议消息cell做序列匹配,其结果为true表示匹配成功。originmessage即为原始协议协议消息,tn(n=1,2,...,n)为协议消息划分后的消息cell块。若图中sg1与t2匹配成功,则表示t2为需要被替换的协议消息块,其所在位置的cell即t2将被移除。

在需要被替换协议消息cell定位完成后,下一步将生成协议构造消息,其过程如图5所示;

图5中,argm为修改的函数f1的参数,generatedmessage为完成协议消息cell替换后得到的构造协议消息。

(1)首先,从函数迹解析部分调用被钩函数f1并使用修改的参数argm替代原参数arg1作为该函数输入参数。

(2)然后,重新执行f1函数,得到新的函数输出sg1。

(3)最后,使用sg1替代协议协议消息originmessage中被定位的消息cell块t2,便得到构造消息,即generatedmessage。

图5中,不论f1函数参数的个数,argm直接替换掉原始参数arg1即可。

3.2被钩函数的输出经过变换处理后构成协议消息cell

该情形下,被钩的安全函数输出经过相关函数/方法变换处理之后作为协议消息的某个cell,被替换协议消息cell的定位过程相对复杂。首先,扫描安全协议客户端实施生成协议消息代码,从被钩函数向下查找处理其输出的函数方法,以此得到从被钩函数向下的函数调用关系。然后,通过从函数迹部分调用被钩函数及其参数,执行其后得到被钩函数的输出,根据上一步得到的函数调用,得到调用关系最后一个函数的输出。最后,将该函数输出与已完成cell解析的协议消息进行序列匹配,同时,并记录匹配后的协议消息cell位置。至此,协议消息需被替换的cell位置被定位。其过程示意如图6所示;

图6中,argn(n=2,…,n)是与被钩函数存在调用关系的函数参数,sgn(n=2,3,…,n)为这些函数的输出值,sgn&&tn表示sgn与协议消息cell块tn(n=1,2,…,n)进行匹配,其值为true则表示匹配成功,即完成了协议消息中需要被替换消息cell的定位。

在需被替换协议消息块被成功定位后,下一步需要完成对协议消息的构造。该情形下消息构造与被钩函数输出直接组成协议消息块情形下的消息构造存在差异:首先,从函数迹解析部分调用被钩函数及其参数,并对其参数进行修改,重新运行该函数后得到新的函数输出值;然后,把该输出值作为输入传入函数调用关系的下一个函数,重新执行该函数得到新的输出值,再把该输出作为输入传入调用关系的下一个函数,并得到其输出,以此规则迭代,直到函数调用关系的最后一个函数。最后,用最后一个函数的输出值替代协议消息中需要被替换消息cell块,得到新的协议消息,即为协议构造消息。其详细过程如图7所示;

(1)首先,从函数迹解析部分调用被钩函数f1,并使用修改的参数argm替代该函数的原始参数arg1,重新执行该函数便得到新的f1函数输出sg1,该输出值将作为输入传到下一个函数中,如图中f2函数;

(2)接着,sg1被作为f2的参数替代f2原始中参数arg2中某部分,重新执行该函数得到新的输出sg2,它将作为输入参数传入函数处理关系的下一个函数

(3)然后,重复(2)步,直到函数fn的参数为函数fn-1的输出值,该函数的输出sgn,它用来替代协议消息originmessage中消息cell块t2;

(4)最后,将sgn放入到originmessage中t2消息cell的相应位置,便得到新的构造消息generatedmessage,该消息将被发送至安全协议服务器端。

上图中,若存在函数调用关系的所有函数均只有一个参数,fn-1函数的输出可直接替代fn函数的输入参数,则sgn-1=argn,此时最后一个函数输出可直接替代协议消息中需要被替代的协议消息cell块,即图中argn=t2。若存在调用关系的函数有两个或者两个以上参数,argm=arg1,修改的f1函数参数可直接替代原始参数,而fn-1函数输出sgn-1只能作为fn函数参数中的某个构成部分,即最后函数的输出直接用来替代协议originmessage消息中需要被替代的协议消息的某个cell部分。

应当理解的是,本说明书未详细阐述的部分均属于现有技术。

应当理解的是,上述针对较佳实施例的描述较为详细,并不能因此而认为是对本发明专利保护范围的限制,本领域的普通技术人员在本发明的启示下,在不脱离本发明权利要求所保护的范围情况下,还可以做出替换或变形,均落入本发明的保护范围之内,本发明的请求保护范围应以所附权利要求为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1