CN113742724B - 一种网络协议软件的安全机制缺陷检测方法 - Google Patents
一种网络协议软件的安全机制缺陷检测方法 Download PDFInfo
- Publication number
- CN113742724B CN113742724B CN202110857775.0A CN202110857775A CN113742724B CN 113742724 B CN113742724 B CN 113742724B CN 202110857775 A CN202110857775 A CN 202110857775A CN 113742724 B CN113742724 B CN 113742724B
- Authority
- CN
- China
- Prior art keywords
- program point
- point
- program
- call
- path constraint
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/566—Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Virology (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Computing Systems (AREA)
- Quality & Reliability (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种网络协议软件的安全机制缺陷检测方法及装置,包括:获取协议软件的源代码、特定API及协议软件中的条件检查程序点Ct;根据源代码转换的中间表示,构建待分析软件的调用图、系统依赖图及过程间支配树;基于特定API与系统依赖图,在调用图中识别出程序点Vi;基于系统依赖图分析程序点Vi所在函数中控制依赖于程序点Vi的定值语句,获取程序点Oj;结合过程间支配树与路径约束蕴含关系求解,检查程序点Oj、程序点Vi及条件检查程序点Ct之间的路径关系,得到安全机制缺陷检测结果。本发明有效弥补现有技术在检测触发效果具有隐蔽性、代码模式在不同软件实现间不具备通用性的逻辑缺陷检测方面的不足,控制了检测开销,具有一定的通用性。
Description
技术领域
本发明涉及程序分析领域,尤其涉及一种网络协议软件的安全机制缺陷检测方法。
背景技术
网络协议是指在通信过程中,为了实现数据交换而建立的一系列通信各方必须遵守的规则、标准以及约定。对于标准网络协议,通常都提供了详细的以自然语言描述的协议规范,为协议软件实现的开发人员提供一种基础性指导。网络协议是计算机网络的重要组成部分,网络中的软件、设备都需要通过网络协议才能进行通信。网络协议中的安全认证机制对协议报文的真实性和完整性进行验证,能够对伪造来源的协议报文和在传输过程中遭到篡改的协议报文予以鉴别,保障计算机网络的安全性。如果网络协议的安全认证机制实现中存在缺陷(下文简称安全机制缺陷),则可能导致恶意报文在某种特定条件下能够绕过真实性、完整性验证,甚至会给整个计算机网络带来严重的安全威胁,从而引发灾难性后果。当前针对网络协议的缺陷检测方案虽然可以有效检测网络协议的软件实现中的内存破坏型漏洞,但却难以检测安全机制缺陷这种触发行为具有隐蔽性的逻辑缺陷。
程序分析是指对计算机程序进行自动化的处理,以确认或发现其特性,比如性能、安全性等。程序分析应用的场景包括编译优化、缺陷检测、故障定位等,可以用来发现缓冲区溢出、释放后重用、空指针解引用等影响程序安全性的缺陷。因此,程序分析也是当前主流的漏洞挖掘手段,特别是针对内存破坏类漏洞和条件竞争漏洞等传统漏洞的工具层出不穷。例如中国专利申请CN112699376A公开了一种源代码逻辑漏洞检测方法、装置、计算机设备及存储介质,其根据路径概率分布图和预设文件对路径概率分布图中的每条路径进行约束求解,以判断是否存在逻辑漏洞,但该方法依赖人工输入待检测源代码的业务逻辑,并对其生成的路径概率分布图中的每条路径都进行约束求解,花费大量时间开销。
但这些工具对于逻辑缺陷检测和确认能力不足,而此类缺陷在协议软件中频繁发生,影响系统和用户的安全性。因此需要一种检测协议软件安全机制缺陷的技术,来补充现有工具的不足。
发明内容
针对协议软件中安全机制缺陷难以通过现有方法进行检测和定位的问题,本发明提出了一种网络协议软件的安全机制缺陷检测方法。C-V-O模式是发明人通过分析协议设计规范总结出的协议软件在实现安全认证机制时都应满足的模式。其中,C表示条件检查(Condition Check),通常是对输入报文字段属性的条件检查;V表示对协议报文的真实性、完整性的验证(Cryptographic Validation);O表示关键操作(Critical Operation),依赖于协议报文通过真实性、完整性验证。C-V-O模式中程序点C、V、O满足如下关系:在执行至报文的真实性、完整性验证的程序点V时必定经过所有条件检查C,在执行至关键操作O时必定经过所有的条件检查C并且必定经过至少一处对报文真实性、完整性进行验证的程序点V。如果网络协议的软件实现与C-V-O模式存在不一致,则说明协议软件实现中可能存在安全机制缺陷。
一种网络协议软件的安全机制缺陷检测方法,其步骤包括:
1)获取协议软件的源代码、特定API及协议软件中的条件检查程序点Ct,将所述源代码转换为中间表示,其中t为条件检查程序点C的编号;
2)根据中间表示,分别构建待分析软件的调用图、系统依赖图及过程间支配树;
3)基于特定API与系统依赖图,在调用图的函数调用点中识别出程序点Vi,其中i为程序点V的编号;
4)基于系统依赖图分析程序点Vi所在函数中控制依赖于程序点Vi的定值语句,获取程序点Oj,其中j为程序点O的编号;
5)结合过程间支配树与路径约束蕴含关系求解,检查执行至每一程序点Oj时是否经过任一程序点Vi和所有条件检查程序点Ct,及执行至每一程序点Vi是否经过所有条件检查程序点Ct,从而得到安全机制缺陷检测结果。
进一步地,所述特定API包括:开源密码学算法库中用于验证数字签名或消息认证码的API。
进一步地,构造调用图的方法包括:将每一函数作为节点,且将函数调用关系作为边。
进一步地,构造系统依赖图的方法包括:将每一语句作为节点,且将数据依赖关系或控制依赖关系作为边。
进一步地,构造过程间支配树的方法包括:将每一语句作为节点,且将支配关系作为边。
进一步地,通过以下步骤识别出程序点Vi:
1)遍历调用图中的所有函数调用点;
2)当任一函数调用点位于特定API的调用路径上,且该函数调用点的参数与报文中表示消息认证码或数字签名的字段变量存在数据依赖关系,则将该函数调用点作为验证协议报文真实性及完整性的程序点Vi。
进一步地,通过以下步骤获取程序点Oj:
1)遍历程序点Vi所在函数中控制依赖于程序点Vi的定值语句;
2)如果该定值语句的源操作数是表示验证成功或失败的错误码常量,且目的操作数是函数返回值或有外部影响的变量,则将该目的操作数加入到集合Vars中;
3)遍历集合Vars中每一变量的所有使用点;
4)当任一使用点是一个条件判断语句或断言语句时,则该条件判断语句或断言语句后执行的程序点为程序点Oj。
进一步地,通过以下步骤得到安全机制缺陷检测结果:
1)基于过程间支配树IDT判断所有条件检查程序点Ct是否都支配程序点Vi或程序点Oj;
2)如果所有条件检查程序点Ct都支配程序点Vi或程序点Oj,则程序点Vi或程序点Oj无逻辑缺陷;若所有条件检查程序点Ct不都支配程序点Vi或程序点Oj,则根据不支配程序点Vi或程序点Oj的条件检查程序点Ct,生成程序点对<Ct,Vi>或程序点对<Ct,Oj>,并转入步骤3);
3)针对每一程序点对<Ct,Vi>,寻找同时支配条件检查程序点Ct及程序点Vi,且与支配条件检查程序点Ct及程序点Vi距离最近的程序点Zp;针对每一程序点对<Ct,Oj>,寻找同时支配条件检查程序点Ct及程序点Oj,且与支配条件检查程序点Ct及程序点Oj距离最近的程序点Z'q,其中p与q分为程序点Z与程序点Z'的编号;
4)分别收集从程序点Zp执行至程序点对<Ct,Vi>中的支配条件检查程序点Ct及程序点Vi的路径约束pc1m及路径约束pc2n,从程序点Z'q执行至程序点对<Ct,Oj>中的支配条件检查程序点Ct及程序点Oj的路径约pc1'm'及路径约束pc2'n',其中m、n、m'及n'分为路径约束pc1、路径约束pc2、路径约束pc1'及路径约束pc2'的编号;
5)通过SMT求解器分别判断路径约束pc2n是否蕴含路径约束pc1m,及路径约束pc2'是否蕴含路径约束pc1':若否,则将相应的程序点对<Ct,Vi>或程序点对<Ct,Oj>加入结果列表中,从而得到安全机制缺陷检测结果。
一种网络协议软件的安全机制缺陷检测方法,其步骤包括:
1)获取协议软件的源代码与特定API,将所述源代码转换为中间表示;
2)根据中间表示,分别构建待分析软件的调用图、系统依赖图及过程间支配树;
3)基于特定API与系统依赖图,在调用图的函数调用点中识别出程序点Vi,其中i为程序点V的编号;
4)基于系统依赖图分析程序点Vi所在函数中控制依赖于程序点Vi的定值语句,获取程序点Oj,其中j为程序点O的编号;
5)结合过程间支配树与路径约束蕴含关系求解,检查执行至每一个程序点Oj时是否经过任一程序点Vi,从而得到安全机制缺陷检测结果。
进一步地,通过以下步骤得到安全机制缺陷检测结果:
1)基于过程间支配树IDT判断程序点Vi是否支配程序点Oj;
2)如果存在一程序点Vi支配程序点Oj,则程序点Oj无逻辑缺陷;如果程序点Vi不支配程序点Oj,则寻找同时支配程序点Vi及程序点Oj,且与程序点Vi及程序点Oj距离最近的程序点Zp,其中p为程序点Z的编号,并转入步骤3);
3)分别收集从程序点Zp执行至程序点Vi及程序点Oj的路径约束pc1m及路径约束pc2n,其中m与n分为路径约束pc1与路径约束pc2的编号;
4)通过SMT求解器判断路径约束pc2n是否蕴含路径约束pc1m:若否,则将相应程序点Oj的位置加入结果列表中,得到安全机制缺陷检测结果。
一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行以上所述方法。
一种电子装置,包括存储器和处理器,其中存储器存储执行以上所述方法的程序。
和现有技术相比,本发明具有的优点和积极效果如下:
1)提出一种针对协议软件实现中安全机制缺陷的自动化检测技术,有效弥补现有的以模糊测试、静态审计为代表的漏洞挖掘或缺陷检测技术在检测触发效果具有隐蔽性、代码模式在不同软件实现间不具备通用性的逻辑缺陷检测方面的不足。
2)归纳了一种协议软件安全机制在实现过程中应满足的C-V-O模式,并将针对该模式的违反作为检测安全机制缺陷的基础,检测模式具有一定的通用性;将协议软件安全机制缺陷的检测问题简化为C、V、O三类程序点之间是否存在必经关系的分析问题,控制检测开销。
附图说明
图1为本发明的方法流程图。
图2为示例代码片段示意图。
具体实施方式
以下结合附图和实施例对本发明进行详细说明,需要指出的是,所描述的实施例仅旨在便于对本发明的理解,而对其不起任何限定作用。
本发明的全机制缺陷检测方法在协议软件源代码转换后得到的中间表示上进行分析,判断协议软件的安全认证机制中是否存在逻辑缺陷。本方法的输入为协议软件的源代码、开源密码学算法库中用于验证数字签名或消息认证码的API和协议软件中的条件检查程序点(可选),输出为逻辑缺陷的位置。如果给定的输入中不包含条件检查程序点,本方法依旧可以实施,但只会检查程序点V和程序点O之间是否满足“必定经过”关系;如果给定的输入包含了条件检查程序点C,那么除了会检查程序点V和程序点O之间是否满足“必定经过”的关系外,还会检查程序点C和程序点V之间、程序点C和程序点O之间是否满足“必定经过”关系。本方法具体分为6个步骤,如图1所示,详细做法如下:
1.首先将待分析协议软件的源代码转换为中间表示,主要目的是获得易于分析其语义的表现形式。以域名协议软件BIND9为例,其通过C语言编写,分析BIND9时会将它的源代码转换为LLVM中间表示(LLVM IR)的形式。LLVM IR用接近汇编的语法表示指令,满足静态单赋值(SSA)形式,将指令组织在基本块的控制流图中。
2.在中间表示上,构建待分析软件的调用图CG(call graph)、系统依赖图SDG(system dependence graph)和过程间支配树IDT(interprocedural dominator tree)。CG的每个节点代表一个函数,边代表函数调用关系;SDG是程序依赖图(PDG,programdependence graph)的扩展,每个函数表示为一个PDG,每个节点为程序中的语句,边表示数据依赖或控制依赖关系;IDT的每个节点代表程序中的语句,边代表支配关系,如果IDT上存在一条从节点n1到节点n2的边,则说明n1支配n2,即从程序入口点到n2的每一条路径上都包含n1。
3.识别对协议报文的真实性、完整性进行验证的程序点V。遍历调用图中的所有函数调用点,如果某个调用点是位于用于验证消息认证码或数字签名的API的调用路径上,比如开源密码学算法库OpenSSL中的HMAC_Final函数,并且基于系统依赖图得到该调用点的参数与报文中表示消息认证码或数字签名的字段变量存在数据依赖关系,那么将该调用点识别为程序点V。例如图2中第9行对dst_context_verify的函数调用点就是一个程序点V,因为根据系统依赖图可知该调用点数据依赖于表示消息认证码的字段变量tsig.signature,并且根据调用图可知函数dst_context_verify最终调用了密码学算法库OpenSSL中用于验证消息认证码的API:HMAC_Final。
4.识别程序点O。程序点O通常被条件判断(或断言)所保护,该条件判断会对存储协议报文真实性、完整性验证结果的函数返回值或有外部影响的变量(如全局变量)进行检查,以决定是否执行相应操作。首先识别用于存储协议报文真实性、完整性的验证结果的变量:遍历程序点V所在函数中控制依赖于程序点V的定值语句,如果该定值语句的源操作数是表示验证成功或失败的错误码常量,目的操作数是函数返回值或有外部影响的变量,那么将目的操作数加入到集合Vars中。然后对于Vars集合中的每个变量,遍历该变量的所有使用点,如果某个使用点是一个条件判断语句,那么通过该条件判断语句后执行的程序点就是一处程序点O,如果该使用点是一个断言语句,那么该断言语句后执行的程序点就是一处程序点O。例如图2中第12行将变量msg->verified_sig赋值为1,代表对报文真实性、完整性验证成功,第24行使用该变量的断言语句assert(msg->verified_sig)之后的程序点被识别为程序点O。
5.分析协议软件中安全认证机制在实现时是否存在逻辑缺陷,检查是否执行至每一个程序点O时都至少经过了一个程序点V。对于每一个程序点V和程序点O,首先基于过程间支配树IDT判断程序点V是否支配程序点O,如果程序点V支配程序点O,那么根据支配关系的定义,显然程序执行至程序点O时一定经过了程序点V;如果程序点V不支配程序点O,那么寻找同时支配V和O并且与V和O距离最近的程序点Z,然后收集从程序点Z执行至程序点V的路径约束pc1和从程序点Z执行至程序点O的路径约束pc2,然后通过SMT求解器判断pc2是否蕴含pc1,如果pc2蕴含pc1,那么说明执行至程序点O一定会经过程序点V。如果存在一个程序点O不经过任何一个程序点V,则说明存在一处逻辑缺陷,将该程序点O的位置加入结果列表results中。
6.如果给定的输入包含了条件检查程序点C,那么使用与步骤5相同的算法,基于过程间支配树和路径约束蕴含关系求解来检测程序执行至程序点V时是否经过了所有的程序点C,程序执行至程序点O时是否经过了所有的程序点C。如果存在一程序点对<C,V>(<C,O>),程序执行至V(O)时,没有经过该程序点C,则说明存在一处逻辑缺陷,将程序点对<C,V>(<C,O>)加入到结果列表results中。
下面以一具体实施例说明本发明的实施过程:
如图2所示,以域名协议软件BIND9中的一个已公开漏洞CVE-2020-8617为例,说明基于C-V-O模式检测安全机制缺陷的过程。方法的输入为BIND9漏洞版本的源代码、开源密码学算法库提供的用于验证数字签名、消息认证码的API。假定我们已经将BIND9源代码变量转换为LLVM IR中间表示(对应步骤1),并且已经构建好待分析软件的调用图CG、过程间控制流图ICFG、系统依赖图SDG和过程间支配树IDT(对应步骤2)。通过程序点V识别,我们将第9行对dst_context_verify的函数调用点识别为程序点V,因为该调用点数据依赖于表示消息认证码的变量tsig.signature,并且函数dst_context_verify最终调用了密码学算法库OpenSSL中用于验证消息认证码的API:HMAC_Final(对应步骤3)。通过程序点O识别,我们将第24行断言语句assert(msg->verified_sig);之后的程序点识别为程序点O(对应步骤4)。然后我们基于过程间支配树和路径约束的蕴含关系求解,发现执行到程序点O时不一定经过程序点V,即存在路径能够绕过对真实性、完整性的验证V到达关键操作程序点O,最终检测出CVE-2020-8617,将其识别为一个违反C-V-O模式的安全机制缺陷(对应步骤5)。
实验评估:
为了本发明提出的基于C-V-O模式来检测网络协议软件安全机制缺陷的方法,本文从主流域名协议的软件实现中挑选了5个不同版本的包含有6个已公开安全机制缺陷作为实验测试集,设计了两组实验。
实验测试集如表1所示,表的第一列表示域名协议软件及版本信息,第二列表示域名协议软件的代码规模,第三列表示对应版本的域名协议软件已公开安全机制缺陷。
表1实验测试集
本文共设计两组实验。实验一为历史缺陷验证实验,评估本方法对网络协议安全机制缺陷的检测能力与性能开销。实验二为对比实验,选取商用静态审计工具工具Checkmarx、网络协议模糊测试工具代表工具boofuzz(在其上扩展了支持域名协议模糊测试的功能)与本发明对比,评估本发明在检测网络协议安全机制缺陷的优势。
实验配置如表2所示,使用48G内存、4核Intel Core Processor(Broadwell)@1.7GHz、操作系统为Ubuntu 16.04的虚拟机进行实验。
表2实验配置
实验一:历史缺陷验证实验结果如表3所示。本发明提出的方法能够在平均124min内检测出测试集中的所有缺陷,平均误报仅为4个。
表3历史缺陷验证实验结果
实验二:对比实验结果如表4所示。由实验结果可知,Checkmarx和Boofuzz均不能检测出测试集中域名协议软件安全机制缺陷,而本发明能够检测出测试集中的所有安全机制缺陷,并且平均时间开销小于Checkmarx。
表4对比实验结果
以上所述仅为本发明的较佳实施例,并不用以限制本发明,本领域的技术人员应可理解,凡在本发明的精神和原则之内所作的任何修改,等同替换或改进等,均应包含在本发明的保护范围之内,保护范围以权利要求书所界定者为准。
Claims (8)
1.一种网络协议软件的安全机制缺陷检测方法,其步骤包括:
1)获取协议软件的源代码、特定API及协议软件中的条件检查程序点Ct,将所述源代码转换为中间表示,其中t为条件检查程序点C的编号;
2)根据中间表示,分别构建待分析软件的调用图、系统依赖图及过程间支配树;
3)基于特定API与系统依赖图,在调用图的函数调用点中识别出验证协议报文真实性及完整性的程序点Vi,其中,i为程序点V的编号,所述基于特定API与系统依赖图,在调用图的函数调用点中识别出验证协议报文真实性及完整性的程序点Vi,包括:
遍历调用图中的所有函数调用点;
当任一函数调用点位于特定API的调用路径上,且该函数调用点的参数与报文中表示消息认证码或数字签名的字段变量存在数据依赖关系,则将该函数调用点作为验证协议报文真实性及完整性的程序点Vi;
4)基于系统依赖图分析程序点Vi所在函数中控制依赖于程序点Vi的定值语句,获取关键操作程序点Oj,其中,j为关键操作程序点O的编号,所述基于系统依赖图分析程序点Vi所在函数中控制依赖于程序点Vi的定值语句,获取关键操作程序点Oj,包括:
遍历程序点Vi所在函数中控制依赖于程序点Vi的定值语句;
如果该定值语句的源操作数是表示验证成功或失败的错误码常量,且目的操作数是函数返回值或有外部影响的变量,则将该目的操作数加入到集合Vars中;
遍历集合Vars中每一变量的所有使用点;
当任一使用点是一个条件判断语句或断言语句时,则该条件判断语句或断言语句后执行的程序点为关键操作程序点Oj;
5)结合过程间支配树与路径约束蕴含关系求解,检查执行至每一关键操作程序点Oj时是否经过任一程序点Vi和所有条件检查程序点Ct,及执行至每一程序点Vi是否经过所有条件检查程序点Ct,从而得到安全机制缺陷检测结果。
2.如权利要求1所述的方法,其特征在于,所述特定API包括:开源密码学算法库中用于验证数字签名或消息认证码的API。
3.如权利要求1所述的方法,其特征在于,构造调用图的方法包括:将每一函数作为节点,且将函数调用关系作为边;构造系统依赖图的方法包括:将每一语句作为节点,且将数据依赖关系或控制依赖关系作为边;构造过程间支配树的方法包括:将每一语句作为节点,且将支配关系作为边。
4.如权利要求1所述的方法,其特征在于,通过以下步骤得到安全机制缺陷检测结果:
1)基于过程间支配树IDT判断所有条件检查程序点Ct是否都支配程序点Vi或关键操作程序点Oj;
2)如果所有条件检查程序点Ct都支配程序点Vi或关键操作程序点Oj,则程序点Vi或关键操作程序点Oj无逻辑缺陷;若所有条件检查程序点Ct不都支配程序点Vi或关键操作程序点Oj,则根据不支配程序点Vi或关键操作程序点Oj的条件检查程序点Ct,生成程序点对<Ct,Vi>或程序点对<Ct,Oj>,并转入步骤3);
3)针对每一程序点对<Ct,Vi>,寻找同时支配条件检查程序点Ct及程序点Vi,且与支配条件检查程序点Ct及程序点Vi距离最近的程序点Zp;针对每一程序点对<Ct,Oj>,寻找同时支配条件检查程序点Ct及关键操作程序点Oj,且与支配条件检查程序点Ct及关键操作程序点Oj距离最近的程序点Z′q,其中p与q分为程序点Z与程序点Z′的编号;
4)分别收集从程序点Zp执行至程序点对<Ct,Vi>中的支配条件检查程序点Ct及程序点Vi的路径约束pc1m及路径约束pc2n,从程序点Z′q执行至程序点对<Ct,Oj>中的支配条件检查程序点Ct及关键操作程序点Oj的路径约pc1′m′及路径约束pc2′n′,其中m、n、m′及n′分为路径约束pc1、路径约束pc2、路径约束pc1′及路径约束pc2′的编号;
5)通过SMT求解器分别判断路径约束pc2n是否蕴含路径约束pc1m,及路径约束pc2′n′是否蕴含路径约束pc1′m′:若否,则将相应的程序点对<Ct,Vi>或程序点对<Ct,Oj>加入结果列表中,从而得到安全机制缺陷检测结果。
5.一种网络协议软件的安全机制缺陷检测方法,其步骤包括:
1)获取协议软件的源代码与特定API,将所述源代码转换为中间表示;
2)根据中间表示,分别构建待分析软件的调用图、系统依赖图及过程间支配树;
3)基于特定API与系统依赖图,在调用图的函数调用点中识别出验证协议报文真实性及完整性的程序点Vi,其中,i为程序点V的编号,所述基于特定API与系统依赖图,在调用图的函数调用点中识别出验证协议报文真实性及完整性的程序点Vi,包括:
遍历调用图中的所有函数调用点;
当任一函数调用点位于特定API的调用路径上,且该函数调用点的参数与报文中表示消息认证码或数字签名的字段变量存在数据依赖关系,则将该函数调用点作为验证协议报文真实性及完整性的程序点Vi;
4)基于系统依赖图分析程序点Vi所在函数中控制依赖于程序点Vi的定值语句,获取关键操作程序点Oj,其中,j为关键操作程序点O的编号,所述基于系统依赖图分析程序点Vi所在函数中控制依赖于程序点Vi的定值语句,获取关键操作程序点Oj,包括:
遍历程序点Vi所在函数中控制依赖于程序点Vi的定值语句;
如果该定值语句的源操作数是表示验证成功或失败的错误码常量,且目的操作数是函数返回值或有外部影响的变量,则将该目的操作数加入到集合Vars中;
遍历集合Vars中每一变量的所有使用点;
当任一使用点是一个条件判断语句或断言语句时,则该条件判断语句或断言语句后执行的程序点为关键操作程序点Oj;
5)结合过程间支配树与路径约束蕴含关系求解,检查执行至每一个关键操作程序点Oj时是否经过任一程序点Vi,从而得到安全机制缺陷检测结果。
6.如权利要求5所述的方法,其特征在于,通过以下步骤得到安全机制缺陷检测结果:
1)基于过程间支配树IDT判断程序点Vi是否支配关键操作程序点Oj;
2)如果存在一程序点Vi支配关键操作程序点Oj,则关键操作程序点Oj无逻辑缺陷;如果程序点Vi不支配关键操作程序点Oj,则寻找同时支配程序点Vi及关键操作程序点Oj,且与程序点Vi及关键操作程序点Oj距离最近的程序点Zp,其中p为程序点Z的编号,并转入步骤3);
3)分别收集从程序点Zp执行至程序点Vi及关键操作程序点Oj的路径约束pc1m及路径约束pc2n,其中m与n分为路径约束pc1与路径约束pc2的编号;
4)通过SMT求解器判断路径约束pc2n是否蕴含路径约束pc1m:若否,则将相应关键操作程序点Oj的位置加入结果列表中,得到安全机制缺陷检测结果。
7.一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行权利要求1-6中任一所述方法。
8.一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行如权利要求1-6中任一所述方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110857775.0A CN113742724B (zh) | 2021-07-28 | 2021-07-28 | 一种网络协议软件的安全机制缺陷检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110857775.0A CN113742724B (zh) | 2021-07-28 | 2021-07-28 | 一种网络协议软件的安全机制缺陷检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113742724A CN113742724A (zh) | 2021-12-03 |
CN113742724B true CN113742724B (zh) | 2023-09-12 |
Family
ID=78729286
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110857775.0A Active CN113742724B (zh) | 2021-07-28 | 2021-07-28 | 一种网络协议软件的安全机制缺陷检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113742724B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1738257A (zh) * | 2004-12-31 | 2006-02-22 | 北京大学 | 基于应用协议检测引擎的网络入侵检测系统和方法 |
CN102014016A (zh) * | 2010-08-31 | 2011-04-13 | 北京邮电大学 | 一种网络协议缺陷测试系统及方法 |
CN104135397A (zh) * | 2014-07-01 | 2014-11-05 | 浙江工业大学 | 面向无线传感网安全协议设计与实现的形式化验证方法 |
CN112699376A (zh) * | 2020-12-30 | 2021-04-23 | 平安壹钱包电子商务有限公司 | 源代码逻辑漏洞检测方法、装置、计算机设备及存储介质 |
-
2021
- 2021-07-28 CN CN202110857775.0A patent/CN113742724B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1738257A (zh) * | 2004-12-31 | 2006-02-22 | 北京大学 | 基于应用协议检测引擎的网络入侵检测系统和方法 |
CN102014016A (zh) * | 2010-08-31 | 2011-04-13 | 北京邮电大学 | 一种网络协议缺陷测试系统及方法 |
CN104135397A (zh) * | 2014-07-01 | 2014-11-05 | 浙江工业大学 | 面向无线传感网安全协议设计与实现的形式化验证方法 |
CN112699376A (zh) * | 2020-12-30 | 2021-04-23 | 平安壹钱包电子商务有限公司 | 源代码逻辑漏洞检测方法、装置、计算机设备及存储介质 |
Non-Patent Citations (1)
Title |
---|
Analyzing Operational Behavior of Stateful Protocol Implementations for Detecting Semantic Bugs;Endadul Hoque 等;47th Annual IEEE/IFIP International Conference on Dependable Systems and Networks;第627-638页 * |
Also Published As
Publication number | Publication date |
---|---|
CN113742724A (zh) | 2021-12-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Manès et al. | The art, science, and engineering of fuzzing: A survey | |
CN101661543B (zh) | 软件源代码安全漏洞的检测方法及检测装置 | |
CN111695119B (zh) | 一种基于细粒度静态污点分析与符号执行的web漏洞检测方法 | |
US8572747B2 (en) | Policy-driven detection and verification of methods such as sanitizers and validators | |
EP3495978B1 (en) | Method for detecting vulnerabilities in software | |
CN111382067A (zh) | 一种模糊测试中高质量种子生成方法及系统 | |
CN113179271A (zh) | 一种内网安全策略检测方法及装置 | |
CN112560043A (zh) | 一种基于上下文语义的漏洞相似性度量方法 | |
Nguyen et al. | Reducing false positives of static analysis for SEI CERT C coding standard | |
CN115310087A (zh) | 一种基于抽象语法树的网站后门检测方法和系统 | |
CN115168847A (zh) | 应用补丁生成方法、装置、计算机设备及可读存储介质 | |
Ye et al. | Towards automated generation of bug benchmark for smart contracts | |
CN117081818A (zh) | 基于智能合约防火墙的攻击交易识别与拦截方法及系统 | |
CN113742724B (zh) | 一种网络协议软件的安全机制缺陷检测方法 | |
JP7235126B2 (ja) | バックドア検査装置、バックドア検査方法、及びプログラム | |
Han et al. | An optimized static propositional function model to detect software vulnerability | |
CN113779589B (zh) | 一种安卓智能手机应用误配置检测方法 | |
US11995192B2 (en) | System for static analysis of binary executable code and source code using fuzzy logic and method thereof | |
TW201933165A (zh) | 安全設計裝置、安全設計方法及安全設計程式產品 | |
Jurn et al. | A survey of automated root cause analysis of software vulnerability | |
Gao et al. | Automatic buffer overflow warning validation | |
KR101869008B1 (ko) | 자바 어플리케이션의 바이트코드 기반 입력값 검증장치 및 그 방법 | |
RU2783152C1 (ru) | Система и способ статического анализа исполняемого двоичного кода и исходного кода с использованием нечеткой логики | |
Jang | Source Code Instrumentation Technique for Buffer Overflow Vulnerability Detection | |
CN118502732B (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 |