CN115344866A - 基于符号执行的跨架构二进制可执行文件漏洞检测方法及系统 - Google Patents
基于符号执行的跨架构二进制可执行文件漏洞检测方法及系统 Download PDFInfo
- Publication number
- CN115344866A CN115344866A CN202210852472.4A CN202210852472A CN115344866A CN 115344866 A CN115344866 A CN 115344866A CN 202210852472 A CN202210852472 A CN 202210852472A CN 115344866 A CN115344866 A CN 115344866A
- Authority
- CN
- China
- Prior art keywords
- function
- taint
- symbol
- tree
- node
- 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.)
- Pending
Links
Images
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/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
-
- 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
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Quality & Reliability (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于符号执行的跨架构二进制可执行文件漏洞检测方法及系统,其中,该方法包括:基于调用图构建引用树,将待分析的可执行文件和目标函数输入引用树中进行引用树解析;将污点源设置为套接字数据接收函数的缓冲区,以完成污点源数据标记;基于调用链向后符号执行的污点传播算法,引入状态函数记录引用树中从引用链中节点ik到达目标函数的污点分析过程,获得污点汇聚点的数据分析结果;提取目标函数的实际参数将污点汇聚点构建成污点汇聚点森林,遍历污点汇聚点森林中的每棵树,检测其每个节点上的值是否被污染。该方法在预定义的漏洞多发函数处检测函数参数是否受污点数据影响来判断该路径下的此次函数调用是否存在潜在风险。
Description
技术领域
本发明涉及软件测试和漏洞挖掘技术领域,特别涉及一种对桌面应用软件和嵌入式固件的二进制可执行文件进行特定漏洞的检测。
背景技术
计算机技术的发展使得各种嵌入式计算机深入生活中的各个领域,固件是嵌入式系统中运行的特殊软件,固件受限于系统资源、编程方式等原因难以使用常用的缓解措施对其进行安全防护,且其高权限、难更新等特点使得固件漏洞的危害性极大,因此亟待一种有效的方式检测固件中的漏洞并及时修复。
发明内容
本发明旨在至少在一定程度上解决相关技术中的技术问题之一。
为此,本发明的第一个目的在于提出一种基于符号执行的跨架构二进制可执行文件漏洞检测方法。
本发明的第二个目的在于提出一种基于符号执行的跨架构二进制可执行文件漏洞检测系统。
本发明的第三个目的在于提出一种计算机设备。
本发明的第四个目的在于提出一种非临时性计算机可读存储介质。
为达到上述目的,本发明一方面实施例提出了基于符号执行的跨架构二进制可执行文件漏洞检测方法,包括以下步骤:步骤S1,基于调用图构建引用树,将待分析的可执行文件和目标函数输入所述引用树中进行引用树解析;步骤S2,将污点源设置为套接字数据接收函数的缓冲区,以完成污点源数据标记;步骤S3,基于调用链向后符号执行的污点传播算法,引入状态函数记录所述引用树中从引用链中节点ik到达目标函数的污点分析过程,获得污点汇聚点的数据分析结果;步骤S4,提取所述目标函数的实际参数将所述污点汇聚点构建成污点汇聚点森林,遍历所述污点汇聚点森林中的每棵树,检测其每个节点上的值是否被污染。
本发明实施例的基于符号执行的跨架构二进制可执行文件漏洞检测方法,针对固件难以获取源码和处理器架构多样的特点,通过标记网络数据作为污点源,使用符号执行方法进行污点跟踪,在预定义的漏洞多发函数处检测函数参数是否受污点数据影响来判断该路径下的此次函数调用是否存在潜在风险。
另外,根据本发明上述实施例的基于符号执行的跨架构二进制可执行文件漏洞检测方法还可以具有以下附加的技术特征:
进一步地,在本发明的一个实施例中,所述引用树的节点集为二元组(函数,调用地址)构成的集合,以(x,null)为根节点,所述引用树中存在一条从(i,addr1)到(j,addr2)的有向边当且仅当下列两个条件同时成立:
(1)在调用图中存在一条从j到i的有向边,且边对应的调用地址为addr2;
(2)根节点到(i,addr1)的路径构成的节点集对应的函数集中不包含函数j。
进一步地,在本发明的一个实施例中,所述引用树解析过程为:将所述待分析的可执行文件和所述目标函数输入所述引用树中,将所述引用树的根节点初始化为(f,null),解析当前函数的每个引用函数并遍历,其中,Ref函数使用IDAPython的二进制函数交叉引用解析功能实现。
进一步地,在本发明的一个实施例中,所述步骤S2中使用angr框架的函数挂钩功能将用于接收消息的缓冲区用标记为危险的符号值进行填充。
进一步地,在本发明的一个实施例中,所述步骤S3具体包括:步骤S301,基于调用链向后符号执行的污点传播算法中的污点分析函数跟踪引用树中的每条引用链,分析引用链的安全性;步骤S302,基于调用链向后符号执行的污点传播算法中的跟踪函数负责根据探索函数的返回结果更新状态函数,完成对调用链安全性的分类;步骤S303,基于调用链向后符号执行的污点传播算法中的探索函数使用符号执行引擎从引用链中节点ik到达目标函数,并返回污点汇聚点的数据分析结果。
进一步地,在本发明的一个实施例中,所述状态函数包括UNKNOWN、CONTINUE、USEUNINITDATA、DANGEROUS和SAFE,其中,所述UNKNOWN为未解析节点i状态;所述CONTINUE以节点i作为符号执行起点,到达目标函数时其参数中含有最初作为参数输入的符号值,且不含有未初始化的符号值和标记为危险的符号值;所述USEUNINITDATA以节点i作为符号执行起点,到达目标函数时其参数中含有未初始化的符号值,即访问了非法内存地址,且不含有被标记为危险的符号值;所述DANGEROUS以节点i作为符号执行起点,到达目标函数时其参数中含有被标记为危险的符号值;所述SAFE以节点i作为符号执行起点,到达目标函数时其参数均为具体值。
进一步地,在本发明的一个实施例中,所述状态函数的初始化状态为:
其中,i为节点,x为目标函数。
为达到上述目的,本发明另一方面实施例提出了基于符号执行的跨架构二进制可执行文件漏洞检测系统,包括:构建解析模块,用于基于调用图构建引用树,将待分析的可执行文件和目标函数输入所述引用树中进行引用树解析;标记模块,用于将污点源设置为套接字数据接收函数的缓冲区,以完成污点源数据标记;污点分析模块,用于基于调用链向后符号执行的污点传播算法,引入状态函数记录所述引用树中从引用链中节点ik到达目标函数的污点分析过程,获得污点汇聚点的数据分析结果;检测模块,用于提取所述目标函数的实际参数将所述污点汇聚点构建成污点汇聚点森林,遍历所述污点汇聚点森林中的每棵树,检测其每个节点上的值是否被污染。
本发明实施例的基于符号执行的跨架构二进制可执行文件漏洞检测系统,针对固件难以获取源码和处理器架构多样的特点,通过标记网络数据作为污点源,使用符号执行方法进行污点跟踪,在预定义的漏洞多发函数处检测函数参数是否受污点数据影响来判断该路径下的此次函数调用是否存在潜在风险。
本发明又一方面实施例提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现如上述实施例所述的基于符号执行的跨架构二进制可执行文件漏洞检测方法。
本发明还一方面实施例提供一种非临时性计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上述实施例所述的基于符号执行的跨架构二进制可执行文件漏洞检测方法。
本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
图1是本发明一个实施例的基于符号执行的跨架构二进制可执行文件漏洞检测方法的流程图;
图2是本发明一个实施例的引用树解析算法示意图;
图3是本发明一个实施例的污点分析函数示意图;
图4是本发明一个实施例的跟踪函数示意图;
图5是本发明一个实施例的探索函数示意图;
图6是本发明一个实施例的基于符号执行的跨架构二进制可执行文件漏洞检测系统的结构示意图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。
下面参照附图描述根据本发明实施例提出的基于符号执行的跨架构二进制可执行文件漏洞检测方法及系统,首先将参照附图描述根据本发明实施例提出的基于符号执行的跨架构二进制可执行文件漏洞检测方法。
图1是本发明一个实施例的基于符号执行的跨架构二进制可执行文件漏洞检测方法的流程图。
如图1所示,该基于符号执行的跨架构二进制可执行文件漏洞检测方法包括以下步骤:
在步骤S1中,基于调用图构建引用树,将待分析的可执行文件和目标函数输入引用树中进行引用树解析。
具体地,定义引用(Reference)关系为,若函数i调用函数j,则称函数j被函数i引用。程序的调用图(Call Graph,CG)为描述程序中函数调用关系的图,节点集为函数集,图中存在一条从i到j的有向边当且仅当函数i调用函数j。可能有多条边从节点i指向j,代表i对j在不同地址上的可能的多次调用。函数x的引用树(Reference Tree,RT)RTx基于CG构建,引用树的节点集为二元组(函数,调用地址)构成的集合,以(x,null)为根节点,引用树中存在一条从(i,addr1)到(j,addr2)的有向边当且仅当下列两个条件同时成立:
(1)在调用图中存在一条从j到i的有向边,且边对应的调用地址为addr2;
(2)根节点到(i,addr1)的路径构成的节点集对应的函数集中不包含函数j。
RT中从根节点到叶子节点的每条路径都代表着程序中从顶级调用者(即叶子节点)到目标函数(即根节点)的一条执行路径,称之为引用链(Reference Chain)。该引用树的定义是函数x的引用图的某种程度的简化。引用树忽略了函数的递归调用,即i→i,和循环调用,即i→j→i的情况。这样做的原因为:(1)简化使得任何函数的任何路径长度均为有限长,减小了分析的复杂性;(2)一般来说递归调用和循环调用通常用来实现某种算法而非逻辑功能,在漏洞分析中忽略二者通常不会对最终结果造成影响。
如图2所示,算法接受两个输入:待分析的可执行文件B和目标函数f。首先将引用树的根节点初始化为(f,null),注意到二元组的第二分量意为对父节点函数的调用地址,因此根节点此值为空。接着解析当前函数x的每个引用函数并遍历,该Ref函数使用IDAPython的二进制函数交叉引用解析功能实现。IDAPython是IDA Pro的Python语言接口。IDA Pro为Interactive Disassembler公司开发的反编译产品,作为反汇编程序的IDA Pro能够以符号表示(汇编语言)显示处理器实际执行的二进制指令,甚至可以生成伪高级代码,提高代码可读性。交叉引用定义为若地址a1在地址a2出现,则称a2交叉引用a1。其类型一般分为两种:数据交叉引用和代码交叉引用,表1展示了几种常见的交叉引用类型,对于引用树解析,主要关心远/近调用/跳转等代码交叉引用。然后将不在x与根节点之间路径上的引用函数加入引用树,以上过程递归执行,直到引用树解析完成。
表1交叉引用类型
在步骤S2中,将污点源设置为套接字数据接收函数的缓冲区,以完成污点源数据标记。
进一步地,在本发明的一个实施例中,步骤S2中使用angr框架的函数挂钩功能将用于接收消息的缓冲区用标记为危险的符号值进行填充。
具体地,来自套接字的网络输入是固件程序最主要的输入来源之一,同时由于网络数据来自设备外部,无法保证其数据的安全性,因此本发明实施例将污点源设置为套接字数据接收函数的缓冲区。表2列出了C语言库中用于从套接字中接收消息的函数,其中,recv函数通常在面向连接的套接字上使用,例如TCP协议。recvfrom和recvmsg函数通常在非面向连接的套接字上使用,例如UDP协议。
表2用于从套接字中接收消息的函数
污点源数据标记使用angr框架的函数挂钩(Hook)功能实现。angr框架提供了一种机制,可以使用自定义或框架内部预定义的Python函数来替换(挂钩)程序某个地址上的函数或库函数,当程序调用对应地址上的函数时,控制流会转交给该Python函数而非原程序中调用的函数,返回时控制流再重新交还给原程序,从而实现函数功能的重写或优化。对于污点源数据标记问题,本发明分别实现了表1中三个消息接收函数的挂钩函数。逻辑为,将用于接收消息的缓冲区(即参数void*buf指针指向的内存区域)用标记为危险的符号值进行填充,填充长度由参数size_t len给出。
在步骤S3中,基于调用链向后符号执行的污点传播算法,引入状态函数记录引用树中从引用链中节点ik到达目标函数的污点分析过程,获得污点汇聚点的数据分析结果。
进一步地,在本发明的一个实施例中,步骤S3具体包括:
步骤S301,基于调用链向后符号执行的污点传播算法中的污点分析函数跟踪引用树中的每条引用链,分析引用链的安全性;
步骤S302,基于调用链向后符号执行的污点传播算法中的跟踪函数负责根据探索函数的返回结果更新状态函数,完成对调用链安全性的分类;
步骤S303,基于调用链向后符号执行的污点传播算法中的探索函数使用符号执行引擎从引用链中节点ik到达目标函数,并返回污点汇聚点的数据分析结果。
引入状态函数记录引用树中的节点在一次污点分析过程中的分析结果。对于函数x的引用树RTx,状态函数S(i)将其中的每个节点i映射到5种状态之一,状态的名称及含义如下所示:
(1)UNKNOWN:还未解析函数i状态;
(2)CONTINUE:以函数i作为符号执行起点,到达x时其参数中含有最初作为参数输入的符号值,且不含有未初始化的符号值和标记为危险的符号值;
(3)USEUNINITDATA:以函数i作为符号执行起点,到达x时其参数中含有未初始化的符号值,即访问了非法内存地址,且不含有被标记为危险的符号值;
(4)DANGEROUS:以函数i作为符号执行起点,到达x时其参数中含有被标记为危险的符号值;
(5)SAFE:以函数i作为符号执行起点,到达x时其参数均为具体值。
初始化状态函数为:
即除目标函数状态为CONTINUE外,其他函数均为未分析状态。
状态函数用来指导污点分析的进行,对于一条引用链x→i1→i2→Lin:
(1)若S(ik)为DANGEROUS或SAFE,即说明以ik为起点,x为终点的路径存在危险或已被证明是安全的,则认为对于任何ik'(k'>k),以ik'为起点,x为终点的路径都存在危险或是安全的;
(2)若S(ik)为CONTINUE或USEUNINITDATA,说明该路径下x使用的参数仍然来自该x→L→ik部分引用链组成的整体之外,因此应继续以ik+1为起点继续分析;
(3)若S(ik)为UNKNOWN,说明以ik为起点的路径还未分析。
如图3-5所示,共同组成了污点传播算法的主体,污点分析过程即状态函数更新的过程,算法的最终输出为更新后的状态函数,每条引用链中至少都有一个节点状态函数值为DANGEROUS或SAFE。图5中的探索函数任务是使用符号执行引擎从引用链中节点ik到达目标函数x,并返回污点汇聚点数据分析结果。探索使用了分步探索的思路,即探索函数ij时将目标设置为ij-1的调用点,探索完成后再从ij-1的起始位置探索ij-2的调用点,如此反复直到探索到目标函数x。该方法能够显著降低符号执行路径爆炸的程度,提高符号执行效率;图4中的跟踪函数负责根据探索函数的返回结果更新状态函数,从而完成对调用链安全性的分类。对于一条调用链x→i1→i2→Lin,跟踪函数从直接调用者)(i1)至顶级调用者(in)依次进行探索尝试,根据节点状态选择结束该链分析、从下一级调用者尝试探索或对该节点进行探索,并根据探索函数的返回结果决定是否结束该链分析。在图3中,污点分析引擎跟踪引用树中的每条引用链从而分析该链的安全性。同时,在符号执行过程中继续使用库函数挂钩机制,替换复杂度高的库函数调用,提高符号执行效率。
在步骤S4中,提取目标函数的实际参数将污点汇聚点构建成污点汇聚点森林,遍历污点汇聚点森林中的每棵树,检测其每个节点上的值是否被污染。
具体地,污点汇聚点数据检查的最终目的是判断目标函数是否使用了被污染的数据(即标记为危险的符号值)作为参数。但对于使用指针作为参数的函数,其一,该函数除了能够使用该指针的字面值外,还可能使用指针指向的内存区域的数据。其二,该指针未必指向单个小于架构位数的元素,可能指向一个数组。其三,该指针可能指向一个指针表,表中的每个指针都指向一个独立的内存区域。污点汇聚点应包含上述所有可能的内存区域,以免对污染数据检查不到位。因此,本发明实施例将污点汇聚点建模成一个森林,森林中的每棵树代表目标函数的一个参数,树的根节点为参数的最外层指针,叶子节点为指针最终指向的数据。
当符号执行引擎探索到目标函数时进行污点汇聚点分析,分为提取和检查两个步骤。首先提取目标函数的实际参数构建污点汇聚点森林,提取过程除了根据上述模型之外,还依照以下策略:
(1)有些函数可以仅提取部分参数。例如,对于格式化字符串漏洞检查情境下的格式化输出函数,例如printf,提取其全部参数既没有必要(格式化字符串漏洞是否存在只与格式化串即第一个参数有关),也无法实现(printf是变长参数函数,且无结束标志)。
(2)提取参数时具体值和符号值都可能出现,因此要规定提取到符号值的行为。当遍历字符串的各个字符时出现未定义的符号值,说明访问到非法地址,该地址处不存在有意义的字符串,参数提取器停止对该字符串的提取。遍历指针表时出现未定义符号值同理,且停止尝试对该指针指向地址数据的提取。
在上述模型下,污点汇聚点数据检查的过程即遍历污点汇聚点森林中的每棵树,观察其各个节点上的值是否被污染的过程。angr符号计算的原理为,n个符号变量进行n元运算的结果是一棵抽象语法树(abstract syntax tree,AST),根节点为运算符,子节点依次为各个操作数。在angr中,除算数运算和逻辑运算外,条件判断(if)也被看做一种运算。污点的数据依赖传播和控制依赖传播用该方式完成了统一。因此,观察节点上的符号值(实际为符号AST)是否被污染只需要遍历该AST,若其中包含污点源引入的标记为危险的符号值,则说明该参数被污染,否则为未被污染。
根据本发明实施例提出的基于符号执行的跨架构二进制可执行文件漏洞检测方法,针对固件难以获取源码和处理器架构多样的特点,通过标记网络数据作为污点源,使用符号执行方法进行污点跟踪,在预定义的漏洞多发函数处检测函数参数是否受污点数据影响来判断该路径下的此次函数调用是否存在潜在风险,且使用nist sard数据集中的1152个程序作为测试集,Acc达到90%以上,召回率达到80%以上。
其次参照附图描述根据本发明实施例提出的基于符号执行的跨架构二进制可执行文件漏洞检测系统。
图6是本发明一个实施例的基于符号执行的跨架构二进制可执行文件漏洞检测系统的结构示意图。
如图6所示,该系统10包括:构建解析模块100、标记模块200、污点分析模块300和检测模块400。
其中,构建解析模块100用于基于调用图构建引用树,将待分析的可执行文件和目标函数输入引用树中进行引用树解析。标记模块200用于将污点源设置为套接字数据接收函数的缓冲区,以完成污点源数据标记。污点分析模块300用于基于调用链向后符号执行的污点传播算法,引入状态函数记录引用树中从引用链中节点ik到达目标函数的污点分析过程,获得污点汇聚点的数据分析结果。检测模块400用于提取目标函数的实际参数将污点汇聚点构建成污点汇聚点森林,遍历污点汇聚点森林中的每棵树,检测其每个节点上的值是否被污染。
需要说明的是,前述对基于符号执行的跨架构二进制可执行文件漏洞检测方法实施例的解释说明也适用于该实施例的系统,此处不再赘述。
根据本发明实施例提出的基于符号执行的跨架构二进制可执行文件漏洞检测系统,针对固件难以获取源码和处理器架构多样的特点,通过标记网络数据作为污点源,使用符号执行方法进行污点跟踪,在预定义的漏洞多发函数处检测函数参数是否受污点数据影响来判断该路径下的此次函数调用是否存在潜在风险,使用nist sard数据集中的1152个程序作为测试集,Acc达到90%以上,召回率达到80%以上。
为了实现上述实施例,本发明还提出了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现如前述实施例所述的基于符号执行的跨架构二进制可执行文件漏洞检测方法。
为了实现上述实施例,本发明还提出了一种非临时性计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如前述实施例所述的基于符号执行的跨架构二进制可执行文件漏洞检测方法。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或N个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本发明的描述中,“N个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更N个用于实现定制逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。
在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,"计算机可读介质"可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或N个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,N个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。如,如果用硬件来实现和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
上述提到的存储介质可以是只读存储器,磁盘或光盘等。尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。
Claims (10)
1.一种基于符号执行的跨架构二进制可执行文件漏洞检测方法,其特征在于,包括以下步骤:
步骤S1,基于调用图构建引用树,将待分析的可执行文件和目标函数输入所述引用树中进行引用树解析;
步骤S2,将污点源设置为套接字数据接收函数的缓冲区,以完成污点源数据标记;
步骤S3,基于调用链向后符号执行的污点传播算法,引入状态函数记录所述引用树中从引用链中节点ik到达目标函数的污点分析过程,获得污点汇聚点的数据分析结果;
步骤S4,提取所述目标函数的实际参数将所述污点汇聚点构建成污点汇聚点森林,遍历所述污点汇聚点森林中的每棵树,检测其每个节点上的值是否被污染。
2.根据权利要求1所述的基于符号执行的跨架构二进制可执行文件漏洞检测方法,其特征在于,所述引用树的节点集为二元组(函数,调用地址)构成的集合,以(x,null)为根节点,所述引用树中存在一条从(i,addr1)到(j,addr2)的有向边当且仅当下列两个条件同时成立:
(1)在调用图中存在一条从j到i的有向边,且边对应的调用地址为addr2;
(2)根节点到(i,addr1)的路径构成的节点集对应的函数集中不包含函数j。
3.根据权利要求1所述的基于符号执行的跨架构二进制可执行文件漏洞检测方法,其特征在于,所述引用树解析过程为:
将所述待分析的可执行文件和所述目标函数输入所述引用树中,将所述引用树的根节点初始化为(f,null),解析当前函数的每个引用函数并遍历,其中,Ref函数使用IDAPython的二进制函数交叉引用解析功能实现。
4.根据权利要求1所述的基于符号执行的跨架构二进制可执行文件漏洞检测方法,其特征在于,所述步骤S2中使用angr框架的函数挂钩功能将用于接收消息的缓冲区用标记为危险的符号值进行填充。
5.根据权利要求1所述的基于符号执行的跨架构二进制可执行文件漏洞检测方法,其特征在于,所述步骤S3具体包括:
步骤S301,基于调用链向后符号执行的污点传播算法中的污点分析函数跟踪引用树中的每条引用链,分析引用链的安全性;
步骤S302,基于调用链向后符号执行的污点传播算法中的跟踪函数负责根据探索函数的返回结果更新状态函数,完成对调用链安全性的分类;
步骤S303,基于调用链向后符号执行的污点传播算法中的探索函数使用符号执行引擎从引用链中节点ik到达目标函数,并返回污点汇聚点的数据分析结果。
6.根据权利要求5所述的基于符号执行的跨架构二进制可执行文件漏洞检测方法,其特征在于,所述状态函数包括UNKNOWN、CONTINUE、USEUNINITDATA、DANGEROUS和SAFE,其中,
所述UNKNOWN为未解析节点i状态;所述CONTINUE以节点i作为符号执行起点,到达目标函数时其参数中含有最初作为参数输入的符号值,且不含有未初始化的符号值和标记为危险的符号值;所述USEUNINITDATA以节点i作为符号执行起点,到达目标函数时其参数中含有未初始化的符号值,即访问了非法内存地址,且不含有被标记为危险的符号值;所述DANGEROUS以节点i作为符号执行起点,到达目标函数时其参数中含有被标记为危险的符号值;所述SAFE以节点i作为符号执行起点,到达目标函数时其参数均为具体值。
8.一种基于符号执行的跨架构二进制可执行文件漏洞检测系统,其特征在于,包括:
构建解析模块,用于基于调用图构建引用树,将待分析的可执行文件和目标函数输入所述引用树中进行引用树解析;
标记模块,用于将污点源设置为套接字数据接收函数的缓冲区,以完成污点源数据标记;
污点分析模块,用于基于调用链向后符号执行的污点传播算法,引入状态函数记录所述引用树中从引用链中节点ik到达目标函数的污点分析过程,获得污点汇聚点的数据分析结果;
检测模块,用于提取所述目标函数的实际参数将所述污点汇聚点构建成污点汇聚点森林,遍历所述污点汇聚点森林中的每棵树,检测其每个节点上的值是否被污染。
9.一种计算机设备,其特征在于,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现如权利要求1-7中任一所述的基于符号执行的跨架构二进制可执行文件漏洞检测方法。
10.一种非临时性计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-7中任一所述的基于符号执行的跨架构二进制可执行文件漏洞检测方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210852472.4A CN115344866A (zh) | 2022-07-20 | 2022-07-20 | 基于符号执行的跨架构二进制可执行文件漏洞检测方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210852472.4A CN115344866A (zh) | 2022-07-20 | 2022-07-20 | 基于符号执行的跨架构二进制可执行文件漏洞检测方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115344866A true CN115344866A (zh) | 2022-11-15 |
Family
ID=83950301
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210852472.4A Pending CN115344866A (zh) | 2022-07-20 | 2022-07-20 | 基于符号执行的跨架构二进制可执行文件漏洞检测方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115344866A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116049835A (zh) * | 2023-03-08 | 2023-05-02 | 中汽智联技术有限公司 | 汽车固件的安全漏洞检测方法、设备和存储介质 |
CN116841622A (zh) * | 2023-09-01 | 2023-10-03 | 上海燧原智能科技有限公司 | 一种地址自增访存指令的生成方法、装置、设备及介质 |
CN117195241A (zh) * | 2023-11-08 | 2023-12-08 | 蔚来汽车科技(安徽)有限公司 | 固件漏洞的检测方法、设备和介质 |
-
2022
- 2022-07-20 CN CN202210852472.4A patent/CN115344866A/zh active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116049835A (zh) * | 2023-03-08 | 2023-05-02 | 中汽智联技术有限公司 | 汽车固件的安全漏洞检测方法、设备和存储介质 |
CN116841622A (zh) * | 2023-09-01 | 2023-10-03 | 上海燧原智能科技有限公司 | 一种地址自增访存指令的生成方法、装置、设备及介质 |
CN116841622B (zh) * | 2023-09-01 | 2023-11-24 | 上海燧原智能科技有限公司 | 一种地址自增访存指令的生成方法、装置、设备及介质 |
CN117195241A (zh) * | 2023-11-08 | 2023-12-08 | 蔚来汽车科技(安徽)有限公司 | 固件漏洞的检测方法、设备和介质 |
CN117195241B (zh) * | 2023-11-08 | 2024-02-02 | 蔚来汽车科技(安徽)有限公司 | 固件漏洞的检测方法、设备和介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109426723B (zh) | 使用释放后内存的检测方法、系统、设备及存储介质 | |
CN115344866A (zh) | 基于符号执行的跨架构二进制可执行文件漏洞检测方法及系统 | |
CN101661543B (zh) | 软件源代码安全漏洞的检测方法及检测装置 | |
CN110287693B (zh) | 基于符号执行路径剪枝的缓冲区溢出漏洞自动检测方法 | |
CN111581106B (zh) | 二进制程序漏洞测试方法、装置及可读存储介质 | |
US20060253739A1 (en) | Method and apparatus for performing unit testing of software modules with use of directed automated random testing | |
CN110909358A (zh) | 一种基于动静态分析的整形漏洞检测方法 | |
CN111832026B (zh) | 一种漏洞利用定位方法、系统、装置及介质 | |
CN113114680A (zh) | 用于文件上传漏洞的检测方法和检测装置 | |
CN110162474B (zh) | 一种基于抽象语法树的智能合约重入漏洞检测方法 | |
CN115906092A (zh) | 一种跨合约检测智能合约漏洞的符号执行方法 | |
CN116720192A (zh) | 一种面向mips架构基于混合分析技术的漏洞检测方法 | |
US20220058260A1 (en) | Binary image stack cookie protection | |
CN112506564B (zh) | 一种用于建立控制流图的方法、系统和介质 | |
Brito et al. | Study of JavaScript Static Analysis Tools for Vulnerability Detection in Node. js Packages | |
Khodayari et al. | It’s (dom) clobbering time: Attack techniques, prevalence, and defenses | |
Wang et al. | Tunter: assessing exploitability of vulnerabilities with taint-guided exploitable states exploration | |
CN117331826A (zh) | 一种针对挖掘安全漏洞的混合模糊测试优化方法 | |
CN113849817B (zh) | 一种JavaScript原型链污染漏洞的检测方法及装置 | |
CN113626823B (zh) | 一种基于可达性分析的组件间交互威胁检测方法及装置 | |
CN113553593B (zh) | 基于语义分析的物联网固件内核漏洞挖掘方法及系统 | |
US20210271762A1 (en) | Method and device for symbolic analysis of a software program | |
Hauzar et al. | On security analysis of PHP web applications | |
CN111753295B (zh) | 一种基于漏洞利用程序特征的漏洞利用程序检测方法 | |
Jiang et al. | An exploitability analysis technique for binary vulnerability based on automatic exception suppression |
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 |