CN105787367B - 一种软件更新的补丁安全性检测方法及*** - Google Patents
一种软件更新的补丁安全性检测方法及*** Download PDFInfo
- Publication number
- CN105787367B CN105787367B CN201610098343.5A CN201610098343A CN105787367B CN 105787367 B CN105787367 B CN 105787367B CN 201610098343 A CN201610098343 A CN 201610098343A CN 105787367 B CN105787367 B CN 105787367B
- Authority
- CN
- China
- Prior art keywords
- patch
- safety
- type function
- analyzed
- analysis
- 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/562—Static detection
- G06F21/563—Static detection by source code analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/03—Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
- G06F2221/033—Test or assess software
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Virology (AREA)
- Health & Medical Sciences (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Health & Medical Sciences (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种软件更新的补丁安全性检测方法及***,所述方法包括:通过对补丁预处理,进而进行中间代码分析以获得受补丁影响的基本块,通过这些受补丁影响的基本块得到内存敏感型函数及其变量,从其出发构造主要执行路径;在对路径的进行符号执行的过程中,确定具体的路径条件,到达具体的内存敏感型函数时,结合此时的路径条件和相应的安全检测器来判断是否存在软件更新安全问题。本发明着重于检测软件更新后,新版本相对旧版本不同部分的安全性检测,解决了现有补丁安全性检测方案中存在的误报率、漏报率高,重复性检测导致效率低下以及过度依赖测试集有效性的问题,显著提高了检测效率,进一步提升了补丁安全性检测的准确性。
Description
技术领域
本发明属于软件可靠性研究中的安全领域,具体涉及一种软件更新的补丁安全性检测方法及***。
背景技术
软件更新迭代是软件生命周期中重要的组成部分,软件补丁用于增加、删除软件功能,或者修复已知的BUG。然而补丁并不都是安全的,一些补丁没有修复现有BUG或者引入了新的安全问题,导致软件崩溃甚至影响到整个计算机***。如何快速、准确的检测定位补丁可能存在的安全问题对于软件的安全性以及整个***平台的稳定性都有重要的意义。
传统的软件安全性检测方案将整个软件当作一个整体来对待,主要的分析技术包括静态分析、动态分析和符号执行。静态分析在不执行代码的情况下对程序进行分析,能够分析源代码和二进制代码。静态分析的优势在于代码的覆盖面积大,能够访问内部结构体,根据不同的策略,能够验证代码是否满足规范性、安全性、可靠性、可维护性等指标。然而静态分析忽略了程序的输入以及程序运行时一些上下文的条件,导致误报率较高。动态分析技术通过构造程序输入的同时监控程序的行为来检测到可能出现的安全问题,动态分析考虑了程序执行时期的一些动态信息,因此在一定程度上减少了误报率。但是动态分析的有效性依赖于构建能够触发具体安全问题的输入,同时在可以接受的运行时间和内存空间内不可能覆盖到所有的程序代码,这在一定程度上增加了漏报率。符号执行技术克服了静态测试和动态分析的缺点,符号执行技术在不执行实际程序的前提下,把源程序翻译成一种中间语言,用符号值来取代程序变量的具体值,然后基于中间语言模拟程序执行来进行相关分析,在实际软件的分析过程中有着诸多的优势。但是符号执行技术在分析实际大型程序时存在路径***的问题,同时对程序当中使用的复杂数据结构和复杂操作语句进行建模也相对困难。
传统软件安全性检测方案对于新版本程序中那些已经被检测过的部分仍然需要重新检测,从而造成整体效率的下降。近年来的相关工作主要集中在如何高效、准确的测试新版本相对于上一个旧版本不同的部分,即应用补丁之后所带来的改变部分。但还是需要依赖于现有的一些测试集以及在此基础之上构造快速到达改变部分的测试集,然而生成有效的测试集往往是费时和困难的。
综上所述,现有的软件安全性检测方案存在如下不足:(1)静态分析技术忽略了程序的具体输入和程序执行时上下文条件,存在较高的误报率;(2)动态分析技术在有限的时间空间内没有足够的代码覆盖率,存在较高的漏报率;(3)符号执行技术在分析现实程序过程中存在路径***的问题,有可能导致分析工具的崩溃;(4)现有针对补丁安全性检测的方法依赖于测试集的有效性,且对于复杂的数据结构和语意存在较高的误报率。
发明内容
针对现有技术的缺陷或改进需求,本发明提供了一种软件更新的安全性检测方法及***,其目的在于,解决了现有针对软件更新的安全性检测方案中存在的误报率、漏报率高,重复性检测导致效率低下以及过度依赖测试集有效性的问题,提供一种针对补丁的高效、准确的安全性检测方法。
为实现上述目的,按照本发明的一个方面,提出了一种软件更新的安全性检测方法,所述方法包括:
(1)对补丁进行预处理,将预处理后的补丁提交到代码仓库,并记录补丁相关信息;
(2)通过所述预处理后的补丁更新对应的旧版本程序文件,生成新版本程序文件;
(3)分析所述新版本程序文件,提取与所述预处理后的补丁相关的所有执行路径,并记录其中包含的内存敏感型函数及其变量;
(4)构造以所述内存敏感型函数为中心的数据流图,遍历后得到主要执行路径;
(5)符号执行所述主要执行路径,在执行过程中确定路径条件,在到达内存敏感型函数及路径执行过程中,结合安全检测器进行安全性分析,若满足路径条件,而不符合安全检测器规则,则确定存在软件更新安全问题;
(6)记录检测的软件更新安全问题,所有主要执行路径执行完毕后,生成软件更新安全问题分析报告。
作为进一步优选的,所述步骤(3)具体包括:
(3-1)获取待分析的新版本程序文件以及对应的补丁相关信息;
(3-2)通过编译新版本程序文件,生成优化前的LLVM bitcode文件;
(3-3)利用步骤(3-2)中所述优化前的LLVM bitcode文件生成新版本程序的控制流图CFG;
(3-4)分析步骤(3-3)中的所述新版本程序的控制流图CFG,找出包含补丁语句的基本块,确定补丁影响范围,构造受补丁影响的调用流图;
(3-5)遍历步骤(3-4)中所述受补丁影响的调用流图,检测并记录其中包含的内存敏感型函数及其变量。
作为进一步优选的,所述步骤(4)具体包括:
(4-1)将记录的所述内存敏感型函数存入一个待分析队列Q中;
(4-2)判断所述待分析队列Q是否为空,若是,则退出并结束;否则执行步骤(4-3);
(4-3)从所述待分析队列Q中取出一个待分析内存敏感型函数,从所述待分析内存敏感型函数出发,向前溯源获得具体涉及到的变量来源和起源,向后遍历得到执行路径的末尾,构造以所述待分析内存敏感型函数为根节点的两棵数据流树,利用上述两棵数据流树生成数据流图;
(4-4)遍历数据流图,得到主要执行路径后,重新转到步骤(4-2)。
作为进一步优选的,所述补丁相关信息包括补丁语句、补丁版本、代码行数及应用时间。
作为进一步优选的,所述内存敏感型函数为对内存进行申请、读写、释放操作的函数及指针变量。
按照本发明的另一方面,提出了一种软件更新的安全性检测***,所述***包括:
补丁预处理模块,用于对补丁进行预处理,并将预处理后的补丁提交到代码仓库并记录补丁相关信息;
应用模块,用于通过所述预处理后的补丁更新对应的旧版本程序文件,生成新版本程序文件;
分析模块,用于分析所述新版本程序文件,提取与所述预处理后的补丁相关的所有执行路径,并记录其中包含的内存敏感型函数及其变量;
执行路径生成模块,用于构造以所述内存敏感型函数为中心的数据流图,遍历后得到主要执行路径;
符号执行模块,用于符号执行所述主要执行路径,在执行过程中确定路径条件,在到达内存敏感型函数及路径执行过程中,调用安全验证模块进行安全性分析;
安全验证模块,用于根据路径条件和安全检测器的规则进行安全性分析,若满足路径条件,而不符合安全检测器规则,则确定存在软件更新安全问题;
报告生成模块,用于记录检测的软件更新安全问题,在所有主要执行路径执行完毕后,生成软件更新安全问题分析报告。
作为进一步优选的,所述分析模块具体包括:
信息获取单元,用于获取待分析的新版本程序文件以及对应的补丁相关信息;
编译单元,用于通过编译新版本程序文件,生成优化前的LLVM bitcode文件;
第一流图生成单元,用于利用所述优化前的LLVM bitcode文件生成新版本程序的控制流图CFG;
第二流图生成单元,用于分析所述新版本程序的控制流图CFG,找出包含补丁语句的基本块,确定补丁影响范围,构造受补丁影响的调用流图;
检测模块,用于遍历所述受补丁影响的调用流图,检测并记录其中包含的内存敏感型函数及其变量。
作为进一步优选的,所述执行路径生成模块具体包括:
队列创建单元,用于将记录的所述内存敏感型函数存入一个待分析队列Q中;
判断单元,用于判断所述待分析队列Q是否为空,若是,则退出并结束;否则调用溯源遍历单元;
第一遍历单元,用于从所述待分析队列Q中取出一个待分析内存敏感型函数,从所述待分析内存敏感型函数出发,向前溯源获得具体涉及到的变量来源和起源,向后遍历得到执行路径的末尾,构造以所述待分析内存敏感型函数为根节点的两棵数据流,根据两棵数据流树生成数据流图;
第二遍历单元,用于对数据流图进行遍历,得到主要执行路径后,重新调用判断单元。
作为进一步优选的,所述补丁相关信息包括补丁语句、补丁版本、代码行数及应用时间。
作为进一步优选的,所述内存敏感型函数为对内存进行申请、读写、释放操作的函数及指针变量。
总体而言,按照本发明点的以上技术方案与现有技术相比,主要具备以下的技术优点:
(1)代码覆盖率高。在源代码级别进行静态分析,结合补丁的语句信息,能够获取所有跟补丁语句相关的执行路径,覆盖新版本中全部的改变部分,继承了静态分析代码覆盖率高的优势;
(2)误报率和漏报率低。在获取到所有相关执行路径的基础上,符号执行所有路径,模拟程序的输入,符号化具体的变量值,在执行的过程中对每个分支形成具体的约束条件,对于不确定的变量,向上溯源得到数据源头。在评估安全性的过程中,结合了程序的实际输入条件,程序上下文条件,解决了静态分析中误报率高的问题;
(3)检测效率高。相比与传统检测方法将整个软件当作一个整体来检测,本发明着重于检测新版本中改变的部分。通过(1)中的预处理,得到和补丁密切相关的语句,考虑到一次补丁的应用,只影响到了这些语句,对于程序的其他部分,则不会引入新的安全问题,因此本发明提出的方法仅仅需要考虑补丁相关部分的安全问题,大大提高了检测效率,避免了传统符号执行可能存在的路径***问题。同时本发明采用的方法不依赖于大量、复杂的测试用例,而是通过路径条件和安全条件来更高效、准确的判断可能存在的安全性问题;
(4)扩展性好。安全检测器可以当中一个插件被应用到本发明的框架中,应用不同的安全检测器可以检测不同类型的软件安全性问题,包括但不限于缓冲区溢出检测,未初始化读检测,内存泄露检测,悬挂指针检测。
附图说明
图1是本发明软件更新的安全性检测方法的工作流程图;
图2为对路径条件和安全性分析的判断流程图;
图3为本发明软件更新的安全性检测***框图;
图4为补丁安全性检测的实施例。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明提出了一种软件更新的安全性检测方法及***。软件更新的安全检测方法的主要思路为:只检测新版本程序中跟补丁代码相关的部分,不相关的部分因为之前已经检测过,可以认为是安全的。通过对新版本程序的代码分析,以内存敏感型函数为根节点构造出数据流树,从而生成具体的主要执行路径,同时忽略一些不相关的分支,最后符号执行这些主要执行路径,在执行的过程中生成路径条件,同时结合具体的内存敏感型函数的安全条件规则和相应的检测器来综合判定可能存在的安全问题。这种方法能够解决现有方案存在的漏报率、误报率高,以及路径***影响实际分析效果的问题,能够高效、准确的分析补丁是否会引入新的安全问题,同时将本发明应用到实际的软件开发测试当中,显著提高了开发测试效率。
如图1及图2所示,本发明的实现步骤如下:
(1)将补丁提交到代码仓库中,对补丁进行预处理,去掉语义无关的信息,包括注释,多余的空行,记录补丁相关信息,包括补丁语句、补丁版本、代码行数及应用时间等信息,然后对补丁文件进行分割,获得单条语句,用于后续步骤中确定补丁的影响范围;
(2)从代码仓库中取出待应用的预处理后的补丁和对应的旧版本程序文件,应用所述预处理后的补丁,生成新版本程序文件;
(3)对步骤(2)中得到的新版本程序文件进行分析,为补丁语句所在的函数生成控制流图,遍历控制流图,分析并记录其中的内存敏感函数。具体而言,控制流图代表了基本块之间的调用关系,不在这些基本块中的函数意味着不会经由补丁代码调用到,因此也就不在补丁文件的影响范围之内,因此只需要记录控制流图基本块中包含的内存敏感型函数;
(4)从步骤(2)中记录的所述内存敏感型函数出发,通过向后溯源和向前遍历构造以内存敏感型函数为中心的数据流图,遍历数据流图,从中得到主要执行路径。具体而言,对于一个具体的内存敏感型函数,从该内存敏感型函数中的具体变量出发,通过向后溯源的方法,我们能够确定函数参数变量的源头,考虑到内存敏感型函数处理的变量,如缓冲区指针,可能存在多重释放,内存泄露等问题,因此还需要向前继续探索到路径的尾端,结合相应的安全检测器来判断是否存在上述相关的安全问题。在探索路径的过程当中,会有一些其它无关紧要的分支,比如仅仅是调用其它函数,而不传入任何参数,这些路径就没有必要探索,以减少后面符号执行的开销;
(5)符号执行步骤(4)中生成的所述主要执行路径,在执行的过程中确定路径条件,在到达具体敏感函数及路径执行过程中,结合不同的安全检测器来进行安全性分析,如果满足路径条件,而不符合安全检测器的规则,则可以确定存在软件更新安全问题。具体而言,由于步骤(4)取得的是主要执行路径,因此在符号执行过程中,会涉及到一些变量或者条件在本路径中无法确定其路径条件,这个时候需要从该变量出发,执行步骤(4)中的探索过程,从而得到执行路径进行符号执行。递归执行这个过程,直到完成对所有的变量的路径探索以及执行;
其中,步骤(5)中的安全检测器包括缓冲区溢出检测器,用于判断当前是否满足内存敏感函数的安全性条件,例如要拷贝或者移动的源缓冲区大小是否超过目标缓冲区的大小。未初始化读检测器,对于刚通过内存分配函数分配的缓冲区,检测器将其初始化为特定的随机值,在后面的路径执行过程中,如果检测器检测到对这些特定随机值的读取操作,则给出错误报告。当缓冲区被包括memset在内的一系列操作初始化之后,检测器不再跟踪这块缓冲区的未初始化读问题。内存泄漏检测器,检测器标记一块通过内存分配函数分配的缓冲区,在整个路径执行过程中对其进行跟踪,如果路径执行完毕且没有调用free对其进行释放,则认为存在缓冲区溢出问题。悬挂指针检测器,此检测器在内存泄露检测器的基础之上检测缓冲区被free之后,指向这块缓冲区的指针是否被置为NULL。
(6)记录检测的软件更新安全问题,所有主要路径执行完毕后,生成软件更新安全问题分析报告,报告存在的安全问题。对于具体的安全问题,经由上述步骤的分析,可以给出安全问题发生的位置、具体的执行过程以及触发问题的路径条件和安全条件,通过这些信息,开发人员能够快速的定位问题发生点和产生原因,在第一时间修复问题。
以下详细描述本发明步骤(3)中的分析算法。
(3-1)获取待分析的新版本程序文件以及对应的补丁相关信息,所述补丁相关信息包括补丁语句、补丁版本,代码行数,应用时间等信息。具体而言,补丁语句信息作为分析影响范围的起点,之前对补丁的预处理步骤中,排除一些无关语句能提高后面的分析效率;
(3-2)通过编译新版本程序源码,获得中间形式的语言,生成优化前的LLVMbitcode文件,其中可选取clang编译器进行编译;
(3-3)利用步骤(3-2)生成的LLVM bitcode文件生成新版本程序的控制流图(CFG),控制流图代表了程序具体的调用执行过程;
(3-4)分析步骤(3-3)中生成的控制流图,找出包含补丁语句的基本块,确定补丁影响范围,构造具体的调用流图。具体而言,单个补丁影响范围比较集中,能够快速的确定补丁的影响范围。对于其他不包含补丁语句的基本块而言,则不需要将其归纳到具体的调用流图中,以减少分析的规模;
(3-5)遍历步骤(3-3)中受补丁影响调用流图,检测并记录其中包含的内存敏感型函数。具体而言,定义那些会对内存进行申请、读写、释放操作的函数为内存敏感型函数,包括但不限于,strcpy、strncpy、memcpy、sprintf。除此之外,指针变量也属于内存敏感型,针对指针不当操作存在未初始化读、多重释放、悬挂指针等问题。这些内存敏感函数是检测内存错误的关键。
本发明步骤(4)包括以下子步骤:
(4-1)将分析得到的内存敏感型函数存入一个待分析队列Q中。
(4-2)判断待分析队列Q是否为空,若是,则退出并结束;否则执行步骤(4-3);
(4-3)从待分析队列Q中取出一个待分析的内存敏感型函数,从这些内存敏感型函数出发,向前溯源得到具体涉及到变量的来源和起源,向后遍历得到路径的末尾,构造以待分析函数为根节点的两棵数据流树。具体而言,定义变量的来源为对变量进行赋值的操作,例如int a=b;此时b为a的一个来源。定义变量的源头为对变量的初始化操作或者原始输入,例如char c=getchar();此时getchar()为变量c的源头或对其进行原始的输入赋值;
(4-4)对两棵数据流树进行遍历,得到主要执行路径,排除路径上的一些小的,无关紧要的分支,以减少路径探索的数量,重新转到步骤(4-2)。
相应地,如图3所示为本发明提出的一种与方法对应的软件更新的安全性检测***,所述***包括:
补丁预处理模块,用于对补丁进行预处理,并将预处理后的补丁提交到代码仓库并记录补丁相关信息;所述补丁相关信息包括补丁语句、补丁版本、代码行数及应用时间。
应用模块,用于通过所述预处理后的补丁更新对应的旧版本程序文件,生成新版本程序文件;
分析模块,用于分析所述新版本程序文件,提取与所述预处理后的补丁相关的所有执行路径,并记录其中包含的内存敏感型函数及其变量;其中,所述内存敏感型函数为对内存进行申请、读写、释放操作的函数及指针变量;
执行路径生成模块,用于构造以所述内存敏感型函数为中心的数据流图,遍历后得到主要执行路径;
符号执行模块,用于符号执行所述主要执行路径,在执行过程中确定路径条件,在到达内存敏感型函数及路径执行过程中,调用安全验证模块进行安全性分析;
安全验证模块,用于根据路径条件和安全检测器的规则进行安全性分析,若满足路径条件,而不符合安全检测器规则,则确定存在软件更新安全问题;
报告生成模块,用于记录检测的软件更新安全问题,在所有主要执行路径执行完毕后,生成软件更新安全问题分析报告。
其中,所述分析模块具体包括:
信息获取单元,用于获取待分析的新版本程序文件以及对应的补丁相关信息;
编译单元,用于通过编译新版本程序文件,生成优化前的LLVM bitcode文件;
第一流图生成单元,用于利用所述优化前的LLVM bitcode文件生成新版本程序的控制流图CFG;
第二流图生成单元,用于分析所述新版本程序的控制流图CFG,找出包含补丁语句的基本块,确定补丁影响范围,构造受补丁影响的调用流图;
检测单元,用于遍历所述受补丁影响的调用流图,检测并记录其中包含的内存敏感型函数及其变量。
其中,所述执行路径生成模块具体包括:
队列创建单元,用于将记录的所述内存敏感型函数存入一个待分析队列Q中;
判断单元,用于判断所述待分析队列Q是否为空,若是,则退出并结束;否则调用溯源遍历单元;
第一遍历单元,用于从所述待分析队列Q中取出一个待分析内存敏感型函数,从所述待分析内存敏感型函数出发,向前溯源获得具体涉及到的变量来源和起源,向后遍历得到执行路径的末尾,构造以所述待分析内存敏感型函数为根节点的两棵数据流树,根据两棵数据流树构造数据流图;
第二遍历单元,用于对数据流图进行遍历,得到主要执行路径后,重新调用判断单元。
以下结合实例来具体说明本发明提出的方法及***。
如图4中补丁文件所示,一个存在安全问题的补丁被应用,旧版本代码中存在一个缓冲区溢出漏洞,当拷贝的字符串长度超过25个字符时发生。补丁修改dstMsg将原先的静态分配改为通过malloc动态分配,但是缓冲区长度分配不够,依然存在缓冲区溢出的问题,同时引入了一个新的问题,在函数返回时没有释放为dstMsg分配的内存,导致内存泄露。根据本发明方法,为新版本程序片段生成如图2数据流树,其中包含一个敏感函数strcpy和涉及到的缓冲区指针dstMsg,同时得到其安全条件,如图2所示,strcpy的安全条件为dstMsg指针指向的缓冲区空间要大于srcMsg指针指向的缓冲区空间,且在函数执行完毕后,需要调用free函数对dstMsg进行内存释放,并将其赋值为NULL。敏感函数涉及到的具体执行路径没有其他分支,通过符号执行得到其路径条件,即flag为true,当执行到strcpy函数时,检测器取得此时的路径条件和安全条件,发现dstMsg指针指向的缓冲区大小恰好为srcMsg的大小,不满足安全条件,存在缓冲区溢出的风险,同时路径执行完毕后,检测器发现dstMsg并没被释放,存在内存泄露。据图3所示的判断流程,可以确定补丁存在的上述两个内存错误。
本发明不仅仅局限于上述场景,在分析实际大型软件时,更能体现出本发明在效率、准确度和扩展性方面的优势,本发明通过剪枝手段需要探索的路径大大减少,利用符号执行取得路径条件,结合不同的安全检测器从而进行全面的安全问题判断。本发明可以集成到软件测试环境当中,软件开发人员在提交补丁之后就可以进行一次测试,快速得到分析结果,根据分析报告来修复存在的问题。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种软件更新的补丁安全性检测方法,其特征在于,所述方法包括:
(1)对补丁进行预处理,将预处理后的补丁提交到代码仓库,并记录补丁相关信息;
(2)通过所述预处理后的补丁更新对应的旧版本程序文件,生成新版本程序文件;
(3)分析所述新版本程序文件,提取与所述预处理后的补丁相关的所有执行路径,并记录其中包含的内存敏感型函数及其变量;
(4)构造以所述内存敏感型函数为中心的数据流图,遍历后得到主要执行路径;
(5)符号执行所述主要执行路径,在执行过程中确定路径条件,在到达内存敏感型函数及路径执行过程中,结合安全检测器进行安全性分析,若满足路径条件,而不符合安全检测器规则,则确定存在软件更新安全问题;
(6)记录检测的软件更新安全问题,所有主要执行路径执行完毕后,生成软件更新安全问题分析报告。
2.如权利要求1所述的方法,其特征在于,所述步骤(3)具体包括:
(3-1)获取待分析的新版本程序文件以及对应的补丁相关信息;
(3-2)通过编译新版本程序文件,生成优化前的LLVM bitcode文件;
(3-3)利用步骤(3-2)中所述优化前的LLVM bitcode文件生成新版本程序的控制流图CFG;
(3-4)分析步骤(3-3)中的所述新版本程序的控制流图CFG,找出包含补丁语句的基本块,确定补丁影响范围,构造受补丁影响的调用流图;
(3-5)遍历步骤(3-4)中所述受补丁影响的调用流图,检测并记录其中包含的内存敏感型函数及其变量。
3.如权利要求1所述的方法,其特征在于,所述步骤(4)具体包括:
(4-1)将记录的所述内存敏感型函数存入一个待分析队列Q中;
(4-2)判断所述待分析队列Q是否为空,若是,则退出并结束;否则执行步骤(4-3);
(4-3)从所述待分析队列Q中取出一个待分析内存敏感型函数,从所述待分析内存敏感型函数出发,向前溯源获得具体涉及到的变量来源和起源,向后遍历得到执行路径的末尾,构造以所述待分析内存敏感型函数为根节点的两棵数据流树,利用上述两棵数据流树生成数据流图;
(4-4)遍历数据流图,得到主要执行路径后,重新转到步骤(4-2)。
4.如权利要求1-3任一项所述的方法,其特征在于,所述补丁相关信息包括补丁语句、补丁版本、代码行数及应用时间。
5.如权利要求1-3任一项所述的方法,其特征在于,所述内存敏感型函数为对内存进行申请、读写、释放操作的函数及指针变量。
6.一种软件更新的补丁安全性检测***,其特征在于,所述***包括:
补丁预处理模块,用于对补丁进行预处理,并将预处理后的补丁提交到代码仓库并记录补丁相关信息;
应用模块,用于通过所述预处理后的补丁更新对应的旧版本程序文件,生成新版本程序文件;
分析模块,用于分析所述新版本程序文件,提取与所述预处理后的补丁相关的所有执行路径,并记录其中包含的内存敏感型函数及其变量;
执行路径生成模块,用于构造以所述内存敏感型函数为中心的数据流图,遍历后得到主要执行路径;
符号执行模块,用于符号执行所述主要执行路径,在执行过程中确定路径条件,在到达内存敏感型函数及路径执行过程中,调用安全验证模块进行安全性分析;
安全验证模块,用于根据路径条件和安全检测器的规则进行安全性分析,若满足路径条件,而不符合安全检测器规则,则确定存在软件更新安全问题;
报告生成模块,用于记录检测的软件更新安全问题,在所有主要执行路径执行完毕后,生成软件更新安全问题分析报告。
7.如权利要求6所述的***,其特征在于,所述分析模块具体包括:
信息获取单元,用于获取待分析的新版本程序文件以及对应的补丁相关信息;
编译单元,用于通过编译新版本程序文件,生成优化前的LLVM bitcode文件;
第一流图生成单元,用于利用所述优化前的LLVM bitcode文件生成新版本程序的控制流图CFG;
第二流图生成单元,用于分析所述新版本程序的控制流图CFG,找出包含补丁语句的基本块,确定补丁影响范围,构造受补丁影响的调用流图;
检测单元,用于遍历所述受补丁影响的调用流图,检测并记录其中包含的内存敏感型函数及其变量。
8.如权利要求6所述的***,其特征在于,所述执行路径生成模块具体包括:
队列创建单元,用于将记录的所述内存敏感型函数存入一个待分析队列Q中;
判断单元,用于判断所述待分析队列Q是否为空,若是,则退出并结束;否则调用溯源遍历单元;
第一遍历单元,用于从所述待分析队列Q中取出一个待分析内存敏感型函数,从所述待分析内存敏感型函数出发,向前溯源获得具体涉及到的变量来源和起源,向后遍历得到执行路径的末尾,构造以所述待分析内存敏感型函数为根节点的两棵数据流树,根据两棵数据流树生成数据流图;
第二遍历单元,用于对数据流图进行遍历,得到主要执行路径后,重新调用判断单元。
9.如权利要求6-8任一项所述的***,其特征在于,所述补丁相关信息包括补丁语句、补丁版本、代码行数及应用时间。
10.如权利要求6-8任一项所述的***,其特征在于,所述内存敏感型函数为对内存进行申请、读写、释放操作的函数及指针变量。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610098343.5A CN105787367B (zh) | 2016-02-23 | 2016-02-23 | 一种软件更新的补丁安全性检测方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610098343.5A CN105787367B (zh) | 2016-02-23 | 2016-02-23 | 一种软件更新的补丁安全性检测方法及*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105787367A CN105787367A (zh) | 2016-07-20 |
CN105787367B true CN105787367B (zh) | 2018-09-21 |
Family
ID=56402820
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610098343.5A Active CN105787367B (zh) | 2016-02-23 | 2016-02-23 | 一种软件更新的补丁安全性检测方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105787367B (zh) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106446221B (zh) * | 2016-09-30 | 2019-09-17 | 北京奇虎科技有限公司 | 数据分析方法及装置 |
CN108345796A (zh) * | 2017-05-02 | 2018-07-31 | 北京安天网络安全技术有限公司 | 一种漏洞修复及主机加固方法及*** |
CN111919214A (zh) * | 2018-05-21 | 2020-11-10 | 谷歌有限责任公司 | 针对安全性违反的补丁的自动生成 |
CN109241737B (zh) * | 2018-07-03 | 2021-07-13 | 中国科学院信息工程研究所 | 一种面向多种补丁模式的差异分支识别方法及*** |
CN110058874B (zh) * | 2019-03-14 | 2022-03-15 | 广东九联科技股份有限公司 | 一种代码补丁检查***与方法 |
CN111858290B (zh) * | 2019-04-30 | 2024-02-06 | 深圳市前海源伞科技有限公司 | 用于检测目标代码的内存泄漏路径的方法和设备 |
CN110879778B (zh) * | 2019-10-14 | 2023-09-26 | 杭州电子科技大学 | 一种新的动态反馈和改进型补丁评价的软件自动修复方法 |
CN111177733B (zh) * | 2019-12-30 | 2022-06-21 | 北京航空航天大学 | 一种基于数据流分析的软件补丁检测方法及装置 |
CN113157305B (zh) * | 2020-01-23 | 2022-04-05 | 华为技术有限公司 | 一种软件升级方法及设备 |
CN111831979B (zh) * | 2020-07-06 | 2021-08-17 | 北京瑞莱智慧科技有限公司 | 一种数据隐私保护协议的分析方法及装置 |
CN111967013A (zh) * | 2020-07-13 | 2020-11-20 | 复旦大学 | 一种基于补丁摘要比对的c/c++补丁存在性检测方法 |
CN113110864B (zh) * | 2021-03-19 | 2023-01-20 | 深圳市腾讯网络信息技术有限公司 | 应用程序更新方法、装置及存储介质 |
CN113094078B (zh) * | 2021-03-31 | 2023-05-30 | 建信金融科技有限责任公司 | 一种安全检测方法、装置、设备及介质 |
CN116881924B (zh) * | 2023-07-13 | 2024-03-29 | 广州筑粒信息科技有限公司 | 一种基于数据监控的软件漏洞追踪方法及*** |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103309683A (zh) * | 2012-03-07 | 2013-09-18 | 京信通信***(中国)有限公司 | 硬件设备的软件补丁嵌入方法及装置 |
CN104111848A (zh) * | 2014-06-27 | 2014-10-22 | 华中科技大学 | 一种基于异步检查点的多线程软件动态升级方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2011072970A1 (en) * | 2009-12-18 | 2011-06-23 | Syddansk Universitet | Method, computer program product, and system for non-blocking dynamic update of statically typed class-based object-oriented software |
-
2016
- 2016-02-23 CN CN201610098343.5A patent/CN105787367B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103309683A (zh) * | 2012-03-07 | 2013-09-18 | 京信通信***(中国)有限公司 | 硬件设备的软件补丁嵌入方法及装置 |
CN104111848A (zh) * | 2014-06-27 | 2014-10-22 | 华中科技大学 | 一种基于异步检查点的多线程软件动态升级方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105787367A (zh) | 2016-07-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105787367B (zh) | 一种软件更新的补丁安全性检测方法及*** | |
Zheng et al. | D2a: A dataset built for ai-based vulnerability detection methods using differential analysis | |
Schäfer et al. | An empirical evaluation of using large language models for automated unit test generation | |
CN101714118B (zh) | 一种二进制代码缓冲区溢出漏洞的检测器及其检测方法 | |
CN104899147B (zh) | 一种面向安全检查的代码静态分析方法 | |
CN104536883B (zh) | 一种静态缺陷检测方法及其*** | |
CN102567200A (zh) | 基于函数调用图的并行化安全漏洞检测方法 | |
CN104573503B (zh) | 一种内存访问溢出的检测方法及装置 | |
US8473915B2 (en) | Coverage analysis tool for testing database-aware software applications | |
CN104021084A (zh) | 一种Java源代码缺陷检测方法及装置 | |
US20180114026A1 (en) | Method and system automatic buffer overflow warning inspection and bug repair | |
CN111104335B (zh) | 一种基于多层次分析的c语言缺陷检测方法及装置 | |
CN111475820B (zh) | 基于可执行程序的二进制漏洞检测方法、***及存储介质 | |
CN116049831A (zh) | 一种基于静态分析和动态分析的软件漏洞检测方法 | |
CN109857641A (zh) | 对程序源文件进行缺陷检测的方法及装置 | |
CN103914379B (zh) | 故障自动注入与故障检测的方法及其*** | |
CN112131120B (zh) | 一种源代码缺陷检测方法及装置 | |
CN112256271B (zh) | 一种基于静态分析的区块链智能合约安全检测*** | |
KR101979329B1 (ko) | 바이너리의 취약점을 유발하는 입력데이터 위치 추적 방법 및 그 장치 | |
CN112131122B (zh) | 一种源代码缺陷检测工具误报评估方法及装置 | |
CN105487983B (zh) | 基于智能路径引导的敏感点逼近方法 | |
CN116578980A (zh) | 基于神经网络的代码分析方法及其装置、电子设备 | |
CN105630678B (zh) | 一种智能电能表软件的可靠性检测仪及其检测方法 | |
CN107066302A (zh) | 缺陷检测方法、装置及服务终端 | |
CN107247663B (zh) | 一种冗余变异体识别方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |