CN108052825A - 针对二进制可执行文件的模糊测试与符号执行相结合的漏洞检测系统 - Google Patents
针对二进制可执行文件的模糊测试与符号执行相结合的漏洞检测系统 Download PDFInfo
- Publication number
- CN108052825A CN108052825A CN201711498625.5A CN201711498625A CN108052825A CN 108052825 A CN108052825 A CN 108052825A CN 201711498625 A CN201711498625 A CN 201711498625A CN 108052825 A CN108052825 A CN 108052825A
- Authority
- CN
- China
- Prior art keywords
- semiology analysis
- input
- module
- path
- fuzzy device
- 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
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/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/3688—Test management for test execution, e.g. scheduling of test suites
-
- 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 Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Abstract
针对二进制可执行文件的模糊测试与符号执行相结合的漏洞检测系统,属于计算机漏洞检测软件开发技术。为了在二进制文件漏洞检测场景中加强检测的深度、提高检测效率。包括经优化设计的模糊器模块、经优化设计的符号执行模块和模糊器跳转符号调度执行模块,引用入缓存探索器和任务协作模块。本发明将模糊测试与符号执行的优势结合在一起进行二进制执行文件漏洞的检测。本发明系统进行了评估实验,采用DARPA网络大挑战的资格赛提供的应用程序作为数据集,设置了对单独模糊测试、单独符号执行、以及本发明实现的漏洞挖掘系统三个对象的对比实验,本发明效果显著,加速了二进制程序隔间的探索,大大加速了漏洞挖掘系统的运行速度。
Description
技术领域
本发明涉及一种模糊测试与符号执行相结合的漏洞检测系统,属于计算机漏洞检测软件开发技术。
背景技术
随着计算机科学技术和互联网技术飞速发展,软件安全问题层出不穷,软件安全一直备受关注。在软件安全性测试领域,模糊测试和符号执行是两种使用较为广泛的测试方法。
模糊测试最初是作为测试UNIX系统程序的几个工具之一引入的。已广泛用于黑盒测试,但是缺乏指导,基于先前输入的随机突变产生新的输入,不能控制应用中的某条路径被指向。而动态符号执行解释应用程序,使用符号变量的模拟用户输入,跟踪条件跳转产生的约束,并使用约束求解器创建输入以及驱动程序代码按特定路径向下执行。然而条件分支依赖于符号值,则通常满足已采用和未采用条件。因此执行状态必须分叉,而且必须探索两条路径。这快速导致了众所周知的路径爆炸问题。由于现有技术具有的一些瓶颈问题,现代自动化分析技术产生的大多数用来触发缺陷的输入仅能表现软件中的浅层错误。
现有技术中没有提出能结合模糊测试和符号执行两种方法优势的一种二进制执行文件漏洞检测技术。现有技术中的检测方存在检测深度不够、检测效率低的问题。
发明内容
本发明的目的是提供一种针对二进制可执行文件的模糊测试与符号执行相结合的漏洞检测系统,以在二进制文件漏洞检测场景中加强检测的深度、提高检测效率。
本发明为解决上述技术问题采取的技术方案是:
一种针对二进制可执行文件的模糊测试与符号执行相结合的漏洞检测系统,所述漏洞检测系统包括:
一、经优化设计的模糊器模块,包括:
数据生成模块:功能为产生随机输入数据,以便用于探索程序执行路径,可根据配置的协议格式生产指定格式的数据;
数据输入执行模块:读取测试数据构造模块生成的数据,输入到目标二进制程序中,使用不同输入不断重复执行二进制程序;
漏洞产生监控模块:监控二进制程序执行不同输入数据后,是否发现指定的signal产生异常情况;
误报自动分析模块:定位漏洞产生监控模块发现的漏洞,并对发现的缺陷进行分析是否为可利用的有价值的缺陷;
挖掘结果记录模块:将程序中可能存在软件漏洞的执行序列记录生成日志文件并输出,自动去除重复的记录;
二、经优化设计的符号执行模块,包括
符号执行的条件约束模块,符号执行的条件约束模块用于确保经优化设计的符号执行模块的输出结果与经优化设计的模糊器模块的输出结果一致,同时保持发现新的状态转换的能力;
符号执行路径查找模块,用于增加符号执行引擎的可伸缩性;
三、模糊器跳转符号调度执行模块,包括
模糊器与符号执行的跳转模块,用于弥补模糊测试的根本弱点,通过符号执行的力量来确定通过复杂检查所需的特定输入;当经优化设计的模糊器模块的参数达到预定值(与输入长度成正比)而没有识别新的状态转换时,检查在当前分区中认为“感兴趣”的输入后调用符号执行引擎;
缓存探索器,用于减少昂贵的符号引擎调用的次数以发现更多的状态转换,直接位于新发现的状态转换之后;所述缓存探索器探索状态转换的周围区域,直到探索器遍历配置数量的基本块;探索达到了预定数量后,符号执行就会为探索器发现的所有路径确定输入;
任务协作模块,用于数据流转移;符号执行若找到新的可驱动程序继续执行的输入,会将输入publish到监听进程监听的redis管道中;监听到新的输入数据时,监听进程将会把输入数据写入到输入队列目录的新建文件中;之后,模糊器读取到新建的输入文件后,继续执行模糊测试,直到再次卡住。
进一步地,针对所述符号执行的条件约束模块,
在将约束条件输入到符号执行的条件约束模块的求解器并生成新数据之前,对约束条件进行的优化,包括:
1)约束条件插桩缓存:中间代码中插入的辅助插桩程序对之前已经缓存过的约束不再重复生成;
2)约束条件简化:在路径约束进行求解时,进行以下两个方面处理:
a)剪枝无关约束:假设所有变量的关键属性不为规定值,即相关的污点属性都不包含有关键输入,则可以去除当前约束条件;
b)具化变量:在剩下的约束条件中,对关键属性不包含关键输入的无关变量,使用二进制程序实际执行时得到的具体数值进行变换,简化生成的路径约束条件;
优化之后生成的路径约束条件将输入到求解器进行约束求解,假如得不到结果即可认为该路径对应的隔间不能到达;假设该路径约束条件可以得到可行解,则将求解器得到的输入数据加入到目标队列中,模糊器将从队列中得到输入执行,或者符号执行也会从队列中进行选择,作为下一个输入数据继续执行。
进一步地,所述符号执行路径查找模块,其主要执行流程如下:
1)检查redis中该二进制的已跟踪集合中是否已经包含当前输入;
2)将当前输入写入该二进制文件redis已跟踪集合中;
3)初始化符号执行跟踪引擎;
4)设置输入具化参数,包括内存阈值、寄存器阈值;
5)更新已经过的路径;
6)当下一分支的active数量大于0且基本块数量小于路径数,执行以下操作:
a)检查redis中该二进制的已完成集合中是否包含该输入;
b)对于每条丢失路径,通过下式
hit=bool(ord(bitmap[cur∧prev])∧0xff)判断当前地址与丢失分支的最后一个跟踪地址(符号执行前一个跟踪到的地址)是否未相遇;未相遇则执行c);
hit表示当前地址与丢失分支的最后一个跟踪地址(符号执行前一个跟踪到的地址)是否未相遇
bool表示布尔运算,bitmap表示配置文件,cur表示当前地址,prev表示上一次地置,0xff表示16进制常量;
c)移除该路径的预约束;
d)当前转移与缓存探索器发现的转移都写回到redis。
进一步地,在所述模糊器与符号执行的跳转模块中,所述“感兴趣”的输入的识别条件为:
其中如果输入满足以下两个条件之一,则模糊器将其识别为感兴趣:
1)使应用程序采取的路径,触发了状态转换;
2)使应用程序采取的路径,放置到了唯一的“循环桶”。
进一步地,在所述模糊器与符号执行的跳转模块中,
采用celery分布式任务队列进行任务分发与管理,其中分发队列采用rabittmq消息队列,任务完成或中断时采用redis存储任务状态,恢复后可继续执行;
模糊器与符号执行的跳转模块包含两个任务队列:
1)模糊器(fuzz)接收二进制文件路径作为参数,输入为默认初始化或从文件读入,并初始化模糊器,开启监听进程监听符号执行产生的新输入;循环检查模糊器,当没有发现崩溃也没有超时,检查fuzzer_stats文件中的pending_favs属性,为0时表示模糊器卡住,将任务交给符号执行处理;当发现崩溃,将崩溃信息写入redis,并撤销仍在执行的符号执行任务;
2)符号执行(concolic)读取模糊器输出目录中的fuzz_bitmap文件,并写入redis;对于fuzzer输出目录中的每一个未被跟踪过的输入文件,读取redis中的模糊器bitmap,并开启符号执行引擎。
进一步地,所述缓存探索器,还用于防止模糊器在接受符号执行生成的输入后被卡住;缓存探索器在确定当前转移后执行,接收参数为当前发现的路径,并将当前路径周围区域的转移同时写回redis。
进一步地,在所述任务协作模块中,模糊器任务产生的输出记录到日志文件fuzzer-out.log,符号执行任务产生的输出记录到日志文件concolic-out.log;监听进程、模糊器、符号执行协同工作。
本发明的有益效果是:
本发明在二进制文件漏洞检测场景中结合两种分析技术(模糊测试与符号执行相结合),加强检测的深度以及提高检测效率。本发明是一种将模糊测试与符号执行的优势结合在一起的二进制执行文件漏洞检测方法。本发明采用的基于代的路径空间探索,约束条件导致生成的两种不同约束路径在取反之前都是一样的,不同点仅为是否取反,为了方式在符号执行的流程中对相同约束条件进行重复的采集,本发明由于采用了约束条件插桩缓存技术,使中间代码中辅助插桩程序对之前已经缓存过的约束不再重复生成。这加速了二进制程序隔间的探索,大大加速了漏洞挖掘系统的运行速度。
对本发明提出的技术所实现的系统进行了评估实验,采用DARPA网络大挑战(CGC)的资格赛提供的126个应用程序作为数据集,设置了对单独模糊测试、单独符号执行、以及本发明实现的漏洞挖掘系统三个对象的对比实验,本发明系统能够识别77个独特应用程序中的崩溃,与基础实验的并集(71个漏洞)相比,改善了6个崩溃(8.45%)。
附图说明
图1是模糊器的结构框图;
图2是模糊器引擎初始化流程图,其中定义的变量如下:
binary_path:二进制文件路径
work_dir:工作路径
seeds:随机生成的输入
afl_count:导致崩溃的输入数量
time_limit:超时时间
scaling_governor:CPU频率
binary_id:二进制待分析文件id
in_dir:输入路径
out_dir:输出路径
core_pattern:内核模式
AFL_PATH:AFL环境变量;
图3是系统中符号执行查找新路径流程图,其中定义的变量如下:
prev_addr:上一次的路径;
图4是符号执行缓存探索器的执行流程图,其中定义的变量如下:
step:步骤数
group:周围路径
active:活跃参数;
图5是系统任务管理中模糊器到符号执行的内部工作流程图,其中定义的变量如下:
CRASH_CHECK_INTERVAL:查找崩溃间隔
pending_favs:未处理属性;
图6是监听进程、模糊器、符号执行协同工作时序框图,其中定义的变量如下:
queue_dir:查询路径。
具体实施方式
结合图1至图6,本实施方式对所述的二进制可执行文件的模糊测试与符号执行相结合的漏洞检测系统的实现进行如下描述:
一、模糊器模块的优化设计
经优化设计的模糊器模块具有以下特点:
1)能够自动生成自定义的输入数据,并对程序的异常情况进行监控;
2)无论在有源码还是无源码的情况下,系统都可以对软件的异常情况进行监控,尽量多的发现使系统发生崩溃的缺陷;
3)能够对程序的崩溃进行及时的定位和记录。
根据模糊器的优化目标,即模块之间的独立性和扩展性,优化的模糊器主要包含五个模块:数据生成,数据输入执行,漏洞产生监控,误报自动分析,挖掘结果记录。如图1所示。
模糊器的各个模块描述如下:
1)数据生成模块。功能为产生随机数据,以便用于探索系统,可以根据配置的协议格式生产指定格式的数据。
2)数据输入执行模块。读取测试数据构造模块生成的数据,输入到目标二进制程序中,使用不同输入不断重复执行二进制程序。
3)漏洞产生监控模块。监控二进制程序执行不同输入数据后,是否发现指定的signal产生异常情况。
4)误报自动分析模块。定位漏洞产生监控模块发现的漏洞,并对发现的缺陷进行分析是否为可利用的有价值的缺陷。
5)挖掘结果记录模块。将程序中可能存在软件漏洞的执行序列记录生成日志文件并输出,自动去除重复的记录
为了加快模糊器执行的速度,采用了并行执行模式,引擎初始化流程如图2所示。
二、符号执行模块的优化设计
符号存储器的优化增加了符号执行引擎的可伸缩性,但是可能导致不完整的状态空间,导致产生较少可能的解决方案。然而对实际的二进制文件进行分析时,这是一个必然要做出的平衡。
在大多数情况下,模糊测试单独就可以充分地探索大部分路径,只要简单地通过随机的位翻转和其他突变策略就可以找到它们。由于模糊器基于原生代码执行,在大多数情况下,它的性能优于符号执行。因此,大多数探索工作交给了模糊器,这将快速地找到许多路径,符号执行引擎只是去解决更困难的约束。符号执行模块调用查找新路径方法调用引擎,若找到可以通过检查的输入,它将返回二进制文件可执行的下一步路径集合,否则返回空集合。其主要执行流程如下(如图3所示):
1)检查redis中该二进制的已跟踪集合中是否已经包含当前输入;
2)将当前输入写入该二进制文件redis已跟踪集合中;
3)初始化符号执行跟踪引擎;
4)设置输入具化参数,包括内存阈值、寄存器阈值等等;
5)更新已经过的路径;
6)当下一分支的active数量大于0且基本块数量小于路径数,执行以下操作:
a)检查redis中该二进制的已完成集合中是否包含该输入;
b)对于每条丢失路径,如果当前地址与该路径最后跟踪地址未相遇,
c)移除该路径的预约束;
d)当前转移与缓存探索器发现的转移都写回到redis。
符号执行的约束条件优化
系统使用预约束控制以确保符号执行引擎的结果与模糊器结果相同,同时保持发现新的状态转换的能力。在预约束执行中,输入的每个字节被约束与模糊器输出的每个实际字节匹配,例如/dev/stdin[0]=='A'。当发现新的可能的基本块转换时,暂时地去除预约束,允许系统求解偏离该状态转换的输入。预约束对于在符号执行引擎中生成相同的轨迹是必要的。
路径空间探索算法解释了以当前程序执行状态的约束为起始状态,得到新的约束条件的执行流程,但是这些刚刚得到的约束条件并不能立即放到求解器中进行约束求解,本发明描述了在将约束条件输入到求解器并生成新数据之前,对约束条件进行的优化,主要内容主要包括以下两方面:
1)约束条件插桩缓存
本发明采用的基于代的路径空间探索,约束条件导致生成的两种不同约束路径在取反之前都是一样的,不同点仅为是否取反,为了方式在符号执行的流程中对相同约束条件进行重复的采集,本系统采用了约束条件插桩缓存的方式,中间代码中插入的辅助插桩程序对之前已经缓存过的约束不再重复生成。这加速了二进制程序隔间的探索,大大加速了漏洞挖掘系统的运行速度。
2)约束条件简化
本系统采用的基于代的路径空间探索,约束条件导致生成的两种不同约束路径在取反之前都是一样的,不同点仅为是否取反。在如上过程执行当中,只有部分关键输入发生了替换,导致二进制可执行程序运行时导向不同隔间。所以在路径约束进行求解时,只考虑影响当前约束条件、会导致路径变异的关键输入即可。
对以上输入进行简化约束条件的时候,关注输入处理主要为以下两个方面:
a)剪枝无关约束:假设所有变量的关键属性不为规定值,即相关的污点属性都不包含有关键输入,则可以去除当前约束条件。
b)具化变量:在剩下的约束条件中,对关键属性不包含关键输入的无关变量,使用二进制程序实际执行时得到的具体数值进行变换,以此来简化生成的路径约束条件。
优化之后生成的路径约束条件将输入到求解器进行约束求解,假如得不到结果我们即可认为该路径对应的隔间不能到达;假设该路径约束条件可以得到可行解,则将求解器得到的输入数据加入到目标队列中,模糊器将从队列中得到输入执行,或者符号执行也会从队列中进行选择,作为下一个输入数据继续执行。
三、模糊器跳转符号调度执行模块
符号执行中的地址转换
其中符号执行继续模糊器探索到的地址进行探索,依靠模糊器传递来的输入来实现。每次继续探索之前会判断当前地址与丢失分支的最后一个跟踪地址(符号执行前一个跟踪到的地址)是否相遇,依靠bitmap实现。alf-fuzz将会每分钟将当前内存执行状态写入到fuzz_bitmap文件中。
判断当前地址与前一地址是否相遇的公式如式(2-1):
hit=bool(ord(bitmap[cur∧prev])∧0xff)(2-1)
地址转换到bitmap中位置下标的过程如下:
(1)loc=addr
(2)loc=(loc>>4)^(loc<<8)
(3)loc=loc&(bitmap_size-1)
(4)loc=loc>>1
引入缓存探索器
为了减少昂贵的符号引擎调用的次数,系统还引入了一个缓存探索器,以发现更多的状态转换,直接位于新发现的状态转换之后。这个缓存探索器探索状态转换的周围区域,直到探索器遍历配置数量(系统默认配置为1024)的基本块。探索达到了预定数量后,符号执行就会为探索器发现的所有路径确定输入。
往往一个状态转换后很快就有另一个状态转换,这将导致模糊器立即卡住,并转到符号执行,这将导致系统性能大大降低。引入了缓存探索器可以防止模糊器在接受符号执行生成的输入后被卡住。缓存探索器在确定当前转移后执行,接收参数为当前发现的路径,并将当前路径周围区域的转移同时写回redis。缓存探索器的执行流程如图4所示:
模糊器到符号执行过程
漏洞发现系统旨在弥补模糊测试的根本弱点,通过符号执行的力量来确定通过复杂检查所需的特定输入。当模糊组件经过预定值(与输入长度成正比)而没有识别新的状态转换时,认为它“卡住”。然后,检查在当前分区中认为“感兴趣”的输入,并在它们上调用符号执行引擎。
其中如果输入满足以下两个条件之一,则模糊器将其识别为感兴趣:
1)使应用程序采取的路径,触发了状态转换。
2)使应用程序采取的路径,放置到了唯一的“循环桶”。
漏洞发现系统中,AFL执行的进度可以在fuzzer_stats文件中找到的“pending_favs”属性确定,其表示等待执行模糊测试的感兴趣路径。当该属性为0时,调用符号执行。
本发明采用celery分布式任务队列进行任务分发与管理,其中分发队列采用rabittmq消息队列,任务完成或中断时采用redis存储任务状态,恢复后可继续执行。包含两个任务队列:
1)模糊器(fuzz)接收二进制文件路径作为参数,输入为默认初始化或从文件读入,并初始化模糊器,开启监听进程监听符号执行产生的新输入。循环检查模糊器,当没有发现崩溃也没有超时,检查fuzzer_stats文件中的pending_favs属性,为0时表示模糊器卡住,将任务交给符号执行处理。当发现崩溃,将崩溃信息写入redis,并撤销仍在执行的符号执行任务。
2)符号执行(concolic)读取模糊器输出目录中的fuzz_bitmap文件,并写入redis。对于fuzzer输出目录中的每一个未被跟踪过的输入文件,读取redis中的模糊器bitmap并开启符号执行引擎。\模糊器到符号执行的内部工作流程图如图5所示:
任务协作中的数据流转移
监听进程接收两个参数:redis管道、输出队列目录,其功能为监听redis管道,符号执行若找到新的可驱动程序继续执行的输入,会将输入publish到该管道中。监听到新的输入数据时,监听进程将会把输入数据写入到输入队列目录的新建文件中。之后,模糊器读取到新建的输入文件后,继续执行模糊测试,直到再次卡住。
其中模糊器任务产生的输出记录到日志文件fuzzer-out.log,符号执行任务产生的输出记录到日志文件concolic-out.log。监听进程、模糊器、符号执行协同工作的控制流转移时序图如图6所示:
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,根据本发明的技术方案及其发明构思加以等同替换或改变,都应涵盖在本发明的保护范围之内。
Claims (7)
1.一种针对二进制可执行文件的模糊测试与符号执行相结合的漏洞检测系统,其特征在于:所述漏洞检测系统包括:
一、经优化设计的模糊器模块,包括:
数据生成模块:功能为产生随机输入数据,以便用于探索程序执行路径,可根据配置的协议格式生产指定格式的数据;
数据输入执行模块:读取测试数据构造模块生成的数据,输入到目标二进制程序中,使用不同输入不断重复执行二进制程序;
漏洞产生监控模块:监控二进制程序执行不同输入数据后,是否发现指定的signal产生异常情况;
误报自动分析模块:定位漏洞产生监控模块发现的漏洞,并对发现的缺陷进行分析是否为可利用的有价值的缺陷;
挖掘结果记录模块:将程序中可能存在软件漏洞的执行序列记录生成日志文件并输出,自动去除重复的记录;
二、经优化设计的符号执行模块,包括
符号执行的条件约束模块,符号执行的条件约束模块用于确保经优化设计的符号执行模块的输出结果与经优化设计的模糊器模块的输出结果一致,同时保持发现新的状态转换的能力;
符号执行路径查找模块,用于增加符号执行引擎的可伸缩性;
三、模糊器跳转符号调度执行模块,包括
模糊器与符号执行的跳转模块,用于弥补模糊测试的根本弱点,通过符号执行的力量来确定通过复杂检查所需的特定输入;当经优化设计的模糊器模块的参数达到预定值而没有识别新的状态转换时,检查在当前分区中认为“感兴趣”的输入后调用符号执行引擎;
缓存探索器,用于减少昂贵的符号引擎调用的次数以发现更多的状态转换,直接位于新发现的状态转换之后;所述缓存探索器探索状态转换的周围区域,直到探索器遍历配置数量的基本块;探索达到了预定数量后,符号执行就会为探索器发现的所有路径确定输入;
任务协作模块,用于数据流转移;符号执行若找到新的可驱动程序继续执行的输入,会将输入publish到监听进程监听的redis管道中;监听到新的输入数据时,监听进程将会把输入数据写入到输入队列目录的新建文件中;之后,模糊器读取到新建的输入文件后,继续执行模糊测试,直到再次卡住。
2.根据权利要求1所述的针对二进制可执行文件的模糊测试与符号执行相结合的漏洞检测系统,其特征在于:
针对所述符号执行的条件约束模块,
在将约束条件输入到符号执行的条件约束模块的求解器并生成新数据之前,对约束条件进行的优化,包括:
1)约束条件插桩缓存:中间代码中插入的辅助插桩程序对之前已经缓存过的约束不再重复生成;
2)约束条件简化:在路径约束进行求解时,进行以下两个方面处理:
a)剪枝无关约束:假设所有变量的关键属性不为规定值,即相关的污点属性都不包含有关键输入,则可以去除当前约束条件;
b)具化变量:在剩下的约束条件中,对关键属性不包含关键输入的无关变量,使用二进制程序实际执行时得到的具体数值进行变换,简化生成的路径约束条件;
优化之后生成的路径约束条件将输入到求解器进行约束求解,假如得不到结果即可认为该路径对应的隔间不能到达;假设该路径约束条件可以得到可行解,则将求解器得到的输入数据加入到目标队列中,模糊器将从队列中得到输入执行,或者符号执行也会从队列中进行选择,作为下一个输入数据继续执行。
3.根据权利要求2所述的针对二进制可执行文件的模糊测试与符号执行相结合的漏洞检测系统,其特征在于:
所述符号执行路径查找模块,其主要执行流程如下:
1)检查redis中该二进制的已跟踪集合中是否已经包含当前输入;
2)将当前输入写入该二进制文件redis已跟踪集合中;
3)初始化符号执行跟踪引擎;
4)设置输入具化参数,包括内存阈值、寄存器阈值;
5)更新已经过的路径;
6)当下一分支的active数量大于0且基本块数量小于路径数,执行以下操作:
a)检查redis中该二进制的已完成集合中是否包含该输入;
b)对于每条丢失路径,通过下式
hit=bool(ord(bitmap[cur∧prev])∧0xff)判断当前地址与丢失分支的最后一个跟踪地址是否未相遇;未相遇则执行c);
hit表示当前地址与丢失分支的最后一个跟踪地址是否未相遇
bool表示布尔运算,bitmap表示配置文件,cur表示当前地址,prev表示上一次地置,0xff表示16进制常量;
c)移除该路径的预约束;
d)当前转移与缓存探索器发现的转移都写回到redis。
4.根据权利要求1、2或3所述的针对二进制可执行文件的模糊测试与符号执行相结合的漏洞检测系统,其特征在于:
在所述模糊器与符号执行的跳转模块中,所述“感兴趣”的输入的识别条件为:
其中如果输入满足以下两个条件之一,则模糊器将其识别为感兴趣:
1)使应用程序采取的路径,触发了状态转换;
2)使应用程序采取的路径,放置到了唯一的“循环桶”。
5.根据权利要求4所述的针对二进制可执行文件的模糊测试与符号执行相结合的漏洞检测系统,其特征在于:
在所述模糊器与符号执行的跳转模块中,
采用celery分布式任务队列进行任务分发与管理,其中分发队列采用rabittmq消息队列,任务完成或中断时采用redis存储任务状态,恢复后可继续执行;
模糊器与符号执行的跳转模块包含两个任务队列:
1)模糊器接收二进制文件路径作为参数,输入为默认初始化或从文件读入,并初始化模糊器,开启监听进程监听符号执行产生的新输入;循环检查模糊器,当没有发现崩溃也没有超时,检查fuzzer_stats文件中的pending_favs属性,为0时表示模糊器卡住,将任务交给符号执行处理;当发现崩溃,将崩溃信息写入redis,并撤销仍在执行的符号执行任务;
2)符号执行读取模糊器输出目录中的fuzz_bitmap文件,并写入redis;对于fuzzer输出目录中的每一个未被跟踪过的输入文件,读取redis中的模糊器bitmap,并开启符号执行引擎。
6.根据权利要求5所述的针对二进制可执行文件的模糊测试与符号执行相结合的漏洞检测系统,其特征在于:
所述缓存探索器,还用于防止模糊器在接受符号执行生成的输入后被卡住;缓存探索器在确定当前转移后执行,接收参数为当前发现的路径,并将当前路径周围区域的转移同时写回redis。
7.根据权利要求6所述的针对二进制可执行文件的模糊测试与符号执行相结合的漏洞检测系统,其特征在于:
在所述任务协作模块中,模糊器任务产生的输出记录到日志文件fuzzer-out.log,符号执行任务产生的输出记录到日志文件concolic-out.log;监听进程、模糊器、符号执行协同工作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711498625.5A CN108052825B (zh) | 2017-12-29 | 2017-12-29 | 针对二进制可执行文件的模糊测试与符号执行相结合的漏洞检测系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711498625.5A CN108052825B (zh) | 2017-12-29 | 2017-12-29 | 针对二进制可执行文件的模糊测试与符号执行相结合的漏洞检测系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108052825A true CN108052825A (zh) | 2018-05-18 |
CN108052825B CN108052825B (zh) | 2021-05-07 |
Family
ID=62126026
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711498625.5A Active CN108052825B (zh) | 2017-12-29 | 2017-12-29 | 针对二进制可执行文件的模糊测试与符号执行相结合的漏洞检测系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108052825B (zh) |
Cited By (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108845944A (zh) * | 2018-06-28 | 2018-11-20 | 中国人民解放军国防科技大学 | 一种结合符号执行提高软件模糊测试效率的方法 |
CN109308415A (zh) * | 2018-09-21 | 2019-02-05 | 四川大学 | 一种面向二进制的导向性模糊测试方法与系统 |
CN109739755A (zh) * | 2018-12-27 | 2019-05-10 | 北京理工大学 | 一种基于程序追踪和混合执行的模糊测试系统 |
CN109992507A (zh) * | 2019-03-22 | 2019-07-09 | 北京信息科技大学 | 基于模拟执行的程序模糊测试方法及装置 |
CN110059010A (zh) * | 2019-04-12 | 2019-07-26 | 西北工业大学 | 基于动态符号执行与模糊测试的缓冲区溢出检测方法 |
CN110363003A (zh) * | 2019-07-25 | 2019-10-22 | 哈尔滨工业大学 | 一种基于深度学习的Android病毒静态检测方法 |
JP2019220141A (ja) * | 2018-06-18 | 2019-12-26 | 富士通株式会社 | ソフトウェアバイナリのハイブリッドファズテストのための、分岐網羅によりガイドされる記号実行 |
CN111385281A (zh) * | 2019-12-26 | 2020-07-07 | 中科信息安全共性技术国家工程研究中心有限公司 | 一种基于资源负载均衡的自动化漏洞挖掘系统及方法 |
CN111400165A (zh) * | 2020-02-11 | 2020-07-10 | 中国人民解放军战略支援部队信息工程大学 | 一种基于前向探针的离线符号执行路径搜索方法 |
CN111581106A (zh) * | 2020-05-12 | 2020-08-25 | 全球能源互联网研究院有限公司 | 二进制程序漏洞测试方法、装置及可读存储介质 |
CN111753306A (zh) * | 2020-05-29 | 2020-10-09 | 西安深信科创信息技术有限公司 | 一种智能合约漏洞检测方法、装置、电子设备及存储介质 |
CN111859388A (zh) * | 2020-06-30 | 2020-10-30 | 广州大学 | 一种多层次混合的漏洞自动挖掘方法 |
CN112100050A (zh) * | 2019-06-17 | 2020-12-18 | 百度(美国)有限责任公司 | 用于应用程序的漏洞驱动混合测试系统 |
CN112463581A (zh) * | 2020-08-18 | 2021-03-09 | 清华大学 | 一种对分布式系统进行模糊测试的方法及系统 |
CN112564997A (zh) * | 2020-10-27 | 2021-03-26 | 图灵人工智能研究院(南京)有限公司 | 网络功能的验证方法、开发系统、计算机设备及存储介质 |
CN112631901A (zh) * | 2020-12-16 | 2021-04-09 | 中国科学院信息工程研究所 | 基于妨碍特征的模糊测试工具测试方法及电子装置 |
CN115292206A (zh) * | 2022-10-08 | 2022-11-04 | 西安深信科创信息技术有限公司 | 软件漏洞检测方法、装置、电子设备及存储介质 |
CN115510450A (zh) * | 2022-09-20 | 2022-12-23 | 中国人民解放军国防科技大学 | 一种面向计算机二进制程序的比对依赖识别方法与系统 |
CN116541294A (zh) * | 2023-05-18 | 2023-08-04 | 上海安般信息科技有限公司 | 一种基于符号执行的模糊测试系统及方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101714119B (zh) * | 2009-12-09 | 2011-11-02 | 北京邮电大学 | 基于二进制程序的测试数据生成器和方法 |
CN104598383B (zh) * | 2015-02-06 | 2018-02-09 | 中国科学院软件研究所 | 一种基于模式的动态漏洞挖掘集成系统和方法 |
-
2017
- 2017-12-29 CN CN201711498625.5A patent/CN108052825B/zh active Active
Cited By (36)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP7230572B2 (ja) | 2018-06-18 | 2023-03-01 | 富士通株式会社 | ソフトウェアバイナリのハイブリッドファズテストのための、分岐網羅によりガイドされる記号実行 |
JP2019220141A (ja) * | 2018-06-18 | 2019-12-26 | 富士通株式会社 | ソフトウェアバイナリのハイブリッドファズテストのための、分岐網羅によりガイドされる記号実行 |
CN108845944B (zh) * | 2018-06-28 | 2021-10-15 | 中国人民解放军国防科技大学 | 一种结合符号执行提高软件模糊测试效率的方法 |
CN108845944A (zh) * | 2018-06-28 | 2018-11-20 | 中国人民解放军国防科技大学 | 一种结合符号执行提高软件模糊测试效率的方法 |
CN109308415A (zh) * | 2018-09-21 | 2019-02-05 | 四川大学 | 一种面向二进制的导向性模糊测试方法与系统 |
CN109308415B (zh) * | 2018-09-21 | 2021-11-19 | 四川大学 | 一种面向二进制的导向性模糊测试方法与系统 |
CN109739755A (zh) * | 2018-12-27 | 2019-05-10 | 北京理工大学 | 一种基于程序追踪和混合执行的模糊测试系统 |
CN109739755B (zh) * | 2018-12-27 | 2020-07-10 | 北京理工大学 | 一种基于程序追踪和混合执行的模糊测试系统 |
CN109992507A (zh) * | 2019-03-22 | 2019-07-09 | 北京信息科技大学 | 基于模拟执行的程序模糊测试方法及装置 |
CN109992507B (zh) * | 2019-03-22 | 2022-06-24 | 北京信息科技大学 | 基于模拟执行的程序模糊测试方法及装置 |
CN110059010B (zh) * | 2019-04-12 | 2023-01-31 | 西北工业大学 | 基于动态符号执行与模糊测试的缓冲区溢出检测方法 |
CN110059010A (zh) * | 2019-04-12 | 2019-07-26 | 西北工业大学 | 基于动态符号执行与模糊测试的缓冲区溢出检测方法 |
CN112100050A (zh) * | 2019-06-17 | 2020-12-18 | 百度(美国)有限责任公司 | 用于应用程序的漏洞驱动混合测试系统 |
CN112100050B (zh) * | 2019-06-17 | 2023-12-29 | 百度(美国)有限责任公司 | 用于应用程序的漏洞驱动混合测试系统 |
CN110363003B (zh) * | 2019-07-25 | 2022-08-02 | 哈尔滨工业大学 | 一种基于深度学习的Android病毒静态检测方法 |
CN110363003A (zh) * | 2019-07-25 | 2019-10-22 | 哈尔滨工业大学 | 一种基于深度学习的Android病毒静态检测方法 |
CN111385281B (zh) * | 2019-12-26 | 2022-04-22 | 中科信息安全共性技术国家工程研究中心有限公司 | 一种基于资源负载均衡的自动化漏洞挖掘系统及方法 |
CN111385281A (zh) * | 2019-12-26 | 2020-07-07 | 中科信息安全共性技术国家工程研究中心有限公司 | 一种基于资源负载均衡的自动化漏洞挖掘系统及方法 |
CN111400165A (zh) * | 2020-02-11 | 2020-07-10 | 中国人民解放军战略支援部队信息工程大学 | 一种基于前向探针的离线符号执行路径搜索方法 |
CN111581106A (zh) * | 2020-05-12 | 2020-08-25 | 全球能源互联网研究院有限公司 | 二进制程序漏洞测试方法、装置及可读存储介质 |
CN111581106B (zh) * | 2020-05-12 | 2023-05-23 | 全球能源互联网研究院有限公司 | 二进制程序漏洞测试方法、装置及可读存储介质 |
CN111753306A (zh) * | 2020-05-29 | 2020-10-09 | 西安深信科创信息技术有限公司 | 一种智能合约漏洞检测方法、装置、电子设备及存储介质 |
CN111753306B (zh) * | 2020-05-29 | 2022-08-05 | 西安深信科创信息技术有限公司 | 一种智能合约漏洞检测方法、装置、电子设备及存储介质 |
CN111859388A (zh) * | 2020-06-30 | 2020-10-30 | 广州大学 | 一种多层次混合的漏洞自动挖掘方法 |
CN111859388B (zh) * | 2020-06-30 | 2022-11-01 | 广州大学 | 一种多层次混合的漏洞自动挖掘方法 |
CN112463581B (zh) * | 2020-08-18 | 2021-09-21 | 清华大学 | 一种对分布式系统进行模糊测试的方法及系统 |
CN112463581A (zh) * | 2020-08-18 | 2021-03-09 | 清华大学 | 一种对分布式系统进行模糊测试的方法及系统 |
CN112564997A (zh) * | 2020-10-27 | 2021-03-26 | 图灵人工智能研究院(南京)有限公司 | 网络功能的验证方法、开发系统、计算机设备及存储介质 |
CN112631901A (zh) * | 2020-12-16 | 2021-04-09 | 中国科学院信息工程研究所 | 基于妨碍特征的模糊测试工具测试方法及电子装置 |
CN112631901B (zh) * | 2020-12-16 | 2023-08-08 | 中国科学院信息工程研究所 | 基于妨碍特征的模糊测试工具测试方法及电子装置 |
CN115510450A (zh) * | 2022-09-20 | 2022-12-23 | 中国人民解放军国防科技大学 | 一种面向计算机二进制程序的比对依赖识别方法与系统 |
CN115510450B (zh) * | 2022-09-20 | 2023-08-01 | 中国人民解放军国防科技大学 | 一种面向计算机二进制程序的比对依赖识别方法与系统 |
CN115292206A (zh) * | 2022-10-08 | 2022-11-04 | 西安深信科创信息技术有限公司 | 软件漏洞检测方法、装置、电子设备及存储介质 |
CN115292206B (zh) * | 2022-10-08 | 2023-03-14 | 西安深信科创信息技术有限公司 | 软件漏洞检测方法、装置、电子设备及存储介质 |
CN116541294A (zh) * | 2023-05-18 | 2023-08-04 | 上海安般信息科技有限公司 | 一种基于符号执行的模糊测试系统及方法 |
CN116541294B (zh) * | 2023-05-18 | 2023-11-17 | 上海安般信息科技有限公司 | 一种基于符号执行的模糊测试系统及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN108052825B (zh) | 2021-05-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108052825A (zh) | 针对二进制可执行文件的模糊测试与符号执行相结合的漏洞检测系统 | |
Lakhotia et al. | An empirical investigation into branch coverage for C programs using CUTE and AUSTIN | |
CN111240991B (zh) | 一种抗隐式污点传播的动态污点检测方法及系统 | |
WO2020075335A1 (ja) | 解析機能付与装置、解析機能付与方法及び解析機能付与プログラム | |
Alshmrany et al. | FuSeBMC: An energy-efficient test generator for finding security vulnerabilities in C programs | |
WO2022180702A1 (ja) | 解析機能付与装置、解析機能付与プログラム及び解析機能付与方法 | |
CN111723382A (zh) | 动态Android程序漏洞验证方法和装置 | |
CN108123956A (zh) | 基于Petri网的密码误用漏洞检测方法及系统 | |
Cai et al. | Combine sliced joint graph with graph neural networks for smart contract vulnerability detection | |
CN107193732A (zh) | 一种基于路径比对的校验函数定位方法 | |
CN111831574B (zh) | 回归测试规划方法、装置、计算机系统和介质 | |
CN115906092A (zh) | 一种跨合约检测智能合约漏洞的符号执行方法 | |
Lin et al. | A priority based path searching method for improving hybrid fuzzing | |
CN105487983A (zh) | 基于智能路径引导的敏感点逼近方法 | |
CN112506564B (zh) | 一种用于建立控制流图的方法、系统和介质 | |
CN111625448B (zh) | 协议包生成方法、装置、设备及存储介质 | |
CN106970871A (zh) | 一种外挂程序检测的方法及装置 | |
WO2023067665A1 (ja) | 解析機能付与方法、解析機能付与装置及び解析機能付与プログラム | |
CN109002723B (zh) | 一种分段式符号执行方法 | |
CN113849817B (zh) | 一种JavaScript原型链污染漏洞的检测方法及装置 | |
Wu et al. | Application of MapReduce parallel association mining on IDS in cloud computing environment | |
WO2023067663A1 (ja) | 解析機能付与方法、解析機能付与装置及び解析機能付与プログラム | |
Mandal et al. | Improved topology extraction using discriminative parameter mining of logs | |
Jiang et al. | An exploitability analysis technique for binary vulnerability based on automatic exception suppression | |
WO2023067667A1 (ja) | 解析機能付与方法、解析機能付与装置及び解析機能付与プログラム |
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 |