CN114944997B - 一种协议检测方法、协议检测装置和计算机可读存储介质 - Google Patents

一种协议检测方法、协议检测装置和计算机可读存储介质 Download PDF

Info

Publication number
CN114944997B
CN114944997B CN202210302241.6A CN202210302241A CN114944997B CN 114944997 B CN114944997 B CN 114944997B CN 202210302241 A CN202210302241 A CN 202210302241A CN 114944997 B CN114944997 B CN 114944997B
Authority
CN
China
Prior art keywords
protocol
detection
data
source code
code
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
Application number
CN202210302241.6A
Other languages
English (en)
Other versions
CN114944997A (zh
Inventor
安童乐
张军昌
魏东
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhejiang Dahua Technology Co Ltd
Original Assignee
Zhejiang Dahua Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Zhejiang Dahua Technology Co Ltd filed Critical Zhejiang Dahua Technology Co Ltd
Priority to CN202210302241.6A priority Critical patent/CN114944997B/zh
Publication of CN114944997A publication Critical patent/CN114944997A/zh
Application granted granted Critical
Publication of CN114944997B publication Critical patent/CN114944997B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/18Protocol analysers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites

Abstract

本申请公开了一种协议检测方法、协议检测装置和计算机可读存储介质,该方法包括:获取待检测协议对应的协议定义文档,协议定义文档包括多个协议命令的定义信息;对定义信息进行语义分析处理,得到第一协议检测集,第一协议检测集包括第一关键字段以及与第一关键字段对应的第一取值约束;对待检测协议对应的源代码进行分析处理,得到第二关键字段以及与第二关键字段对应的第二取值约束;基于第二关键字段与第二取值约束,对第一协议检测集进行修正,得到第二协议检测集;采用第二协议检测集对源代码进行检测,得到检测结果。通过上述方式,本申请能够解决检测过程中协议命令覆盖率不足的问题,方便找到有问题的代码。

Description

一种协议检测方法、协议检测装置和计算机可读存储介质
技术领域
本申请涉及网络安全技术领域,具体涉及一种协议检测方法、协议检测装置和计算机可读存储介质。
背景技术
随着物联网设备的逐渐发展,相关设备及其通信协议越来越多;为了保密性或者历史原因,有些开发者使用基于二进制的通信协议,由于此类协议的设计、开发时间较早或受限于技术,未考虑安全因素,导致该协议在安全方面存在隐患。目前对于二进制协议的漏洞挖掘大多基于协议进行模糊检测,该方式一般是专业研究者对产品进行检测,对漏洞代码的定位需要花费较多时间,无法保证对协议中的所有命令均进行检测。
发明内容
本申请提供一种协议检测方法、协议检测装置和计算机可读存储介质,能够解决检测过程中协议命令覆盖率不足的问题,定位有问题的代码。
为解决上述技术问题,本申请采用的技术方案是:提供一种协议检测方法,该方法包括:获取待检测协议对应的协议定义文档,协议定义文档包括多个协议命令的定义信息;对定义信息进行语义分析处理,得到第一协议检测集,第一协议检测集包括第一关键字段以及与第一关键字段对应的第一取值约束;对待检测协议对应的源代码进行分析处理,得到第二关键字段以及与第二关键字段对应的第二取值约束;基于第二关键字段与第二取值约束,对第一协议检测集进行修正,得到第二协议检测集;采用第二协议检测集对源代码进行检测,得到检测结果。
为解决上述技术问题,本申请采用的另一技术方案是:提供一种协议检测装置,该协议检测装置包括互相连接的存储器和处理器,其中,存储器用于存储计算机程序,计算机程序在被处理器执行时,用于实现上述技术方案中的协议检测方法。
为解决上述技术问题,本申请采用的另一技术方案是:提供一种计算机可读存储介质,该计算机可读存储介质用于存储计算机程序,计算机程序在被处理器执行时,用于实现上述技术方案中的协议检测方法。
通过上述方案,本申请的有益效果是:先提取出协议定义文档中不同协议命令中的第一关键字段,得到第一协议检测集;然后对协议定义文档对应的源代码进行分析,得到第二关键字段以及与该第二关键字段对应的第二取值约束;然后,利用第二关键字段与第二取值约束,对第一协议检测集进行修正,得到第二协议检测集,以便采用第二协议检测集对源代码进行检测,从而实现对源代码的检测;本申请分别基于协议定义文档与不同协议命令的实现代码,生成两个协议检测集,且对这两个协议检测集进行相互补充,生成用于检测源代码的协议检测集,该协议检测集更加完善,因此采用该协议检测集对源代码进行检测得到的检测结果更加完备,能够对检测协议文档中的每条协议命令进行检测,解决检测过程中协议命令覆盖率不足的问题,能够快速定位有问题的代码。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。其中:
图1是本申请提供的协议检测方法一实施例的流程示意图;
图2是本申请提供的协议检测方法另一实施例的流程示意图;
图3是本申请提供的生成插桩后的源代码的流程示意图;
图4是本申请提供的协议检测装置一实施例的结构示意图;
图5是本申请提供的协议检测装置另一实施例的结构示意图;
图6是本申请提供的协议检测系统一实施例的结构示意图;
图7是本申请提供的计算机可读存储介质一实施例的结构示意图。
具体实施方式
下面结合附图和实施例,对本申请作进一步的详细描述。特别指出的是,以下实施例仅用于说明本申请,但不对本申请的范围进行限定。同样的,以下实施例仅为本申请的部分实施例而非全部实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
在本申请中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
需要说明的是,本申请中的术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”、“第三”的特征可以明示或者隐含地包括至少一个该特征。本申请的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
先对本申请所涉及的技术用语进行说明。
插桩:在保证原有程序逻辑完整性的基础上,在程序中插入探针,通过探针采集代码中的信息,该信息包括方法本身、方法参数值或返回值等。
污点传播:信息流分析技术的一种实践方法,该技术根据某种规则对系统中敏感数据进行标记,继而跟踪标记数据在程序中的传播路径。
污点跟踪:跟踪敏感数据在程序中的传播路径。
Hook:钩子函数,在系统没有调用该函数之前,钩子函数就先捕获该消息,钩子函数先得到控制权,钩子函数既可以加工处理(改变)函数的执行行为,还可以强制结束消息的传递,即通过Hook把系统的程序拉出来变成用户要执行的代码片段。
请参阅图1,图1是本申请提供的协议检测方法一实施例的流程示意图,该方法包括:
S11:获取待检测协议对应的协议定义文档。
可从网上下载待检测协议的协议定义文档,该协议定义文档包括多个协议命令的定义信息,待检测协议可以为二进制协议。
S12:对定义信息进行语义分析处理,得到第一协议检测集。
在获取到协议定义文档后,可采用相关技术中的语义分析方法对协议定义文档中与协议命令对应的定义信息进行分析,以生成第一协议检测集,该第一协议检测集包括第一关键字段以及与第一关键字段对应的第一取值约束,第一关键字段为协议命令中具有取值约束的字段(即约束字段)。
在一具体的实施例中,为了根据协议定义文档生成第一协议检测集,可采用以下方案:
1)根据协议定义文档中不同协议命令的基本定义生成基础用例集。
为了便于描述,下面以协议命令12为例;如果待检测协议中定义协议命令12表示登录,协议命令12的消息头的长度为32字节,每个字节代表的含义不同,协议命令12的基础用例集如下所示:
A12=(a1,a2,…,a32) (1)
其中,在公式(1)中,ai∈[0,255],且ai为自然数,i∈[1,32]。
2)根据基础用例集A12和协议命令12的每个字节的定义信息,可生成第一协议检测集。
例如,在协议命令12中,如果有如下定义:
(a)第2字节的取值范围为0-21,代表22种不同的登录方式,其他值未定义。
(b)第5字节的取值范围为8-32,代表密码长度,其他值未定义,密码的具体内容(即扩展数据)放在扩展字段中。
(c)其余字节未定义。
经过协议命令12的文字定义约束,得到如下所示的第一协议检测集:
X12=(0,x2,0,0,x5,…,x40,…,xn) (2)
其中,第一取值约束为:x2∈[0,21],x5∈[8,32],x33-xn的取值范围为[0,255],n∈[40,64];即第2个字节和第5个字节有取值约束,其余字段的取值均为0;扩展字段中存放密码,扩展字段的长度为8-32;容易看出,X12即为与协议命令12相关的正常数据包的集合,第一关键字段为2和5。
S13:对待检测协议对应的源代码进行分析处理,得到第二关键字段以及与第二关键字段对应的第二取值约束。
待检测协议与源代码对应,可采用代码分析方法对源代码分析进行处理,生成第二关键字段,该第二关键字段为源代码中与协议命令对应的存在取值约束的字段,而且该第二关键字段对应一个第二取值约束,第二关键字段可以与第一关键字段相同,源代码可以为采用C/C++编写的代码。
S14:基于第二关键字段与第二取值约束,对第一协议检测集进行修正,得到第二协议检测集。
根据第一协议检测集、第二关键字段以及第二取值约束,生成最终的检测集(即第二协议检测集);具体地,第二协议检测集包括第三关键字段与第三取值约束,计算第一关键字段与第二关键字段的并集,得到第三关键字段;计算第一取值约束与第二取值约束的并集,得到第三取值约束。
在一具体的实施例中,以上述的协议命令12为例进行说明,通过对源代码分析得到的第一关键字段和第一取值约束,对第一协议检测集X12进行完善。
例如,分析源代码后发现,第2字节的取值实际为0-30,第5字节的取值为8-28,第6字节(即第二关键字段)也在使用,代表加密方式,第6字节的取值约束(即第二取值约束)为0-5,则完善后的协议命令12的检测集(即第二协议检测集)如下所示:
W12=(0,x2,0,0,x5,…,x40,…,xn) (3)
其中,第二约束条件为:x2∈[0,30],x5∈[8,32],x6∈[0,5],x3-xn的取值范围为[0,255],n∈[40,64]。即第二协议检测集中的约束条件(即第三约束条件)取协议定义文档对应的第一取值约束和源代码对应的第二取值约束的并集。例如,如果第二取值约束比第一取值约束大,取第三取值约束为源代码对应的第二取值约束;如果第二取值约束比第一取值约束小,即源代码中协议命令对应的取值范围比协议定义文档中相应协议命令对应的取值范围小,取第三取值约束为协议定义文档对应的第一取值约束。
S15:采用第二协议检测集对源代码进行检测,得到检测结果。
本实施例提供了一种基于源代码的二进制协议的安全检测方法,可根据协议定义文档生成第一协议检测集,提取出协议定义文档中不同协议命令中的第一关键字段;而且,对协议定义文档对应的源代码进行分析,得到第二关键字段以及与该第二关键字段对应的第二取值约束;然后,将第二关键字段与第二取值约束对第一协议检测集进行修正,得到完善的协议检测集,以采用完善的协议检测集对源代码进行检测;本实施例基于协议定义文档以及协议定义文档中不同协议命令的实现代码,从两方面获取协议检测集,且通过将两个协议检测集结合,生成用于检测源代码的协议检测集,该协议检测集更加完善,使得对源代码的检测更加准确,且能够对检测协议文档中的每条协议命令进行检测,解决检测过程中协议命令覆盖率不足的问题,能够尽早确定协议的安全风险,快速定位有问题的代码。
请参阅图2,图2是本申请提供的协议检测方法另一实施例的流程示意图,该方法包括:
S21:获取待检测协议对应的协议定义文档。
S22:对定义信息进行语义分析处理,得到第一协议检测集。
根据协议定义文档,提取出不同协议命令的关键字段;S21~S22与上述实施例中S11~S12相同,在此不再赘述。
S23:采用污点跟踪对第一关键字段对应的代码进行分析,得到第二关键字段以及与第二关键字段对应的第二取值约束。
源代码包括与第一关键字段对应的代码,使用污点跟踪方式,对源代码中的第一关键字段的处理代码进行分析,分析方式包括赋值或传参;在分析过程中,对不同协议命令的关键字段的数量和取值约束进行补充。
进一步地,污点传播方式如下所示:
(a)判断对代码进行的处理操作是否为赋值操作且处理操作的右值数据是否为被污染数据,被污染数据可以为第一关键字段;若该处理操作为赋值操作且右值数据为被污染数据,则对赋值操作的左值数据进行污点传播,对赋值操作对应的代码行进行标记;若该处理操作不为赋值操作或者右值数据不为被污染数据(即右值数据为未被污染数据),则停止传播。
(b)在处理操作为赋值操作、右值数据为未污染数据以及左值数据为未污染数据时,停止传播。
(c)在函数的形参为被污染数据时,对形参进行污点传播,对形参对应的代码行进行标记;在形参未被污染时,停止传播。
S24:基于第二关键字段与第二取值约束,对第一协议检测集进行修正,得到第二协议检测集。
S24与上述实施例中S14相同,在此不再赘述。
S25:对待检测协议对应的源代码进行插桩处理,得到插桩后的源代码。
根据协议定义文档对源代码进行插桩处理,记录每条协议命令的扩展数据的取值约束,以便根据源代码完善协议检测集。具体地,可以采用图3所示的方案进行处理:
S31:对源代码进行分块处理,得到多个代码块。
对源代码进行块划分,划分原则为:存在跳转指令,则进入新代码块;具体地,可以依次从源代码的多行代码中选取一行代码作为当前代码;判断当前代码中是否出现跳转指令;若当前代码中出现跳转指令,则当前代码确定为当前代码块,将跳转指令对应的代码划分至新的代码块,并返回依次从多行代码中选取一行代码作为当前代码的步骤,直至遍历完源代码。
S32:从多个代码块中筛选出污染块。
污染块为包括未污染数据的代码块,可标识源代码中的污染块,原则为:若代码块中有一行代码被进行污点标记,即该行代码中存在被污染数据,则将该代码块标记为污染块。
S33:在每个污染块的第一行之前与污染块的最后一行之后分别插入探针,得到插桩后的源代码。
分别在每个污染块的开始和最后插入探针,可使用Hook方式将退出的代码修改为重启程序的代码,实现Hook进程调用,记录调用链。
S26:采用第二协议检测集对插桩后的源代码进行检测,得到检测结果。
为了获取检测结果,可采用以下方案:
1)对第二协议检测集进行拆分,得到协议头集与第一扩展数据集。
2)基于第一扩展数据集,生成多个子扩展数据集。
可以将数据长度小于第一预设长度的第二检测数据放入第一子扩展数据集,该第二检测数据为扩展数据;将数据长度大于第一预设长度且小于第二预设长度的第二检测数据放入第二子扩展数据集,第一预设长度小于第二预设长度;将数据长度大于第二预设长度的第二检测数据放入第三子扩展数据集。
3)计算所有子扩展数据集的并集,得到第二扩展数据集。
4)基于协议头集与第二扩展数据集,生成检测数据集。
检测数据集包括多个按照优先级排列的检测用例集,第二扩展数据集包括第一子扩展数据集、第二子扩展数据集以及第三子扩展数据集;可以判断协议命令是否具有扩展数据。若该协议命令不具有扩展数据,则生成第一检测用例集与第二检测用例集,第一检测用例集包括协议头集与第二扩展数据集,第二检测用例集为协议头集。若该协议命令具有扩展数据,则生成第三检测用例集、第四检测用例集以及第五检测用例集,第三检测用例集包括协议头集与第一子扩展数据集,第四检测用例集包括协议头集与第二子扩展数据集,第五检测用例集包括协议头集与第三子扩展数据集。
5)依次采用检测数据集中的检测用例集,对插桩后的源代码进行检测,得到检测结果。
依照优先级顺序使用检测用例集对插桩后的源代码进行检测;具体地,依序从每个检测用例集中的协议头集中选择一个第一检测数据作为第一当前数据;从第一扩展数据集中选择一个第二检测数据作为第二当前数据;将第一当前数据与第二当前数据拼合,得到当前检测用例;采用当前检测用例对插桩后的源代码进行检测;判断第一当前数据是否为协议头集中的最后一个第一检测数据;若第一当前数据为协议头集中的最后一个第一检测数据,则表明已经遍历完协议头集中的所有第一检测数据;若第一当前数据不为协议头集中的最后一个第一检测数据,则表明并未遍历完协议头集中的所有第一检测数据,此时返回依序从协议头集中选择一个第一检测数据作为第一当前数据的步骤,直至对协议头集遍历完毕。
在获取到检测用例集后,可以根据插桩后的源代码中的探针,对检测过程进行记录,生成检测结果,以便后续对检测结果进行分析;例如,如果某一条检测用例导致程序重启或进程调用,则将相应的检测记录标记为可疑记录,并对其进一步分析。本实施例使用了静态源代码插桩和动态调试记录的方式,相较于纯静态源代码分析,不需要对源代码进行语义分析,降低了分析难度;相较于逆向分析中可能遇到的代码混淆,可以精准把握代码逻辑;相较于动态检测,可以清晰记录代码执行过程,便于定位漏洞点。
在一具体的实施例中,由于协议头和扩展数据的类型不同,因此生成实际检测数据集时需要进行区分,因此对W12进行拆分,如下所示:
WH12=(0,x2,0,0,x5,…,0) (4)
其中,在公式(4)中,WH12的长度为32,x2∈[0,30],x5∈[8,32],x6∈[0,5]。
WE12=(x33,…,xn) (5)
其中,在公式(5)中,WE12的长度为8-32,xj∈[0,255],n∈[40,64],j∈[33,n]。
在WE12的定义中,由于数据长度在8-32之间,可以将其分为三种类型,第一种类型中数据的位数为0-7,第二种类型中数据的位数为8-32,第三种类型中数据的位数为33-+∞,因此可以得到其余两个集合:
UE12=(x33,…,xn) (6)
其中,在公式(6)中,xj∈[0,255],n∈[33,40],j∈[33,n]。
VE12=(x33,…,xn) (7)
其中,在公式(7)中,xj∈[0,255],n∈[65,+∞),j∈[33,n]。
因此,与协议命令12相关的检测集有4个,其包括与协议头相关的检测集WH12(即协议头集)以及与扩展数据相关的检测集UE12(即第一子扩展数据集)、WE12(即第二子扩展数据集)和VE12(即第三子扩展数据集)。
为描述没有扩展数据的检测集,可使用集合E(即第二扩展数据集),其定义如下所示:
E=UE12∪WE12∪VE12=(x33,…,xn) (8)
其中,在公式(8)中,xj∈[0,255],n∈[33,+∞),j∈[33,n]。
使用上述操作生成的检测用例集对插桩后的源代码进行检测,检测用例集的使用原则如下所示:
A.如果协议命令没有扩展数据,则使用检测用例集的顺序为第一检测用例集(包括WH12与E)与第二检测用例集(即WH12)。
B.如果该协议命令有扩展数据,则使用的顺序为第一检测用例集(包括WH12与UE12)、第二检测用例集(包括WH12与WE12)以及第三检测用例集(包括WH12与VE12)。
使用具体的检测用例集时,需要遍历WH12集合,但在集合UE12、WE12、VE12或者E中,任意取1个元素即可;对于WH12集合中未定义的字段来说,可以随机取范围0-255内的值,不强制取0。
本实施采用语义分析方法对协议定义文档进行分析,提取出协议定义文档中的关键字段,由于使用数学语言进行描述,方便后续分析,且在源代码中结合污点跟踪的方式追踪关键字段对应的代码,对源代码进行插桩和污点跟踪,最终通过在线运行检测,实现对源代码的安全风险分析,能够实现数据流精确跟踪;另外,在源代码的插桩过程中,根据污点代码对代码块进行标记,在保证了污点跟踪的同时,减少了代码膨胀率;此外,对检测用例集进行了划分,并设定了使用优先级,相较于全量检测用例集,可以在保证覆盖率的同时,提高漏洞发现效率。
请参阅图4,图4是本申请提供的协议检测装置一实施例的结构示意图,协议检测装置40包括:协议分析模块41、用例生成模块42以及检测模块43。
协议分析模块41用于获取待检测协议对应的协议定义文档,并对定义信息进行语义分析处理,得到第一协议检测集,协议定义文档包括多个协议命令的定义信息第一协议检测集包括第一关键字段以及与第一关键字段对应的第一取值约束。
用例生成模块42与协议分析模块41连接,其用于对待检测协议对应的源代码进行分析处理,得到第二关键字段以及与第二关键字段对应的第二取值约束;基于第二关键字段与第二取值约束,对第一协议检测集进行修正,得到第二协议检测集。
检测模块43与用例生成模块42连接,其用于采用第二协议检测集对源代码进行检测,得到检测结果。
本实施例所提供的方案能够解决在检测过程中所有的协议命令覆盖率不足的问题;且采用静态分析和动态调试的方法进行检测,尽可能提取文件信息,检测准确性更好;另外,异常检测使用源代码插桩的方式进行,在时间和空间上精确定位出现问题的检测用例集。
请参阅图5,图5是本申请提供的协议检测装置另一实施例的结构示意图,协议检测装置50包括互相连接的存储器51和处理器52,存储器51用于存储计算机程序,计算机程序在被处理器52执行时,用于实现上述实施例中的协议检测方法。
请参阅图6,图6是本申请提供的协议检测系统一实施例的结构示意图,协议检测系统60包括分析设备61与检测设备62,分析设备61包括:协议分析模块611、插桩模块612、用例生成模块613、用例发送模块614、第一网络交互模块615以及记录分析模块616;检测设备62包括执行模块621、检测记录模块622以及第二网络交互模块623。
协议分析模块611的主要作用是将协议定义文档通过语义分析转化为数学语言描述,并提取出协议定义文档中不同协议命令的关键字段。
插桩模块612与协议分析模块611连接,其用于根据协议分析模块611提供的不同协议命令的关键字段,结合污点跟踪方式,对源代码进行插桩;根据源代码提取关键字段和扩展数据的取值约束。
用例生成模块613与协议分析模块611以及插桩模块612连接,其用于根据协议分析模块611提供的协议描述以及插桩模块612提供的补充的扩展字段和取值约束,生成检测用例集。
用例发送模块614与用例生成模块613以及第一网络交互模块615连接,其用于根据检测用例集的优先级,通过第一网络交互模块615发送不同的检测用例集到检测设备62中。
第二网络交互模块623与第一网络交互模块615连接,用于接收检测用例集,并将检测用例集发送至执行模块621。
执行模块621与插桩模块612以及第二网络交互模块623连接,其用于使用分析设备61发过来的检测用例集,编译执行插桩后的源代码,实现对插桩后的源代码进行检测。
检测记录模块622与执行模块连接,其用于记录每一条检测用例集以及在检测过程中的探针输出,并将结果发送给分析设备61。
记录分析模块616与第一网络交互模块615连接,其用于存储每一条检测用例集的检测记录,并通过预先输入的规则进行分析,输出分析报告。
本实施例提供了一种基于源代码的协议安全的检测系统,通过对协议定义文档进行语义分析,获取协议检测集和不同协议命令的关键字段,且通过代码分析,对取值约束进行了补充,实现对协议检测集的补充,避免因协议定义和代码实现不一致导致的协议检测集覆盖不够全面,实现检测范围的精准覆盖;而且,通过对关键字段的处理代码进行污点跟踪,避免分析无用代码,提高了污点跟踪效率;另外,对检测用例集进行划分,通过对协议中提取的关键字段和相应的取值约束进行处理,实现对检测用例集的分类提取,得到容易发现漏洞的检测用例集,并在检测过程中分开使用,依次使用不同优先级的检测用例集检测插桩后的源代码,能够实现检测速率的提升,有助于提升漏洞发现效率,避免因检测用例集太大导致的检测效率低下。
请参阅图7,图7是本申请提供的计算机可读存储介质一实施例的结构示意图,计算机可读存储介质70用于存储计算机程序71,计算机程序71在被处理器执行时,用于实现上述实施例中的协议检测方法。
计算机可读存储介质70可以是服务端、U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
在本申请所提供的几个实施方式中,应该理解到,所揭露的方法以及设备,可以通过其它的方式实现。例如,以上所描述的设备实施方式仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施方式方案的目的。
另外,在本申请各个实施方式中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
以上所述仅为本申请的实施例,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。

