CN109426723A - 使用释放后内存的检测方法、系统、设备及存储介质 - Google Patents

使用释放后内存的检测方法、系统、设备及存储介质 Download PDF

Info

Publication number
CN109426723A
CN109426723A CN201811013000.XA CN201811013000A CN109426723A CN 109426723 A CN109426723 A CN 109426723A CN 201811013000 A CN201811013000 A CN 201811013000A CN 109426723 A CN109426723 A CN 109426723A
Authority
CN
China
Prior art keywords
node
function
path
memory
release
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.)
Granted
Application number
CN201811013000.XA
Other languages
English (en)
Other versions
CN109426723B (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.)
Shenzhen Yuanumbrella New Technology Co Ltd
Original Assignee
Shenzhen Yuanumbrella New 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 Shenzhen Yuanumbrella New Technology Co Ltd filed Critical Shenzhen Yuanumbrella New Technology Co Ltd
Publication of CN109426723A publication Critical patent/CN109426723A/zh
Application granted granted Critical
Publication of CN109426723B publication Critical patent/CN109426723B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3608Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • G06F8/434Pointers; Aliasing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3624Software debugging by performing operations on the source code, e.g. via a compiler
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/366Software debugging using diagnostics
    • 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
    • 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/3692Test management for test results analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9024Graphs; Linked lists
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis

Abstract

本发明提供了使用释放后内存的检测方法、系统、设备及存储介质,该方法包括以下步骤:输入待检测的程序;生成程序中每个函数的符号表达式图,符号表达式图包括节点和连接节点的边,节点包括值节点和运算符节点,边包括数据依赖性边和控制依赖性边,其中,数据依赖性边是将节点连接到与其有直接数据依赖关系的值节点的有方向性的边,控制依赖性边是当存在限定变量的条件时将变量连接到条件的有向边;检测符号表达式图中进行内存释放操作源的源节点到进行内存释放操作对象的对象节点的路径的约束条件是否都满足,若是,则发现使用释放后内存缺陷,本发明利用符号表达式图中路径和路径约束条件的判断,能够高效地检测使用释放后内存的缺陷。

Description