Claims (11)

1.一种协议检测方法,其特征在于,包括:
获取待检测协议对应的协议定义文档,所述协议定义文档包括多个协议命令的定义信息;
对所述定义信息进行语义分析处理,得到第一协议检测集,所述第一协议检测集包括第一关键字段以及与所述第一关键字段对应的第一取值约束;
对所述待检测协议对应的源代码进行分析处理,得到第二关键字段以及与所述第二关键字段对应的第二取值约束;
基于所述第二关键字段与所述第二取值约束,对所述第一协议检测集进行修正,得到第二协议检测集;
采用所述第二协议检测集对所述源代码进行检测,得到检测结果,
其中,所述第二协议检测集包括第三关键字段与第三取值约束,所述基于所述第二关键字段与所述第二取值约束,对所述第一协议检测集进行修正,得到第二协议检测集的步骤,包括:
计算所述第一关键字段与所述第二关键字段的并集,得到所述第三关键字段;
计算所述第一取值约束与所述第二取值约束的并集,得到所述第三取值约束。
2.根据权利要求1所述的协议检测方法,其特征在于,所述采用所述第二协议检测集对所述源代码进行检测,得到检测结果的步骤,包括:
对所述源代码进行插桩处理,得到插桩后的源代码;
采用所述第二协议检测集对所述插桩后的源代码进行检测,得到所述检测结果。
3.根据权利要求2所述的协议检测方法,其特征在于,所述采用所述第二协议检测集对所述插桩后的源代码进行检测,得到所述检测结果的步骤,包括:
对所述第二协议检测集进行拆分,得到协议头集与第一扩展数据集;
基于所述第一扩展数据集,生成多个子扩展数据集;
计算所有所述子扩展数据集的并集,得到第二扩展数据集;
基于所述协议头集与所述第二扩展数据集,生成检测数据集,所述检测数据集包括多个按照优先级排列的检测用例集;
依次采用所述检测数据集中的检测用例集,对所述插桩后的源代码进行检测,得到所述检测结果。
4.根据权利要求3所述的协议检测方法,其特征在于,所述第二扩展数据集包括第一子扩展数据集、第二子扩展数据集以及第三子扩展数据集,所述基于所述协议头集与所述第二扩展数据集,生成检测数据集的步骤,包括:
判断所述协议命令是否具有扩展数据;
若否,则生成第一检测用例集与第二检测用例集,所述第一检测用例集包括所述协议头集与所述第二扩展数据集,所述第二检测用例集为所述协议头集;
若是,则生成第三检测用例集、第四检测用例集以及第五检测用例集,所述第三检测用例集包括所述协议头集与所述第一子扩展数据集,所述第四检测用例集包括所述协议头集与所述第二子扩展数据集,所述第五检测用例集包括所述协议头集与所述第三子扩展数据集。
5.根据权利要求4所述的协议检测方法,其特征在于,所述方法还包括:
依序从所述协议头集中选择一个第一检测数据作为第一当前数据;
从所述第一扩展数据集中选择一个第二检测数据作为第二当前数据;
将所述第一当前数据与所述第二当前数据拼合,得到当前检测用例;
采用所述当前检测用例对所述插桩后的源代码进行检测;
判断所述第一当前数据是否为所述协议头集中的最后一个第一检测数据;
若否,则返回所述依序从所述协议头集中选择一个第一检测数据作为第一当前数据的步骤,直至对所述协议头集遍历完毕。
6.根据权利要求4所述的协议检测方法,其特征在于,所述基于所述第一扩展数据集,生成多个子扩展数据集的步骤,包括:
将数据长度小于第一预设长度的第二检测数据放入所述第一子扩展数据集;
将数据长度大于所述第一预设长度且小于第二预设长度的第二检测数据放入所述第二子扩展数据集,所述第一预设长度小于所述第二预设长度;
将数据长度大于所述第二预设长度的第二检测数据放入所述第三子扩展数据集。
7.根据权利要求2所述的协议检测方法,其特征在于,所述源代码包括与所述第一关键字段对应的代码,所述对所述待检测协议对应的源代码进行分析处理的步骤,包括:
采用污点跟踪对所述第一关键字段对应的代码进行分析;
所述对所述源代码进行插桩处理,得到插桩后的源代码的步骤,包括:
对所述源代码进行分块处理,得到多个代码块;
从所述多个代码块中筛选出污染块,所述污染块为包括被污染数据的代码块;
在每个所述污染块的第一行之前与所述污染块的最后一行之后分别插入探针,得到所述插桩后的源代码。
8.根据权利要求7所述的协议检测方法,其特征在于,所述采用污点跟踪对所述第一关键字段对应的代码进行分析的步骤,包括:
判断对所述代码进行的处理操作是否为赋值操作且所述处理操作的右值数据是否为被污染数据;
若是,则对所述赋值操作对应的代码行进行标记;
若否,则停止传播。
9.根据权利要求7所述的协议检测方法,其特征在于,所述对所述源代码进行分块处理,得到多个代码块的步骤,包括:
依次从所述源代码的多行代码中选取一行代码作为当前代码;
判断所述当前代码中是否出现跳转指令;
若是,则所述当前代码确定为当前代码块,将所述跳转指令对应的代码划分至新的代码块,并返回所述依次从所述源代码的多行代码中选取一行代码作为当前代码的步骤,直至遍历完所述源代码。
10.一种协议检测装置,其特征在于,包括互相连接的存储器和处理器,其中,所述存储器用于存储计算机程序,所述计算机程序在被所述处理器执行时,用于实现权利要求1-9中任一项所述的协议检测方法。
11.一种计算机可读存储介质,用于存储计算机程序,其特征在于,所述计算机程序在被处理器执行时,用于实现权利要求1-9中任一项所述的协议检测方法。
CN202210302241.6A 2022-03-24 2022-03-24 一种协议检测方法、协议检测装置和计算机可读存储介质 Active CN114944997B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210302241.6A CN114944997B (zh) 2022-03-24 2022-03-24 一种协议检测方法、协议检测装置和计算机可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210302241.6A CN114944997B (zh) 2022-03-24 2022-03-24 一种协议检测方法、协议检测装置和计算机可读存储介质

Publications (2)

Publication Number Publication Date
CN114944997A CN114944997A (zh) 2022-08-26
CN114944997B true CN114944997B (zh) 2024-02-20

Family

ID=82905741

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210302241.6A Active CN114944997B (zh) 2022-03-24 2022-03-24 一种协议检测方法、协议检测装置和计算机可读存储介质

Country Status (1)

Country Link
CN (1) CN114944997B (zh)

Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7401326B1 (en) * 2001-10-24 2008-07-15 Finisar Corporation Compiling protocol analysis code using protocol database
CN109379329A (zh) * 2018-09-05 2019-02-22 中国人民解放军战略支援部队信息工程大学 基于lstm的网络安全协议模糊测试方法及系统
CN110474900A (zh) * 2019-08-13 2019-11-19 腾讯科技(深圳)有限公司 一种游戏协议测试方法及装置
US10545855B1 (en) * 2018-09-28 2020-01-28 Microsoft Technology Licensing, Llc Software testing assurance through inconsistent treatment detection
CN111046396A (zh) * 2020-03-13 2020-04-21 深圳开源互联网安全技术有限公司 web应用测试数据流跟踪方法及系统
CN111382067A (zh) * 2020-02-27 2020-07-07 中国科学院信息工程研究所 一种模糊测试中高质量种子生成方法及系统
CN112765023A (zh) * 2021-01-19 2021-05-07 上海幻电信息科技有限公司 测试用例生成方法、装置
CN112783602A (zh) * 2021-01-08 2021-05-11 韩浩 一种敏感数据发现与检测的方法及系统
CN113271237A (zh) * 2021-06-16 2021-08-17 山石网科通信技术股份有限公司 工控协议的解析方法、装置、存储介质及处理器
CN113326181A (zh) * 2020-02-29 2021-08-31 华为技术有限公司 有状态网络协议的模糊测试方法、装置及存储介质
CN113485915A (zh) * 2021-06-16 2021-10-08 中国工程物理研究院计算机应用研究所 一种基于协议建模和约束覆盖的接口测试数据自动生成方法和装置
CN113849817A (zh) * 2021-08-30 2021-12-28 苏州浪潮智能科技有限公司 一种JavaScript原型链污染漏洞的检测方法及装置

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2533117A (en) * 2014-12-10 2016-06-15 Ibm Software test automation
KR101689795B1 (ko) * 2015-10-28 2016-12-26 아주대학교산학협력단 통신 프로토콜 소프트웨어의 취약성 검출 방법 및 시스템