使用释放后内存的检测方法、系统、设备及存储介质
技术领域
本发明涉及程序检测领域,具体地说,涉及使用释放后内存的检测方法、系统、设备及存储介质。
背景技术
UAF(UseAfterFree,释放后重引用)漏洞是一类危害很大的漏洞。UAF漏洞能导致被释放的内存空间被写入可控数据后,被再次作为指针引用,进而使得攻击者有机会控制系统的执行流程,执行恶意代码。为了提升系统的安全性,有必要对移动终端操作系统中的UAF漏洞进行验证,以判断移动终端操作系统是否存在特定的UAF漏洞,并找出可利用路径,对此漏洞的可利用性进行评估。
使用已释放的内存(Use after Free)可以导致不同的后果,包括程序崩溃或程序被控制执行。
使用释放后的内存的主要原因是程序的缺陷设计。
可以由一个例子简单说明:
代码第4行free了ptr指针指向的内存,但在代码第8行使用了ptr。该类型漏洞会产生无法预料的意外结果。
在经修复的代码版本中,将free(ptr)指针的代码挪到了使用ptr的代码之后,可以避免发生使用释放后的代码的问题。除此之外,通常采用在释放一个指针后,将其置为空指针的方法来预防使用释放后的内存的问题。
Use-After-Free(UAF)漏洞是一种内存数据破坏缺陷,是由程序试图访问或操作已经被释放的内存引起的。该类型漏洞通常会导致程序崩溃,任意代码执行等危害。分析程序可以分为静态和动态两类。
动态分析程序具体使用的方法则较为多样,大致分为三类:影子内存,即将程序所使用的内存映射到可控内存;动态插桩,即在指令之间插入分析代码;Debug Allocators,即通过HOOK分配函数,强制分配冗余数据。动态分析的局限在于代码覆盖率会比较低。动态插桩是目前最为流行的动态分析技术。在应用该技术检测UAF漏洞时,具体的检测算法可分为空间算法和时间算法。空间算法指的是处理悬垂指针指向的堆内存(例如将其设置为无访问权限或添加隔离区),从而确保目标程序在试图访问该内存时出错。这种算法有两个局限:一是只能在直接访问堆内存即发生UAF漏洞时触发;二是无法检测堆内存被重分配的情况。时间算法基于一个直觉,即长期存在的悬垂指针是不安全的。时间算法首先设置生命阈值,然后记录和跟踪所有悬垂指针的生命周期,并在该周期超过阈值时发出预警。时间算法能在早期检测出悬垂指针,其代价是较大的开销和一定的误报率。
静态分析程序多是针对源代码进行分析,源代码经过编译、优化等处理所得可执行程序的实际执行动作可能与源码语义不完全一致,造成缺陷分析不够精确。另外由于程序本身的复杂性,复杂的堆栈,数据流结构,使得静态分析工具或者无法检测深入的问题,或者无法保证精度。所以虽然保证检测完备,但是误报也很高。
有鉴于此,本发明提供了一种使用释放后内存的检测方法、系统、设备及存储介质。
发明内容
针对现有技术中的问题,本发明的目的在于提供使用释放后内存的检测方法、系统、设备及存储介质,克服了现有技术的困难,通过符号表达式图中路径和路径约束条件的判断,能够高效地检测使用释放后内存的缺陷。
本发明的实施例提供一种使用释放后内存的检测方法,包括以下步骤:
输入待检测的程序;
生成待检测的程序中每个函数的符号表达式图,所述符号表达式图包括节点和连接节点的边,所述节点包括值节点和运算符节点,所述边包括数据依赖性边和控制依赖性边,其中,所述数据依赖性边是将节点连接到与其有直接数据依赖关系的值节点的有方向性的边,所述控制依赖性边是当存在限定变量的条件时将变量连接到条件的有向边;
检测所述符号表达式图中代表进行内存释放操作源的源节点到代表进行内存释放操作对象的对象节点的路径的约束条件是否都满足,若是,则发现使用释放后内存缺陷。
优选地,检测路径的约束条件是否都满足的步骤包括:
在符号表达式图中从源节点反向顺序的第一个节点作为中间节点,建立所述符号表达式图中代表进行内存释放操作源的源节点与中间节点的第一路径,以及代表进行内存释放操作对象的对象节点与中间节点的第二路径;
收集第一路径的约束条件与第二路径的约束条件;
检测所述第一路径的路径约束条件与第二路径的路径约束条件是否能同时满足,若是,则发现使用释放后内存缺陷。
优选地,建立所述第一路径的步骤包括:
对于各个函数的符号表达式图,从所述中间节点开始对所述符号表达式图进行深度优先遍历;
根据所述中间节点达到所述源节点的路径建立第一路径。本发明中的中间节点是从源节点反向顺序去寻找的。
优选地,收集第一路径的约束条件的步骤包括
判断当前检测函数中从中间节点到源节点之间的路径中是否存在被调函数;
若是,则将所述被调函数的函数摘要组嵌入当前检测函数的符号表达式图。
优选地,建立所述第二路径的步骤包括:
对于各个函数的符号表达式图,从所述中间节点开始对所述符号表达式图进行深度优先遍历;
遍历到达所述对象节点时,根据所述中间节点达到所述对象节点之间的路径建立第二路径。
优选地,收集第二路径的约束条件的步骤包括
判断当前检测函数中从中间节点到对象节点之间的路径中是否存在被调函数;
若是,则将所述被调函数的函数摘要组嵌入当前检测函数的符号表达式图。
优选地,所述方法还包括如下步骤:生成每个函数的函数摘要组,所述函数摘要组至少包括符号摘要,所述符号摘要包括函数输入、函数输出以及函数输入节点到函数输出节点之间路径的约束集。
优选地,所述函数摘要组还包括检查器定制摘要,所述检查器定制摘要包括输入摘要、输出摘要和传递摘要;
在所述第一路径的节点的检查器定制摘要中:
所述输入摘要包括函数输入、函数输入节点到源节点之间路径约束、分析结果报告、生成报告摘要的相应描述和检查器特定信息;
所述输出摘要包括函数输出、路径约束、生成报告摘要的相应描述和检查器特定信息;
所述传递摘要包括函数输入、函数输入节点到中间节点之间的路径约束、生成报告摘要的相应描述和检查器特定信息;
在所述第二路径的节点的检查器定制摘要中:
所述输入摘要包括函数输入、函数输入节点到对象节点之间路径约束、分析结果报告、生成报告摘要的相应描述和检查器特定信息;
所述输出摘要包括函数输出、路径约束、生成报告摘要的相应描述和检查器特定信息;
所述传递摘要包括函数输入、函数输入节点到中间节点之间的路径约束、生成报告摘要的相应描述和检查器特定信息。
优选地,还包括:
发现使用释放后内存缺陷之后,在该节点的所述函数摘要组中再生成一个输入摘要。
优选地,生成待检测的程序中各个函数的符号表达式图,包括如下步骤:
从所述待检测的程序的底层函数依次向上层函数建立各个函数的符号表达式图;
检测各个函数的符号表达式图时,从底层函数依次向上层函数检测,并从底层函数依次向上层函数生成函数摘要;
检测上层函数的符号表达式图时,将该上层函数的下层函数的函数摘要嵌入该上层函数的符号表达式图中。
优选地,所述值节点包括终端值节点和非终端值节点,所述终端值节点表示当前函数外生成的未知的值或常量,所述非终端值节点包括当前函数内生成的值。
优选地,所述控制依赖性边指向的一侧为逻辑运算的运算符或布尔值节点。
优选地,用真和假来标记所述控制依赖性边,以表明逻辑运算的所需的结果。
优选地,所述生成待检测的程序中各个函数的符号表达式图之前,还包括如下步骤:
展开所述待检测的程序中的循环。
本发明的实施例还提供一种使用释放后内存的检测系统,应用于所述的使用释放后内存的检测方法,所述系统包括:
程序输入模块,用于输入待检测的程序;
符号表达式图生成模块,用于生成待检测的程序中每个函数的符号表达式图,所述符号表达式图包括节点和连接节点的边,所述节点包括值节点和运算符节点,所述边包括数据依赖性边和控制依赖性边,其中,所述数据依赖性边是将节点连接到与其有直接数据依赖关系的值节点的有方向性的边,所述控制依赖性边是当存在限定变量的条件时将变量连接到条件的有向边;
缺陷检测模块,用于检测所述符号表达式图中代表进行内存释放操作源的源节点到代表进行内存释放操作对象的对象节点的路径的约束条件是否都满足,若是,则发现使用释放后内存缺陷。
优选地,所述系统还包括:摘要组生成模块,用于生成每个函数的函数摘要组,所述函数摘要组至少包括符号摘要,所述符号摘要包括函数输入、函数输出以及函数输入节点到函数输出节点之间路径的约束集。
本发明的实施例还提供一种使用释放后内存的检测设备,包括:
处理器;
存储器,其中存储有所述处理器的可执行指令;
其中,所述处理器配置为经由执行所述可执行指令来执行上述使用释放后内存的检测方法的步骤。
本发明的实施例还提供一种计算机可读存储介质,用于存储程序,所述程序被执行时实现上述使用释放后内存的检测方法的步骤。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
本发明所提供的使用释放后内存的检测方法、系统、设备及存储介质具有下列优点:
本发明提出了一种生成符号表达式图和根据符号表达式图完成使用释放后内存的检测的方案,基于二进制进行UAF缺陷检测,二进制程序可以直接得到寄存器信息和选中指令,通过这些信息可以准确检测程序的真实执行动作。从而有效减少了误报。本发明首先在符号表达式图中建立各个值节点和连接各个值节点的边,根据值节点和边判断是否存在用户输入节点到查询节点的路径,检测所述符号表达式图中代表进行内存释放操作源的源节点到代表进行内存释放操作对象的对象节点的路径的约束条件是否都满足,能够高效地检测使用释放后内存缺陷。
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显。
图1是本发明的使用释放后内存的检测方法的流程图。
图2A-2B示出了本发明一实施例的预建模阶段中展开循环的一个例子;
图3示出了一端示例代码及其未修剪的HSSA形式;
图4示出了根据本发明一实施例生成的示例性的SEG图;
图5示出了根据本发明一实施例中的SSA格式下的代码。
图6示出了根据本发明一实施例的示例性的SEG图。
图7是本发明的使用释放后内存的检测系统的模块示意图。
图8是本发明的使用释放后内存的检测设备的结构示意图。以及
图9是本发明一实施例的计算机可读存储介质的结构示意图。
具体实施方式
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的实施方式。相反,提供这些实施方式使得本发明将全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。在图中相同的附图标记表示相同或类似的结构,因而将省略对它们的重复描述。
本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
下面结合附图和具体实施例对本发明作进一步说明,但不作为本发明的限定。图1是本发明的使用释放后内存的检测方法的流程图。如图1所示,为了解决现有技术中的问题,本发明的一种实施例提供一种使用释放后内存的检测方法,包括以下步骤:
S100、输入待检测的程序。
S200、生成待检测的程序中每个函数的符号表达式图,符号表达式图包括节点和连接节点的边,节点包括值节点和运算符节点,边包括数据依赖性边和控制依赖性边,其中,数据依赖性边是将节点连接到与其有直接数据依赖关系的值节点的有方向性的边,控制依赖性边是当存在限定变量的条件时将变量连接到条件的有向边。
S300、检测符号表达式图中代表进行内存释放操作源的源节点到代表进行内存释放操作对象的对象节点的路径的约束条件是否都满足,若是,则发现使用释放后内存缺陷。
因此,本发明通过生成符号表达式图和根据符号表达式图完成使用释放后内存的检测的方案,首先在符号表达式图中建立各个值节点和连接各个值节点的边,根据值节点和边判断是否存在用户输入节点到查询节点的路径,检测符号表达式图中代表进行内存释放操作源的源节点到代表进行内存释放操作对象的对象节点的路径的约束条件是否都满足,能够高效地检测使用释放后内存缺陷。
在该实施例中,检测路径的约束条件是否都满足的步骤包括:
S301、在符号表达式图中从源节点反向顺序的第一个节点作为中间节点,建立符号表达式图中代表进行内存释放操作源的源节点与中间节点的第一路径,以及代表进行内存释放操作对象的对象节点与中间节点的第二路径;
S302、收集第一路径的约束条件与第二路径的约束条件;
S303、检测第一路径的路径约束条件与第二路径的路径约束条件是否能同时满足,若是,则发现使用释放后内存缺陷。
深度优先搜索,是图论中的经典算法。它的思想是:假设初始状态是图中所有顶点均未被访问,则从某个顶点v出发,首先访问该顶点,然后依次从它的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和v有路径相通的顶点都被访问到。若此时尚有其他顶点未被访问到,则另选一个未被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。
在该实施例中,建立第一路径的步骤包括:对于各个函数的符号表达式图,从中间节点开始对符号表达式图进行深度优先遍历;根据中间节点达到源节点的路径建立第一路径。同理,建立第二路径的步骤包括:对于各个函数的符号表达式图,从中间节点开始对符号表达式图进行深度优先遍历;遍历到达对象节点时,根据中间节点达到对象节点之间的路径建立第二路径。
在该实施例中,收集第一路径的约束条件的步骤包括:判断当前检测函数中从中间节点到源节点之间的路径中是否存在被调函数;若是,则将被调函数的函数摘要组嵌入当前检测函数的符号表达式图。同理,收集第二路径的约束条件的步骤包括:判断当前检测函数中从中间节点到对象节点之间的路径中是否存在被调函数;若是,则将被调函数的函数摘要组嵌入当前检测函数的符号表达式图。
在符号表达式图中,一个函数可能同时作为另一个函数的被调函数,也可能需要调用再一个函数,被其他函数调用,而不调用其他函数的函数是最底层函数,调用其他函数而不被其他函数调用的函数是最顶层函数。从最底层函数到最顶层函数,函数层级关系依次向上建立。在判断上层函数中路径约束条件是否满足时,如果路径中存在其下层函数,则需要嵌入下层函数的函数摘要,才能判断路径约束条件是否满足。
在该实施例中,方法还包括如下步骤:生成每个函数的函数摘要组,函数摘要组至少包括符号摘要,符号摘要包括函数输入、函数输出以及函数输入节点到函数输出节点之间路径的约束集。
在该实施例中,函数摘要组还包括检查器定制摘要,检查器定制摘要包括输入摘要、输出摘要和传递摘要;
在第一路径的节点的检查器定制摘要中:
输入摘要包括函数输入、函数输入节点到源节点之间路径约束、分析结果报告、生成报告摘要的相应描述和检查器特定信息。其中,函数输入为该节点函数的函数输入,在函数中查找到函数的函数输入节点和源节点之后,生成检查器特定信息,具体指的是在函数中函数输入节点到源节点之间的路径约束是否满足的判断条件,分析结果报告指的是函数中函数输入节点到源节点之间的路径约束是否满足的结果,生成报告摘要的相应描述可以包括函数输入节点到源节点之间路径的追溯摘要。例如,生成报告摘要的相应描述可以包括函数中源节点通过哪些节点一步步回溯到函数输入节点的路径信息。
输出摘要包括函数输出、路径约束、生成报告摘要的相应描述和检查器特定信息。其中,函数输出为该节点函数的输出,查询到函数内的中间节点和函数输出节点之后,生成检查器特定信息,具体指的是函数中中间节点到函数输出节点之间路径约束是否满足的判断条件,分析结果报告指的是函数中中间节点到函数输出节点之间路径约束是否满足的判断结果,生成报告摘要的相应描述可以包括中间节点到函数输出节点之间路径的追溯摘要,例如函数中函数输出节点通过哪些节点如何一步步回溯到中间节点的路径信息。
传递摘要包括函数输入、函数输入节点到中间节点之间的路径约束、生成报告摘要的相应描述和检查器特定信息。其中,函数输入为该节点函数的函数输入,检查器特定信息可以包括S函数中函数输入节点到中间节点之间路径的约束约束是否满足的判断条件,分析结果报告指的是S函数中函数输入节点到中间节点之间约束是否满足的判断条件,生成报告摘要的相应描述可以包括函数输入节点到中间节点之间路径的追溯摘要,例如S函数中中间节点通过哪些节点如何一步步回溯到函数输入节点的路径信息。
在第二路径的节点的检查器定制摘要中:
输入摘要包括函数输入、函数输入节点到对象节点之间路径约束、分析结果报告、生成报告摘要的相应描述和检查器特定信息;其中,函数输入为该节点函数的函数输入,在函数中查找到函数的函数输入节点和对象节点之后,生成检查器特定信息,具体指的是在函数中函数输入节点到对象节点之间的路径约束是否满足的判断条件,分析结果报告指的是函数中函数输入节点到对象节点之间的路径约束是否满足的结果,生成报告摘要的相应描述可以包括函数输入节点到对象节点之间路径的追溯摘要。例如,生成报告摘要的相应描述可以包括函数中对象节点通过哪些节点一步步回溯到函数输入节点的路径信息。
输出摘要包括函数输出、路径约束、生成报告摘要的相应描述和检查器特定信息;其中,函数输出为该节点函数的输出,查询到函数内的中间节点和函数输出节点之后,生成检查器特定信息,具体指的是函数中中间节点到函数输出节点之间路径约束是否满足的判断条件,分析结果报告指的是函数中中间节点到函数输出节点之间路径约束是否满足的判断结果,生成报告摘要的相应描述可以包括中间节点到函数输出节点之间路径的追溯摘要,例如函数中函数输出节点通过哪些节点如何一步步回溯到中间节点的路径信息。
传递摘要包括函数输入、函数输入节点到中间节点之间的路径约束、生成报告摘要的相应描述和检查器特定信息。其中,函数输入为该节点函数的函数输入,检查器特定信息可以包括S函数中函数输入节点到中间节点之间路径的约束约束是否满足的判断条件,分析结果报告指的是S函数中函数输入节点到中间节点之间约束是否满足的判断条件,生成报告摘要的相应描述可以包括函数输入节点到中间节点之间路径的追溯摘要,例如S函数中中间节点通过哪些节点如何一步步回溯到函数输入节点的路径信息。
在该实施例中,还包括:发现使用释放后内存缺陷之后,在该节点的函数摘要组中再生成一个输入摘要。
在该实施例中,生成待检测的程序中各个函数的符号表达式图,包括如下步骤:
从待检测的程序的底层函数依次向上层函数建立各个函数的符号表达式图;
检测各个函数的符号表达式图时,从底层函数依次向上层函数检测,并从底层函数依次向上层函数生成函数摘要;
检测上层函数的符号表达式图时,将该上层函数的下层函数的函数摘要嵌入该上层函数的符号表达式图中。
在该实施例中,值节点包括终端值节点和非终端值节点,终端值节点表示当前函数外生成的未知的值或常量,非终端值节点包括当前函数内生成的值。
在该实施例中,控制依赖性边指向的一侧为逻辑运算的运算符或布尔值节点。
在该实施例中,用真和假来标记控制依赖性边,以表明逻辑运算的所需的结果。
在该实施例中,生成待检测的程序中各个函数的符号表达式图之前,还包括如下步骤:展开待检测的程序中的循环。
下面将介绍每个阶段中实现的主要算法,并重点介绍根据符号表达式图来检测使用释放后内存缺陷。应理解,本文中提供的实例和细节仅是为了帮助理解,而不以任何方式对本发明的范围构成限制。以下具体从(1)形成符号表示图、(2)Source-Sink问题的原理和实施例以及(3)摘要的表示与生成三个方面来介绍本发明的使用释放后内存的检测方法。
(1)形成符号表示图
形成符号表示图主要包括预建模(Pre-model)、先决分析(PrerequisiteAnalysis)、后建模(Post-model)和缺陷分析(Defect analysis)。
在预建模阶段,主要从输入的程序中消除不感兴趣的结构,以简化后续分析。例如,循环展开、循环打破等都是在这个阶段执行的。
接下来,在先决分析阶段,计算基本信息,特别是该阶段的后续分析中所需的整个程序信息。根据先决分析结果,生成调用图。调用图是本领域中常用的用来描述程序结构的图,这里不再详述。
接着,在后建模阶段,使用先决分析阶段生成的调用图来进一步简化代码,并更新程序信息。例如,标记调用图中形成SCC(强连通分量)的调用边,以便将来在不必进入循环的情况下,就能够对调用图中的迭代进行分析。
最后,在缺陷分析阶段,主要算法是符号值流分析(SVFA),生成函数摘要信息,以完成函数内分析。下面将更加详细地描述SEG的生成过程和利用SEG进行使用释放后内存的缺陷检测的方法。
预建模阶段
在预建模阶段,例如,可使用开源的LLVM转换来对程序进行建模。表1示出了这里使用的LLVM转换流程的完整列表。
表1
在该阶段中,主要任务是展开和打破所有的循环,根据循环嵌套结构,从内环到外环。近似循环对于有界模型检查至关重要,展开循环是最简单也是最粗暴的方式。在图2A和2B中示出了展开循环的一个例子。
图2A示出了展开循环之前的循环,该循环为规范的形式:该循环具有预读头部(Pre-header),并且只有一个调用锁存的节点能够返回到头部(header)。虚线箭头将循环内部存在的节点连接到循环外部的退出节点(exit node),并且所有退出节点都被布置了足够的φ函数,以保护来自循环的定义。当然,虚线箭头表示该条边并不存在。通过首先复制循环体(loop body)K次,然后为克隆的变量更新定义-使用(def-use)关系,来执行展开循环K次。
图2B示出了将图2A中的循环展开两次的结果,即,复制了两次。对代码执行三种类型的更新。首先,将来自第i个循环的锁存(latch)复制到第i+1个循环的头部,为所有头部复制和更新φ函数。其次,将新的值插入被克隆的变量的退出节点的φ函数中。接下来,从头部的锁存去除后边缘。这时,如果锁存不能退出循环,则变为悬挂节点,为锁存附加一个不可达的指令,并依赖死代码消除来清理无用的变量。
先决分析阶段
该阶段主要设置来收集全局程序信息。要收集的非常基本的信息是调用图。使用传统指针分析方法来计算调用图,这里不再描述其细节。然而,仅使用自下向上的方法,这对于生成调用图是至关重要的,因为自上向下的方法速度过慢。
后建模阶段
在先决分析之后插入另一个编码建模阶段,提供进一步简化的代码在缺陷分析阶段使用。在该阶段执行的所有算法都是响应于全局程序信息的更新,如果该信息有改变的话。在后建模阶段,不仅可以实现调用图SCC标记分析,如上文所述,标记在调用图中形成循环的后沿,还可以通过缺陷分析来利用这些信息来计算循环中函数的有界分析结果。可选地,还可以在该阶段增加其他重要的变换,如,常数传播(constant propagation)等。
缺陷分析阶段
<Type(τ)>::=bool|int|{(f1,τ1),...,(fn,τn)}|τ[ ]|τ*
<Obj(o)>::=v|{(f1,o1),...,(fn,on)}
<Deref(m)>::=*v|v→f1.f2...fn
<Expre)>::=null|const(n,τ)|unknown(τ)|parm(τ)|global(τ)
|&o|&m|new...
|o|m|e1 binop e2|-e|(τ)e
<Cond(c)>::=false|true|!c|c1 and c2|c1 or c2|v1 comp v2
<Stmt(s)>::=o←e|m←o|ite(c,Label-T,Label-F)|assert(c)|assume(c)
<binop>::={+,-,×,/,mod,band,bor,bxor}
<comp>::={=,<,≥,>,≤,≠}
以下通过一个实施例来介绍使用SEG图的过程,在该实施例中,缺陷分析的算法设计如下:
该示例性算法的源代码的语法定义如上所示,其中ite是if-then-else的缩写。该算法的第一条规则定义了该算法建模的类型,支持两种元素类型:布尔型和整型。在基本类型的基础上定义了C结构(C struct)、数组(array)和指针(pointer)等复合类型。应注意,当前算法中没有对浮点算术进行建模,尽管约束求解器Z3已经添加了对浮点数的支持。所有浮动变量都可以转换为整数变量,并将其整数值建模为未知数。
其余规则定义了变量和变量组成的表达式。具体来说,该算法支持多步指针表达式v→f1.f2...fn,为未初始化变量和浮动变量建模的unknown值,函数参数的parm值,以及全局变量的global值。由于LLVM通过插入临时变量将长表达式转化为短表达式,因此,在此基础上,还可以将存储和加载语句写为*(p+f)=v和v=*(p+f),其中f是基本指针p的偏移量。
下面,将结合实例介绍缺陷检测方法。
程序内分析通过执行价值流分析(value flow analysis),在函数内查找相关缺陷。
价值流分析
下面给出示例性的价值流分析(VFA)的抽象域定义:
Local+parameter variables
Global variables
Abstract objects(new’ed memory)
C:Path conditions
Abstract values
δ:
ψ:
VFA的任务是计算一个抽象存储位置可能具有的抽象值集合,即,如上所示的δ函数。抽象值是分析涉及的具体值的抽象表示。VFA还计算抽象位置具有给定的抽象值时的条件。计算结果被表示为函数。为了简单起见,还将条件位置值对写为其中并且
作为例子,可以选择SSA作为制定VFA的开始,因为SSA能够支持稀疏分析,从而可以显着提高分析性能。然而,由LLVM构建的SSA只是转换了顶级变量,即,那些没有被指针指向的变量。堆内存位置也被LLVM忽略,因此堆内存位置之间的值流是不清楚的。因此,尝试解析指针表达式来构造一个完全编码所有内存位置的def-use关系的SSA形式。
这里的核心问题是分解负载和存储语句。假设指针p指向在可能的混叠分析阶段获得的对象o1,o2,…,ok,则一个直接的因式分解方法是:
对于*(p+f)=v,可以用对象字段的一组直接赋值来替换它:o1.f=v,o2.f=v,...,ok.f=v。
对于v=*(p+f),可以用赋值v=χ(o1.f,o2.f,…,ok·f)替换它。函数χ表示其参数之一可以赋值给v。
对象字段的因式分配由其原始指针表达式来注释,将访问这些表达式,以进行空指针引用检查。将数组建模为单个单元,因此,数组的每个加载和存储将被重定向到该单个单元。在完成对存储和加载的翻译之后,恢复对变量的所有可能的赋值。然后,运行标准的SSA构造算法来插入对象域的φ函数。所得到的IR称为完全基于堆的SSA(HSSA)。HSSA的一个例子如图3所示,在下文中将结合这个例子继续解释本发明的原理。
图3示出了一段示例代码及其未修剪的HSSA形式。
接下来,将图3所示的HSSA IR转换成图形形式,揭示价值计算结构,如,在抽象语法树中。称之为图形表示符号表达式(SEG)。
图4示出了根据本发明的一个实施例生成的示例性的SEG。其中,灰色椭圆形节点表示终端值,未着色的椭圆形节点表示非终端值。实线和虚线代表数据和控制依赖性边。每个非终端值附加到控制依赖性边,以表示该值有效的条件。控制依赖性边的标签代表对条件的期望。为了清楚起见,忽略标记为true的控件依赖性边。在图4中,运算符用矩形灰色节点表示。
形式上,SEG是一个4元组(V,O,D,C)。
其中,V是一组值节点,节点的值分为终端值和非终端值。终端值表示在此函数之外生成的未知值。在该设计中,此函数可访问的参数、全局变量和堆位置的值是终端值,它们表示为图4底部的灰色节点。图4中的椭圆形节点是非终端值,表示在此过程中生成的值。由于SEG的SSA性质,还将唯一的内存位置与每个非终端值相关联,以将该值命名。
O表示该算法中定义的所有运算符的运算符节点集合。
D是一组数据依赖性边,在图4中以实线表示。
C是一组控制依赖性边,在图4中以虚线表示。箭头侧的节点必须是逻辑运算的运算符节点。此处还用true或false来注释边,以表示逻辑运算的所需结果。
终端值的集合也称为接口对象(IO),它们的正式定义如下:
<PIO>z=parami|global
<IO>z=PIO|*IO|IO→f|IO.f
其中,PIO表示主接口对象。在PIO的语法中,parami是函数的第i个参数,global是全局变量。IO的递归部分是通过以PIO作为根的指针取解引用可访问的存储器位置,例如,<o1.f>0和<o2.f>0。在当前的算法中,将IO的值视为符号值,而不会跟踪全局信息流。
如下所示的算法1(constructSEG)给出了构建SEG的伪代码。
该算法以反向顺序(RPO)迭代基本块。对于每个基本块B,首先构建其路径条件其是对于来自的所有路径p的路径约束C(p)的分离。然而,这种路径条件可能非常冗长。压缩路径条件的想法是以递归形式重写其定义:pc(B)=pc(Bif)∧c(Bif→B),其中Bif是B的控制依赖基本块,C(Bif→B)是使程序执行从Bif到B的条件。在算法1中,函数GetBBCond(b)返回一对值(l,cin),其中l是true或false标签,cin是B所依赖于的if条件。可以使用控制依赖图来容易地实现GetBBCond函数。
接下来,按顺序对每个基本块中的语句进行符号评估,并调用函数FindCreateExpr来逐步构建SEG。FindCreateExpr接受三个参数,它们是:运算符、操作数列表和路径条件。最相关的构造是φ函数。必须计算门控函数γ,其中,γi是选择φ函数的第i个元素的条件。使用下面的定理可以导出门控函数:
假设xn=φ(x1,x2,…,xk),
则有γi(B)=pc(Predi(B))∧C(Predi(B)→B),
其中,Predi(B)是B的第i个前导基本块。
如上所述,可以使用示例性的算法1构建根据本发明的SEG。由算法1构建的SEG具有三个特征:
1.将因子赋值解释为对象字段,作为强更新。例如,<o1.f>1不保留值<o1.f>0。目的是用稳健性换取精确性。
2.SEG是一个最大共享的图,SEG的每一个子图是唯一的,即,SEG没有同构子图。FindAndCreateExpr函数可以避免相同的子图。一个例子是节点<o1.f>3和<o2.f>3,它们共享相同的子图。
3.由不同if语句中的两个或多个逻辑运算组成的路径条件紧凑地表示为逻辑运算控制依赖于另一逻辑运算。例如,!=运算符控制取决于<=运算符,它编码语句中的条件if(b<=0)和if(q!=NULL)。
重构每个变量的计算过程的原因是可以轻松地发现不可行的路径,并通过解析约束来排除错误的信息流。在的例子中,if(c>a)和if(b≤0)的分支是不能同时进行的。可以发现这个事实,因为查询SAT((c1=a0+b0)∧(c1>a0)∧(b0≤0))为false。
(2)Source-Sink问题的原理和实施例
为了简化问题并清楚地描述本发明的主要想法,首先以单个函数的项目为例。在下面给出source-sink问题的定义。
定义1:首先给出source和sink两个声明,记为src和sink,source-sink问题指的就是由src产生或使用的一个动态值是否在运行时间内可以流入sink中。
Use-after-free检测是一个source-sink问题的具体实例。在这个实例中,src是一个在值vsrc上进行内存释放操作的源,sink指的是一个在值vsink上进行敏感操作(如,解引用操作)。
给出一个例子进行详细说明,如图5所示的use-after-free例子,src是内存释放操作free(d),sink是解引用操作*g=1。这个source-sink问题判断的是free(d)是否能在运行时间内到达*g=1。如果可以的话,那么use-after-free这一问题则可以被探测到。
在图6中给出了SEG图以及一对source和sink,下面给出解决source-sink最基本的步骤:
1、追踪可以传播到src中的值vsrc。换句话说,这步的目标是通过沿着SEG的边,反向搜索那些是vsrc别名的值。为了减少解释,用vpro去指示一个目标值。对于每一个vpro,可以构造一个从vpro到vsrc的路径p1。
2、追踪第一步得到的值vpro是否可以在sink传播到值vsink。这样做,不管在第一步何时得到值vpro,都可以遍历vpro的后代顶点来追踪它的传播。如果在遍历中可以到达vsink,就构建一个从vpro到vsink的路径p2。
3、如果可以在第一步和第二步的描述中找出路径p1和p2,这就说明vsrc和vsink是vpro的别名。判断vsrc是否可以流入vsink,只需要检查p1和p2两个路径条件是不是可以同时被满足。首先收集p1和p2的路径条件,然后使用一个约束求解器去解决两个路径条件的结合。
以图6为例,其中源节点是free(d)(即释放内存),对象节点是*g=1,如果选择了SEG图中的a节点作为中间节点,则自a沿着SEG图路径进行遍历,自a到达源节点free(d)的路径作为第一路径p1,
自a到达对象节点*g=1的路径作为第二路径p2,收集第一路径p1和第二路径p2的路径条件,生成符号摘要和检查器定制摘要。从所述待检测的程序的底层函数依次向上层函数建立各个函数的符号表达式图;检测各个函数的符号表达式图时,从底层函数依次向上层函数检测,并从底层函数依次向上层函数生成函数摘要;检测上层函数的符号表达式图时,将该上层函数的下层函数的函数摘要嵌入该上层函数的符号表达式图中。最后检测第一路径p1和第二路径p2的路径条件,是否能够同时满足,若是,则认为源节点的free(d)能够被传达到对象节点*g=1,则检测出使用释放后内存的检测方法。
上述内容解释了在只有一个函数的项目中是如何解决source-sink问题的。在现实的事例中,一个项目通常有很多函数。这就需要在程序间进行项目的分析。为了追踪函数间值的传播,提出通过聚集不同函数SEG图的跨过程分析。应理解,本文中提供的实例和细节仅是为了帮助理解,而不以任何方式对本发明的范围构成限制。
(3)摘要的表示与生成
将每个函数的摘要表示为一组摘要项目。一个摘要项目代表了目标函数受到其调用的单一影响,或者是目标函数对其调用者的单一影响。
摘要项分为两大类:符号摘要(Symbolic Summary)和检查器定制摘要(checker-specific summary)。对于一个调用函数,所有检查器的符号摘要是不变的,用来记录这个函数值的变化,但是每一个检查器的检查器定制摘要会不一样,这个就由检查器自身的特征决定要关注的约束。检查器定制摘要又分为输入摘要(input summary)、输出摘要(output summary)和传递摘要(wrapper summary)。
使用释放后的内存代码案例
以上述使用释放后的内存代码案例为例,以下是不同的摘要项的说明:
符号摘要:值如何在目标函数中进行变化的一个摘要,是从函数参数到返回值的值的摘要。它由输入,输出,约束集合三部分组成。示例代码中,bar函数中,输入的参数有*f,函数内将f赋值给局部变量int*g,最后将Return赋值为g返回。因此,foo函数的符号摘要为:{Inputs:{*f};outputs:{Return};constrains:{*Return=f}}。
检查器定制摘要中的输入摘要(input summary)、输出摘要(output summary)和传递摘要(wrapper summary)的说明如下:
输入摘要:函数中分析结果的摘要,它取决于调用者的输入,是从函数参数到vsink的值的摘要。输入摘要分为输入、约束、分析结果的报告、生成报告摘要的相应描述(trace)、检查器特定信息(checker specific information)五部分组成。只有出现解引用的sink操作时,才需要对使用释放后的内存问题进行检测。如示例代码,代码第3行对bar函数的返回值参数发生了解引用,将向上追溯bar函数获得解引用的值的来源。根据bar函数的输出摘要,bar函数将返回一个vsrc,因此在此处检测到一个使用释放后的内存的问题,foo函数生成一个输入摘要。此时输出摘要中的报告为解引用bar函数返回值,输入为{*f},约束恒为真,检查器特定信息为bar的返回值是一个vsrc。检测到错误时将trace到代码第3行的sink操作。对于*c,由于这是一个vsrc,将继续沿着数据流向下查找之后是否发生了新的use-after-free。之后c赋值给d,d发生解引用赋值给e,于是b,d,e都指向同一块内存,在代码第六行解引用d又生成一个输入摘要。
输出摘要:该函数可能影响其调用者的摘要,输出摘要是从source到return值的摘要。输出摘要是由输入,约束,生成报告的摘要的相应描述(例如trace),检查器特定信息(checker specific information)四部分组成,它是分析的一部分但不加入路径验证。对于目标函数调用者的每个不同效果,创建一个单独的输出摘要。在下面的例子中,可以将bar函数内部看做是一个输出摘要。source为free(g),在函数的最后返回了被释放内存的g。其中f为输入,约束恒为真,trace为返回释放过内存的值,而检查器特定信息为返回值g被释放了内存。
传递摘要:是从函数参数到source的一个摘要。对于use-after-free问题,由于没有return值,free这一状态也不能作为输出,因此,在该实施例中,进一步引入一个传递摘要,与输入、输出摘要共同作为检查器定制摘要。在下面的例子中,可以看到a,b作为参数传入bar函数,在bar函数内部,f赋值给g,而最终的source是对g进行了释放,这就是传递摘要的路径。
摘要生成伴随有相应的检查器,下文中的Algorithm1(summary generation)显示了细节。
在路径敏感分析中,如果要生成报告,将检查路径条件是否与函数输入相关。如果路径条件依赖于函数输入,会生成一个输入摘要,其中包括以下信息:(1)报告的约束,(2)与约束相关的函数输入和约束条件中包含的符号(3)其他检查器的特定信息,在use-after-free检测中特定指代一个函数是否在释放一个变量后还对其进行使用。
当分析到达函数的输出时,生成符号摘要和输出摘要。当分析函数输出时,会生成输出函数中包括数据依赖和函数输出的符号摘要。最终将同一功能的所有符号摘要合并为一个。生成一个输出摘要如果函数输出对分析函数的调用者具有特殊的影响。在use-after-free检测中,一个函数可能在其内释放一个变量。每个输出摘要包含以下数据:(1)使相应的函数输出影响调用者的约束,(2)其他特定检查器的信息,这里对于use-after-free是约束返回一个free过后的变量。
当追踪source的数据源追踪到函数输入,也就是参数时,生成一个传递摘要。对于use-after-free问题,由于free语句并不会产生一个return值,因此并不会对其做一个输出摘要;free这一状态函数本身也不能作为输入,因此输入摘要也不会生成。根据这一点,就构造一个传递摘要,该传递摘要在函数参数到free()语句的过程中生成。
图7是本发明的使用释放后内存的检测系统的模块示意图。如图7所示,本发明的实施例还提供一种使用释放后内存的检测系统5,用于实现上述的使用释放后内存的检测方法,使用释放后内存的检测系统包括:程序输入模块51、符号表达式图生成模块52以及缺陷检测模块53。
其中,程序输入模块51,用于输入待检测的程序;
符号表达式图生成模块52,用于生成待检测的程序中每个函数的符号表达式图,所述符号表达式图包括节点和连接节点的边,所述节点包括值节点和运算符节点,所述边包括数据依赖性边和控制依赖性边,其中,所述数据依赖性边是将节点连接到与其有直接数据依赖关系的值节点的有方向性的边,所述控制依赖性边是当存在限定变量的条件时将变量连接到条件的有向边;
缺陷检测模块53,用于检测所述符号表达式图中代表进行内存释放操作源的源节点到代表进行内存释放操作对象的对象节点的路径的约束条件是否都满足,若是,则发现使用释放后内存缺陷。
本实施例中,所述系统还包括:
摘要组生成模块,用于生成每个函数的函数摘要组,所述函数摘要组至少包括符号摘要,所述符号摘要包括函数输入、函数输出以及函数输入节点到函数输出节点之间路径的约束集。
本发明的使用释放后内存的检测系统能够首先在符号表达式图中建立各个值节点和连接各个值节点的边,根据值节点和边判断是否存在用户输入节点到查询节点的路径,检测所述符号表达式图中代表进行内存释放操作源的源节点到代表进行内存释放操作对象的对象节点的路径的约束条件是否都满足,能够高效地检测使用释放后内存缺陷。
本发明实施例还提供一种使用释放后内存的检测设备,包括处理器。存储器,其中存储有处理器的可执行指令。其中,处理器配置为经由执行可执行指令来执行的使用释放后内存的检测方法的步骤。
如上所示,该实施例能够首先在符号表达式图中建立各个值节点和连接各个值节点的边,根据值节点和边判断是否存在用户输入节点到查询节点的路径,检测所述符号表达式图中代表进行内存释放操作源的源节点到代表进行内存释放操作对象的对象节点的路径的约束条件是否都满足,能够高效地检测使用释放后内存缺陷。
所属技术领域的技术人员能够理解,本发明的各个方面可以实现为系统、方法或程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“平台”。
图8是本发明的使用释放后内存的检测设备的结构示意图。下面参照图8来描述根据本发明的这种实施方式的电子设备600。图8显示的电子设备600仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图8所示,电子设备600以通用计算设备的形式表现。电子设备600的组件可以包括但不限于:至少一个处理单元610、至少一个存储单元620、连接不同平台组件(包括存储单元620和处理单元610)的总线630、显示单元640等。
其中,存储单元存储有程序代码,程序代码可以被处理单元610执行,使得处理单元610执行本说明书上述电子处方流转处理方法部分中描述的根据本发明各种示例性实施方式的步骤。例如,处理单元610可以执行如图1中所示的步骤。
存储单元620可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(RAM)6201和/或高速缓存存储单元6202,还可以进一步包括只读存储单元(ROM)6203。
存储单元620还可以包括具有一组(至少一个)程序模块6205的程序/实用工具6204,这样的程序模块6205包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
总线630可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。
电子设备600也可以与一个或多个外部设备700(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与该电子设备600交互的设备通信,和/或与使得该电子设备600能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口650进行。并且,电子设备600还可以通过网络适配器660与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。网络适配器660可以通过总线630与电子设备600的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备600使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储平台等。
本发明实施例还提供一种计算机可读存储介质,用于存储程序,程序被执行时实现的使用释放后内存的检测方法的步骤。在一些可能的实施方式中,本发明的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当程序产品在终端设备上运行时,程序代码用于使终端设备执行本说明书上述电子处方流转处理方法部分中描述的根据本发明各种示例性实施方式的步骤。
如上所示,该实施例能够首先在符号表达式图中建立各个值节点和连接各个值节点的边,根据值节点和边判断是否存在用户输入节点到查询节点的路径,检测所述符号表达式图中代表进行内存释放操作源的源节点到代表进行内存释放操作对象的对象节点的路径的约束条件是否都满足,能够高效地检测使用释放后内存缺陷。
图9是本发明的计算机可读存储介质的结构示意图。参考图9所示,描述了根据本发明的实施方式的用于实现上述方法的程序产品800,其可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
计算机可读存储介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读存储介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。可读存储介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
综上,本发明的目的在于提供使用释放后内存的检测方法、系统、设备及存储介质首先在符号表达式图中建立各个值节点和连接各个值节点的边,根据值节点和边判断是否存在用户输入节点到查询节点的路径,检测所述符号表达式图中代表进行内存释放操作源的源节点到代表进行内存释放操作对象的对象节点的路径的约束条件是否都满足,能够高效地检测使用释放后内存缺陷。
以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。

Claims (18)

1.一种使用释放后内存的检测方法,其特征在于,包括以下步骤:
输入待检测的程序;
生成待检测的程序中每个函数的符号表达式图,所述符号表达式图包括节点和连接节点的边,所述节点包括值节点和运算符节点,所述边包括数据依赖性边和控制依赖性边,其中,所述数据依赖性边是将节点连接到与其有直接数据依赖关系的值节点的有方向性的边,所述控制依赖性边是当存在限定变量的条件时将变量连接到条件的有向边;
检测所述符号表达式图中代表进行内存释放操作源的源节点到代表进行内存释放操作对象的对象节点的路径的约束条件是否都满足,若是,则发现使用释放后内存缺陷。
2.根据权利要求1所述的使用释放后内存的检测方法,其特征在于,检测路径的约束条件是否都满足的步骤包括:
在符号表达式图中从源节点反向顺序的第一个节点作为中间节点,建立所述符号表达式图中代表进行内存释放操作源的源节点与中间节点的第一路径,以及代表进行内存释放操作对象的对象节点与中间节点的第二路径;
收集第一路径的约束条件与第二路径的约束条件;
检测所述第一路径的路径约束条件与第二路径的路径约束条件是否能同时满足,若是,则发现使用释放后内存缺陷。
3.根据权利要求2所述的使用释放后内存的检测方法,其特征在于,建立所述第一路径的步骤包括:
对于各个函数的符号表达式图,从所述中间节点开始对所述符号表达式图进行深度优先遍历;
根据所述中间节点达到所述源节点的路径建立第一路径。
4.根据权利要求3所述的使用释放后内存的检测方法,其特征在于,收集第一路径的约束条件的步骤包括
判断当前检测函数中从中间节点到源节点之间的路径中是否存在被调函数;
若是,则将所述被调函数的函数摘要组嵌入当前检测函数的符号表达式图。
5.根据权利要求2所述的使用释放后内存的检测方法,其特征在于,建立所述第二路径的步骤包括:
对于各个函数的符号表达式图,从所述中间节点开始对所述符号表达式图进行深度优先遍历;
遍历到达所述对象节点时,根据所述中间节点达到所述对象节点之间的路径建立第二路径。
6.根据权利要求5所述的使用释放后内存的检测方法,其特征在于,收集第二路径的约束条件的步骤包括
判断当前检测函数中从中间节点到对象节点之间的路径中是否存在被调函数;
若是,则将所述被调函数的函数摘要组嵌入当前检测函数的符号表达式图。
7.根据权利要求2至6中的任意一项所述的使用释放后内存的检测方法,其特征在于,所述方法还包括如下步骤:生成每个函数的函数摘要组,所述函数摘要组至少包括符号摘要,所述符号摘要包括函数输入、函数输出以及函数输入节点到函数输出节点之间路径的约束集。
8.根据权利要求7所述的使用释放后内存的检测方法,其特征在于,所述函数摘要组还包括检查器定制摘要,所述检查器定制摘要包括输入摘要、输出摘要和传递摘要;
在所述第一路径的节点的检查器定制摘要中:
所述输入摘要包括函数输入、函数输入节点到源节点之间路径约束、分析结果报告、生成报告摘要的相应描述和检查器特定信息;
所述输出摘要包括函数输出、路径约束、生成报告摘要的相应描述和检查器特定信息;
所述传递摘要包括函数输入、函数输入节点到中间节点之间的路径约束、生成报告摘要的相应描述和检查器特定信息;
在所述第二路径的节点的检查器定制摘要中:
所述输入摘要包括函数输入、函数输入节点到对象节点之间路径约束、分析结果报告、生成报告摘要的相应描述和检查器特定信息;
所述输出摘要包括函数输出、路径约束、生成报告摘要的相应描述和检查器特定信息;
所述传递摘要包括函数输入、函数输入节点到中间节点之间的路径约束、生成报告摘要的相应描述和检查器特定信息。
9.根据权利要求8所述的使用释放后内存的检测方法,其特征在于,还包括:
发现使用释放后内存缺陷之后,在该节点的所述函数摘要组中再生成一个输入摘要。
10.根据权利要求1所述的使用释放后内存的检测方法,其特征在于,生成待检测的程序中各个函数的符号表达式图,包括如下步骤:
从所述待检测的程序的底层函数依次向上层函数建立各个函数的符号表达式图;
检测各个函数的符号表达式图时,从底层函数依次向上层函数检测,并从底层函数依次向上层函数生成函数摘要;
检测上层函数的符号表达式图时,将该上层函数的下层函数的函数摘要嵌入该上层函数的符号表达式图中。
11.根据权利要求1所述的使用释放后内存的检测方法,其特征在于,所述值节点包括终端值节点和非终端值节点,所述终端值节点表示当前函数外生成的未知的值或常量,所述非终端值节点包括当前函数内生成的值。
12.根据权利要求1所述的使用释放后内存的检测方法,其特征在于,所述控制依赖性边指向的一侧为逻辑运算的运算符或布尔值节点。
13.根据权利要求1所述的使用释放后内存的检测方法,其特征在于,用真和假来标记所述控制依赖性边,以表明逻辑运算的所需的结果。
14.根据权利要求1所述的使用释放后内存的检测方法,其特征在于,所述生成待检测的程序中各个函数的符号表达式图之前,还包括如下步骤:
展开所述待检测的程序中的循环。
15.一种使用释放后内存的检测系统,用于实现权利要求1至14中任一项所述的使用释放后内存的检测方法,其特征在于,包括:
程序输入模块,用于输入待检测的程序;
符号表达式图生成模块,用于生成待检测的程序中每个函数的符号表达式图,所述符号表达式图包括节点和连接节点的边,所述节点包括值节点和运算符节点,所述边包括数据依赖性边和控制依赖性边,其中,所述数据依赖性边是将节点连接到与其有直接数据依赖关系的值节点的有方向性的边,所述控制依赖性边是当存在限定变量的条件时将变量连接到条件的有向边;
缺陷检测模块,用于检测所述符号表达式图中代表进行内存释放操作源的源节点到代表进行内存释放操作对象的对象节点的路径的约束条件是否都满足,若是,则发现使用释放后内存缺陷。
16.根据权利要求15所述的使用释放后内存的检测系统,其特征在于,所述系统还包括:
摘要组生成模块,用于生成每个函数的函数摘要组,所述函数摘要组至少包括符号摘要,所述符号摘要包括函数输入、函数输出以及函数输入节点到函数输出节点之间路径的约束集。
17.一种使用释放后内存的检测设备,其特征在于,包括:
处理器;
存储器,其中存储有所述处理器的可执行指令;
其中,所述处理器配置为经由执行所述可执行指令来执行权利要求1至14中任意一项所述使用释放后内存的检测方法的步骤。
18.一种计算机可读存储介质,用于存储程序,其特征在于,所述程序被执行时实现权利要求1至14中任意一项所述使用释放后内存的检测方法的步骤。
CN201811013000.XA 2017-09-01 2018-08-31 使用释放后内存的检测方法、系统、设备及存储介质 Active CN109426723B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN2017107811580 2017-09-01
CN201710781158 2017-09-01

Publications (2)

Publication Number Publication Date
CN109426723A true CN109426723A (zh) 2019-03-05
CN109426723B CN109426723B (zh) 2020-12-22

Family

ID=65514779

Family Applications (4)

Application Number Title Priority Date Filing Date
CN201811013103.6A Pending CN109426614A (zh) 2017-09-01 2018-08-31 缺陷检测方法、设备、系统和计算机可读存储介质
CN201811015751.5A Active CN109426722B (zh) 2017-09-01 2018-08-31 Sql注入缺陷检测方法、系统、设备及存储介质
CN201811013000.XA Active CN109426723B (zh) 2017-09-01 2018-08-31 使用释放后内存的检测方法、系统、设备及存储介质
CN201811014686.4A Active CN109426615B (zh) 2017-09-01 2018-08-31 过程间的空指针解引用检测方法、系统、设备以及介质

Family Applications Before (2)

Application Number Title Priority Date Filing Date
CN201811013103.6A Pending CN109426614A (zh) 2017-09-01 2018-08-31 缺陷检测方法、设备、系统和计算机可读存储介质
CN201811015751.5A Active CN109426722B (zh) 2017-09-01 2018-08-31 Sql注入缺陷检测方法、系统、设备及存储介质

Family Applications After (1)

Application Number Title Priority Date Filing Date
CN201811014686.4A Active CN109426615B (zh) 2017-09-01 2018-08-31 过程间的空指针解引用检测方法、系统、设备以及介质

Country Status (2)

Country Link
US (1) US10642584B2 (zh)
CN (4) CN109426614A (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112015397A (zh) * 2020-09-07 2020-12-01 深圳职业技术学院 环路检测方法及系统
CN112287353A (zh) * 2020-10-28 2021-01-29 北京智游网安科技有限公司 一种漏洞检测方法、终端及存储介质
CN113010891A (zh) * 2021-02-26 2021-06-22 中科天齐(山西)软件安全技术研究院有限公司 一种应用程序安全检测方法、装置、电子设备和存储介质
CN113741969A (zh) * 2021-11-01 2021-12-03 北京鸿渐科技有限公司 分析源库模式缺陷检测器的深层结构体指针分析优化方法

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109918903B (zh) * 2019-03-06 2022-06-21 西安电子科技大学 一种基于llvm编译器的程序非控制数据攻击防护方法
CN110119275B (zh) * 2019-05-13 2021-04-02 电子科技大学 一种分布式内存列式数据库编译执行器架构
CN110175123A (zh) * 2019-05-22 2019-08-27 中国石油大学(华东) 一种基于符号表达式静态缺陷警报关联识别方法
CN110286891B (zh) * 2019-06-25 2020-09-29 中国科学院软件研究所 一种基于代码属性张量的程序源代码编码方法
CN110545264B (zh) * 2019-08-16 2021-09-03 苏州浪潮智能科技有限公司 一种自动化检测ldap认证注入漏洞的方法及装置
CN110442527B (zh) * 2019-08-16 2023-07-18 扬州大学 面向bug报告的自动化修复方法
CN110851139B (zh) * 2019-11-07 2023-04-18 北京字节跳动网络技术有限公司 用于检查代码的方法、装置和电子设备
CN110929264B (zh) * 2019-11-21 2022-08-30 中国工商银行股份有限公司 漏洞检测方法、装置、电子设备及可读存储介质
CN111104335B (zh) * 2019-12-25 2021-08-24 清华大学 一种基于多层次分析的c语言缺陷检测方法及装置
CN111382427B (zh) * 2020-01-06 2022-04-26 宁波中科天齐信息技术有限公司 基于变量关联规则的缓冲区溢出检测方法
CN111460450B (zh) * 2020-03-11 2023-02-10 西北大学 一种基于图卷积网络的源代码漏洞检测方法
CN111737289B (zh) * 2020-06-05 2023-07-25 北京奇艺世纪科技有限公司 Sql注入攻击的检测方法、装置
CN112084115A (zh) * 2020-09-16 2020-12-15 京东数字科技控股股份有限公司 软件缺陷的流程化操作方法和装置
CN112685779A (zh) * 2020-12-31 2021-04-20 天津南大通用数据技术股份有限公司 基于数据库执行select语句主要关键字的静态可信判定方法
CN113010890B (zh) * 2021-02-26 2023-02-07 中科天齐(山西)软件安全技术研究院有限公司 一种应用程序安全检测方法、装置、电子设备和存储介质
CN112632550B (zh) * 2021-03-05 2021-06-29 北京邮电大学 口令和密钥的应用安全的检测方法及其电子设备
CN113076090B (zh) * 2021-04-23 2022-07-05 中国人民解放军国防科技大学 一种面向边信道安全防护的循环语句执行方法及装置
US20230075295A1 (en) * 2021-09-03 2023-03-09 Fujitsu Limited Automatic denoising of machine learning projects
CN114510722B (zh) * 2022-02-17 2023-01-06 北京大学 增量代码的静态检测方法及检测系统

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101017458A (zh) * 2007-03-02 2007-08-15 北京邮电大学 基于源代码静态分析的软件安全代码分析器及其检测方法
US20080301646A1 (en) * 2007-05-29 2008-12-04 Satish Chandra Gupta Detecting Dangling Pointers and Memory Leaks Within Software
CN103019862A (zh) * 2012-12-13 2013-04-03 北京神州绿盟信息安全科技股份有限公司 一种符号执行方法、装置及系统
CN104750563A (zh) * 2013-12-26 2015-07-01 北京大学 一种基于控制流图的内存泄漏自动修复方法
CN105740149A (zh) * 2016-01-29 2016-07-06 中国人民解放军信息工程大学 基于脆弱性模型和符号执行结合的软件安全检测方法
CN106294156A (zh) * 2016-08-11 2017-01-04 北京邮电大学 一种静态代码缺陷检测分析方法及装置

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5075883A (en) * 1991-01-03 1991-12-24 The United States Of America As Represented By The Secretary Of The Army Analog and analytical computation method for determining detector MTF
JP2000076490A (ja) * 1998-09-02 2000-03-14 Casio Comput Co Ltd 表示制御装置及び記憶媒体
US7484205B2 (en) * 2002-12-12 2009-01-27 Microsoft Corporation Preprocessor-based source code instrumentation
US8170466B2 (en) * 2005-05-27 2012-05-01 Ctb/Mcgraw-Hill System and method for automated assessment of constrained constructed responses
US7962901B2 (en) * 2006-04-17 2011-06-14 Microsoft Corporation Using dynamic analysis to improve model checking
CN101271421A (zh) * 2007-03-22 2008-09-24 北京邮电大学 一种软件故障测试系统及方法
JP2010146615A (ja) * 2008-12-16 2010-07-01 Hitachi Global Storage Technologies Netherlands Bv データを記憶するディスクのゾーン・フォーマット設定方法及びディスク・ドライブ
US20100223599A1 (en) * 2009-02-27 2010-09-02 Fujitsu Limited Efficient symbolic execution of software using static analysis
CN101894064B (zh) * 2009-05-21 2013-01-02 北京邮电大学 应用跨函数分析的软件测试方法
JP5529970B2 (ja) * 2009-09-29 2014-06-25 テルコーディア テクノロジーズ インコーポレイテッド リソースが有限であるストリーム計算アプリケーション向けの、関連のある因果的なコンテキスト履歴の捕捉、送信、および再構築の可能化
US9251491B2 (en) * 2009-11-30 2016-02-02 International Business Machines Corporation Performance-aware enterprise components
CN102073587B (zh) * 2010-12-27 2013-07-03 北京邮电大学 一种程序中不可达路径的静态检测方法
CN102222035A (zh) * 2011-07-25 2011-10-19 公安部第三研究所 基于符号执行技术的软件行为检测系统及检测方法
CN103218296B (zh) * 2013-04-22 2015-12-02 北京邮电大学 一种充分检测空指针引用缺陷的方法
US9274925B2 (en) * 2013-04-30 2016-03-01 Fujitsu Limited Programmable symbolic execution based dynamic checker
CN104679646B (zh) * 2013-11-29 2018-02-06 阿里巴巴集团控股有限公司 一种用于检测sql代码缺陷的方法和装置
CN103914382B (zh) * 2014-03-25 2016-06-29 北京邮电大学 一种充分识别指针引用检测对象的方法
CN103914381B (zh) * 2014-03-25 2017-06-13 北京邮电大学 生成时序安全属性类缺陷模式相关的函数摘要信息的方法
US10303808B2 (en) * 2014-05-16 2019-05-28 Configit A/S Product configuration
CN105607990B (zh) * 2014-11-19 2019-07-05 腾讯科技(成都)有限公司 一种空指针崩溃的挖掘方法及装置
CN104536883B (zh) * 2014-12-05 2017-06-16 北京邮电大学 一种静态缺陷检测方法及其系统
CN104573503B (zh) * 2015-02-11 2018-04-27 中国农业银行股份有限公司 一种内存访问溢出的检测方法及装置
CN107193742B (zh) * 2017-05-23 2020-09-04 电子科技大学 一种基于状态的路径敏感的符号化函数摘要算法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101017458A (zh) * 2007-03-02 2007-08-15 北京邮电大学 基于源代码静态分析的软件安全代码分析器及其检测方法
US20080301646A1 (en) * 2007-05-29 2008-12-04 Satish Chandra Gupta Detecting Dangling Pointers and Memory Leaks Within Software
CN103019862A (zh) * 2012-12-13 2013-04-03 北京神州绿盟信息安全科技股份有限公司 一种符号执行方法、装置及系统
CN104750563A (zh) * 2013-12-26 2015-07-01 北京大学 一种基于控制流图的内存泄漏自动修复方法
CN105740149A (zh) * 2016-01-29 2016-07-06 中国人民解放军信息工程大学 基于脆弱性模型和符号执行结合的软件安全检测方法
CN106294156A (zh) * 2016-08-11 2017-01-04 北京邮电大学 一种静态代码缺陷检测分析方法及装置

Non-Patent Citations (5)

* Cited by examiner, † Cited by third party
Title
YICHEN XIE ET AL.: "ARCHER: using symbolic, path-sensitive analysis to detect memory access errors", 《HTTPS://DOI.ORG/10.1145/949952.940115》 *
冯震: "Use-After-Free漏洞检测和利用", 《中国硕士学位论文全文数据库信息科技辑》 *
姬秀娟: "资源泄露故障静态分析的关键技术研究", 《中国博士学位论文全文数据库信息科技辑》 *
孙涛: "悬挂指针的静态检测方法研究", 《中国硕士学位论文全文数据库信息科技辑》 *
杨克: "基于代码属性图的软件安全漏洞挖掘方法研究", 《中国优秀硕士学位论文全文数据库信息科技辑》 *

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112015397A (zh) * 2020-09-07 2020-12-01 深圳职业技术学院 环路检测方法及系统
CN112015397B (zh) * 2020-09-07 2023-09-26 深圳职业技术学院 环路检测方法及系统
CN112287353A (zh) * 2020-10-28 2021-01-29 北京智游网安科技有限公司 一种漏洞检测方法、终端及存储介质
CN113010891A (zh) * 2021-02-26 2021-06-22 中科天齐(山西)软件安全技术研究院有限公司 一种应用程序安全检测方法、装置、电子设备和存储介质
CN113741969A (zh) * 2021-11-01 2021-12-03 北京鸿渐科技有限公司 分析源库模式缺陷检测器的深层结构体指针分析优化方法
CN113741969B (zh) * 2021-11-01 2022-03-11 北京鸿渐科技有限公司 分析源库模式缺陷检测器的深层结构体指针分析优化方法

Also Published As

Publication number Publication date
CN109426722B (zh) 2021-06-29
CN109426722A (zh) 2019-03-05
CN109426723B (zh) 2020-12-22
US10642584B2 (en) 2020-05-05
CN109426615B (zh) 2022-01-28
US20190108003A1 (en) 2019-04-11
CN109426614A (zh) 2019-03-05
CN109426615A (zh) 2019-03-05

Similar Documents

Publication Publication Date Title
CN109426723A (zh) 使用释放后内存的检测方法、系统、设备及存储介质
US11036614B1 (en) Data control-oriented smart contract static analysis method and system
CN104899147B (zh) 一种面向安全检查的代码静态分析方法
US9141350B2 (en) Embedded system performance
CN106547678B (zh) 用于白盒测试的方法和装置
JP7439242B2 (ja) 機械学習モデルの視覚的作成及び監視
CN107608677A (zh) 一种编译处理方法、装置及电子设备
CN103116540A (zh) 基于全局超级块支配图的动态符号执行方法及其装置
US20180095861A1 (en) Automated Test Generation for Structural Coverage for Temporal Logic Falsification of Cyber-Physical Systems
CN111475820A (zh) 基于可执行程序的二进制漏洞检测方法、系统及存储介质
CN104090798A (zh) 动静态结合的中断驱动程序数据竞争检测方法
Liu et al. Automatic generation of assertions from system level design using data mining
CN102508766B (zh) 一种航天嵌入式c语言软件运行时错误的静态分析方法
US10839124B1 (en) Interactive compilation of software to a hardware language to satisfy formal verification constraints
CN106295343A (zh) 一种基于序列化中间表示的源代码分布式检测系统及方法
Nam et al. A bug finder refined by a large set of open-source projects
CN107506304A (zh) 代码检测方法、装置、电子设备及存储介质
Mei et al. Detecting vulnerabilities in IoT software: New hybrid model and comprehensive data analysis
CN105607990A (zh) 一种空指针崩溃的挖掘方法及装置
CN110457208B (zh) 符号执行的引导方法、装置、设备及计算机可读存储介质
Ortin et al. Cnerator: A Python application for the controlled stochastic generation of standard C source code
Křena et al. Automated formal analysis and verification: an overview
CN116361806A (zh) 基于多示例和注意力机制的智能合约分析方法及装置
CN114996111A (zh) 一种配置项对软件系统性能影响的分析方法及系统
Zheng et al. An approach for predicting multiple-type overflow vulnerabilities based on combination features and a time series neural network algorithm

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
CB03 Change of inventor or designer information

Inventor after: Xiao Xiao

Inventor after: Shi Qingkai

Inventor after: Zhou Jinguo

Inventor after: Fan Gang

Inventor before: Xiao Xiao

Inventor before: Shi Qingkai

Inventor before: Zhou Jinguo

Inventor before: Fan Gang

Inventor before: Zhang Chuan

CB03 Change of inventor or designer information
GR01 Patent grant
GR01 Patent grant