Patent Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7401326B1 (en) * 2001-10-24 2008-07-15 Finisar Corporation Compiling protocol analysis code using protocol database
CN109379329A (zh) * 2018-09-05 2019-02-22 中国人民解放军战略支援部队信息工程大学 基于lstm的网络安全协议模糊测试方法及系统
US10545855B1 (en) * 2018-09-28 2020-01-28 Microsoft Technology Licensing, Llc Software testing assurance through inconsistent treatment detection
CN110474900A (zh) * 2019-08-13 2019-11-19 腾讯科技(深圳)有限公司 一种游戏协议测试方法及装置
CN111382067A (zh) * 2020-02-27 2020-07-07 中国科学院信息工程研究所 一种模糊测试中高质量种子生成方法及系统
CN113326181A (zh) * 2020-02-29 2021-08-31 华为技术有限公司 有状态网络协议的模糊测试方法、装置及存储介质
CN111046396A (zh) * 2020-03-13 2020-04-21 深圳开源互联网安全技术有限公司 web应用测试数据流跟踪方法及系统
CN112783602A (zh) * 2021-01-08 2021-05-11 韩浩 一种敏感数据发现与检测的方法及系统
CN112765023A (zh) * 2021-01-19 2021-05-07 上海幻电信息科技有限公司 测试用例生成方法、装置
CN113271237A (zh) * 2021-06-16 2021-08-17 山石网科通信技术股份有限公司 工控协议的解析方法、装置、存储介质及处理器
CN113485915A (zh) * 2021-06-16 2021-10-08 中国工程物理研究院计算机应用研究所 一种基于协议建模和约束覆盖的接口测试数据自动生成方法和装置
CN113849817A (zh) * 2021-08-30 2021-12-28 苏州浪潮智能科技有限公司 一种JavaScript原型链污染漏洞的检测方法及装置

Non-Patent Citations (5)

* Cited by examiner, † Cited by third party
Title
Android应用数字证书校验漏洞的自动化检测方法研究;王英杰;中国优秀硕士学位论文全文数据库信息科技辑;全文 *
一种基于fuzzing技术的漏洞发掘新思路;邵林;张小松;苏恩标;;计算机应用研究(03);全文 *
一种基于协议字段分类的工业控制系统Fuzzing测试方法;高志远;刘金永;王勇;刘蔚;;自动化博览(10);全文 *
基于逆向分析的工控协议模糊测试方法;王海翔;朱朝阳;应欢;缪思薇;;电力信息与通信技术(04);全文 *
模糊测试技术研究综述;张雄;李舟军;;计算机科学(05);全文 *

Also Published As

Publication number Publication date
CN114944997A (zh) 2022-08-26

Similar Documents

Publication Publication Date Title
US8661536B2 (en) Side channel attack analysis
CN110196801B (zh) 一种基于代码覆盖率的测试方法及装置
CN111475324B (zh) 日志信息的分析方法、装置、计算机设备和存储介质
CN104021072A (zh) 用于评估失效的软件程序的机器和方法
CN112579437B (zh) 一种程序运行过程符合性验证方法
Zhao et al. The game of twenty questions: Do you know where to log?
CN106874758A (zh) 一种识别文档代码的方法和装置
CN106844219B (zh) 应用检测方法及应用检测装置
JP2016099857A (ja) 不正プログラム対策システムおよび不正プログラム対策方法
CN107273298A (zh) 一种加壳工具的测试方法、装置及系统
CN114944997B (zh) 一种协议检测方法、协议检测装置和计算机可读存储介质
CN111124937B (zh) 基于插桩函数辅助提高生成测试用例效率的方法及系统
CN112115657A (zh) 一种防单一时间攻击的芯片安全仿真分析方法和装置
CN105468530B (zh) 一种基于有限状态机的程序错误检测方法及系统
CN109241706B (zh) 基于静态胎记的软件抄袭检测方法
Sui et al. An effective fuzz input generation method for protocol testing
CN116522345A (zh) 漏洞挖掘方法、装置、设备及可读存储介质
KR20190071571A (ko) 표준 프로세스를 기반으로 한 사용자 프로세스 분석 장치 및 방법
CN111858307B (zh) 模糊测试方法和设备
Yan et al. SPIDER: Speeding up Side-Channel Vulnerability Detection via Test Suite Reduction
JP7008879B2 (ja) 情報処理装置、情報処理方法及び情報処理プログラム
CN113076548A (zh) 机器人自动化流程账户信息处理方法及装置
CN113420298A (zh) 一种基于PHP扩展的PHP Web应用程序漏洞检测方法及其存储介质
CN113746819B (zh) 一种二进制软件协议探测载荷的挖掘方法及装置
CN112307468B (zh) 一种软件检测方法、软件检测装置及介质

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