CN106599695A - 一种基于路径合并的可引导符号执行漏洞检测方法 - Google Patents

一种基于路径合并的可引导符号执行漏洞检测方法 Download PDF

Info

Publication number
CN106599695A
CN106599695A CN201610393789.0A CN201610393789A CN106599695A CN 106599695 A CN106599695 A CN 106599695A CN 201610393789 A CN201610393789 A CN 201610393789A CN 106599695 A CN106599695 A CN 106599695A
Authority
CN
China
Prior art keywords
path
bootable
leak
detection method
entity
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
CN201610393789.0A
Other languages
English (en)
Other versions
CN106599695B (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.)
Nanjing University
Original Assignee
Nanjing University
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 Nanjing University filed Critical Nanjing University
Priority to CN201610393789.0A priority Critical patent/CN106599695B/zh
Publication of CN106599695A publication Critical patent/CN106599695A/zh
Application granted granted Critical
Publication of CN106599695B publication Critical patent/CN106599695B/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/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/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Quality & Reliability (AREA)
  • Computing Systems (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明提供了一种基于路径合并的可引导符号执行漏洞检测方法。所述基于路径合并的可引导符号执行漏洞检测方法包括如下步骤:a、对目标程序进行扫描和解析,获得与漏洞相关的程序控制流,并标记路径合并范围;b、在符号执行过程中,根据获得的所述程序控制流信息对标记的范围进行摘要收集;c、在符号执行过程中,遇到已摘要程序片段,直接重用摘要,从而消除冗余探索,并将与漏洞无关的程序路径剪枝。本发明的有益效果在于:所述基于路径合并的可引导符号执行漏洞检测方法可以消除冗余路径探索,使符号执行的效率、漏洞检测的精度得到提高,从而实现更加精确、高效的漏洞检测。

Description

一种基于路径合并的可引导符号执行漏洞检测方法
技术领域
本发明属于软件工程和信息安全领域,具体地涉及一种基于路径合并的可引导符号执行漏洞检测方法。
背景技术
漏洞是计算机软件中由于程序错误导致的缺陷,可以被攻击者利用从而对计算机或网络产生潜在的危害。随着现代软件工业的发展,软件规模不断扩大,测试阶段在软件生命周期中所占的位置愈发受到重视,而针对漏洞的安全测试所面临的瓶颈却越来越多。所以,高效地发现程序中的潜在漏洞,是目前人们对漏洞检测的主要关注点之一。符号执行作为漏洞检测的一种常用方法,逐渐成为安全测试领域的研究热点。它是可以生产高覆盖率测试用例并且在复杂软件应用中发现深层错误的一种有效技术。符号执行可以在给定的时间内尽可能多的探索程序路径,为每条路径生成具体输入从而验证路径的可达性和安全性。然而符号执行面临着随着程序规模增大而路径呈指数级增长的“路径爆炸”问题,使得符号执行在冗余路径及与漏洞无关的路径上消耗过多的时间及资源,以至漏洞检测的效率和精度受到很大影响。
因此,有必要提供一种可以运用于漏洞检测和代码审计,并自动化地对目标程序执行高效的路径探索,从而更有效的进行漏洞识别、检测与验证的基于路径合并的可引导符号执行漏洞检测方法。
发明内容
本发明的目的在于提供一种可以运用于漏洞检测和代码审计,并自动化地对目标程序执行高效的路径探索,从而更有效的进行漏洞识别、检测与验证的基于路径合并的可引导符号执行漏洞检测方法。
本发明的技术方案如下:一种基于路径合并的可引导符号执行漏洞检测方法包括如下步骤:
a、对目标程序进行扫描和解析,获得与漏洞相关的程序控制流,并标记路径合并范围;
b、在符号执行过程中,根据获得的所述程序控制流信息对标记的范围进行摘要收集;
c、在符号执行过程中,遇到已摘要程序片段,直接重用摘要,从而消除冗余探索,并将与漏洞无关的程序路径剪枝。
优选地,步骤a包括如下步骤:
目标程序解析,对目标程序进行词法分析和语法分析,并生成指令对象;
生成程序控制流程图,对程序指令进行分析生成基本块对象,并根据本方法特定需求在控制流程图生成阶段生成所述程序控制流程图;
敏感指令定位,扫描程序中间表示代码,匹配可能触发漏洞的语句,并以指令行号作为记录标识。
优选地,在步骤b中,将漏洞相关路径和待收集摘要的子块进行标记,并这一路径合并子块称为摘要实体。
优选地,所述步骤b包括如下步骤:
漏洞相关路径标记,依次从多条敏感指令所在基本块开始逆向搜索程序入口,使用DFS算法遍历控制流程图,以程序入口为遍历终点,并将所经过的基本块标记为漏洞相关基本块;
摘要实体标记,在所述执行路径标过程的遍历过程中维护一个栈,使用括号配对算法标记以路径分支点和路径合并点为端点的路径合并子块,并记作所述摘要实体;
摘要收集,在符号执行过程中,进入摘要实体时,在设定的时间或深度上限内搜索所有摘要实体内路径,从而生成作为多条路径合并的摘要。
优选地,在所述摘要收集步骤中,将搜集每条路径的路径约束作为前置条件、以及将路径执行完的符号状态作为后置条件,所述前置条件与所述后置条件作为一条路径的摘要,且所述摘要实体的摘要是所有单条路径摘要的析取。
优选地,所述步骤c包括如下步骤:
摘要重用,对目标程序进行符号执行漏洞检测的过程中,当遇到位于摘要实体内的指令,若该摘要实体并未完成摘要收集,则进入摘要收集阶段,收集完成后直接重用摘要,继续探索目标程序;反之,跳过其内部路径探索的过程,直接重用该部分对应的摘要;
漏洞检测,遇到敏感指令时,判断所述敏感指令是否满足安全约束进行检查。
优选地,在所述漏洞检测步骤中,遇到所述敏感指令时,在Z3求解器中使用收集的路径约束判断是否满足漏洞触发条件。
本发明的有益效果在于:所述基于路径合并的可引导符号执行漏洞检测方法将路径合并技术与启发式搜索技术相结合,能极大减少符号执行探索过程中的探索数量并且剪除与漏洞不相关的路径,使符号执行的效率、漏洞检测的精度得到提高,从而实现更加精确、高效的漏洞检测。
附图说明
图1是本发明实施例提供的基于路径合并的可引导符号执行漏洞检测方法的总体流程图;
图2是本发明实施例提供的基于路径合并的可引导符号执行漏洞检测方法中步骤一的敏感指令定位的流程图;
图3是本发明实施例提供的基于路径合并的可引导符号执行漏洞检测方法的步骤二中执行路径标记的流程图;
图4是本发明实施例提供的基于路径合并的可引导符号执行漏洞检测方法的步骤二中摘要实体标记的流程图;
图5是本发明实施例提供的基于路径合并的可引导符号执行漏洞检测方法的步骤二中摘要收集的流程图;
图6是本发明实施例提供的基于路径合并的可引导符号执行漏洞检测方法的步骤三中摘要重用与可引导的符号执行漏洞检测流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
除非上下文另有特定清楚的描述,本发明中的元件和组件,数量既可以单个的形式存在,也可以多个的形式存在,本发明并不对此进行限定。本发明中的步骤虽然用标号进行了排列,但并不用于限定步骤的先后次序,除非明确说明了步骤的次序或者某步骤的执行需要其他步骤作为基础,否则步骤的相对次序是可以调整的。可以理解,本文中所使用的术语“和/或”涉及且涵盖相关联的所列项目中的一者或一者以上的任何和所有可能的组合。
请参阅图1,是本发明实施例提供的基于路径合并的可引导符号执行漏洞检测方法的总体流程图。本发明实施例提供的基于路径合并的可引导符号执行漏洞检测方法针对类C语言wiz,使用其编译器前端生成中间表示,在中间表示的基础上进行处理;而且,相关配置包括路径搜索深度上限、符号执行时间上限、摘要收集时间上限等。其中,所述基于路径合并的可引导符号执行漏洞检测方法的输出:待测程序的测试用例,可以触发使敏感指令违反安全约束的步骤。
具体地,所述基于路径合并的可引导符号执行漏洞检测方法包括如下步骤:
步骤一、对目标程序进行扫描和解析,获得与漏洞相关的程序控制流,并标记路径合并范围。
具体地,所述步骤一包括如下步骤:
目标程序解析,对目标程序进行词法分析和语法分析,并生成指令对象;
生成程序控制流程图,对程序指令进行分析生成基本块对象,并在控制流程图生成阶段生成所述程序控制流程图;
敏感指令定位,扫描程序中间表示代码,匹配可能触发漏洞的语句,并以指令行号作为记录标识。
需要说明的是,所述基于路径合并的可引导符号执行漏洞检测方法使用到的数据结构有:Instr数组、Label数组、Basic_block结构体、Entity结构体、Condition_pair结构体、Constraints结构体。其中Instr数组为中间表示解析后的指令序列。Label数组表示相应编号的Label对应的Instr数组索引。Basic_block结构体是控制流程图的结点单元——基本块,其中定义了基本块在指令序列中的起始位置与终点位置,同时定义了前驱和后继指针,分别指向控制流程图中该基本块的前驱结点与后继结点。Entity结构体是摘要实体,其中定义了摘要实体的范围以及Condition_pair类型的摘要链表。Constraints结构体为约束链表,存储一条路径的约束。
而且,在步骤一中,以wiz语言中间表示为输入,扫描与解析步骤使用bison与flex对其进行词法分析和语法分析,生成指令序列Instr数组以及用于程序跳转的Label数组。在处理时对指向同一条指令的多个Label,每个都多生成一条空指令,使得控制流程图中的路径合并结点的前驱数量只能为2,这个处理时可以便于实现摘要实体标记的流程。根据配置信息,为待测程序构建控制流程图,并将通过特征匹配获取到的可能触发漏洞的敏感指令映射到控制流程图中的具体位置,用于下一步处理的输入。为了便于执行路径与摘要实体标记阶段的处理,这里的控制流程图为双向图,基本块结点不仅指向其后继结点,也标识了相应前驱结点,并且插入空结点保证每个路径合并结点的前驱数量总为2。
而且,请参阅图2,是本发明实施例提供的基于路径合并的可引导符号执行漏洞检测方法中步骤一的敏感指令定位的流程图。如图2所示,步骤20为起始动作。步骤21与步骤26针对解析得到的指令对象,依次取指令用于匹配:指令号pc初始化为0,每次取指令时pc加一。步骤22判断是否可以结束扫描:判断条件为pc是否指向Instr中最后一条指令。步骤23将指令与预先设定的敏感指令类型进行匹配。若匹配成功,则步骤24将其位置存储于sensitive_loc数组中,步骤25更改对应基本块对象的sensitive标记位为1。步骤27为结束状态。
步骤二、在符号执行过程中,根据获得的所述程序控制流信息依次对标记的范围进行摘要收集。
具体地,在步骤二中,将漏洞相关路径和待收集摘要的子块进行标记,并这一路径合并子块称为摘要实体。而且,所述步骤二包括如下步骤:
执行路径标记,依次从多条敏感指令所在基本块开始逆向搜索程序入口,使用DFS算法遍历控制流程图,以程序入口为遍历终点,并将所经过的基本块标记为漏洞相关基本块;
摘要实体标记,在所述执行路径标过程的遍历过程中维护一个栈,使用括号配对算法标记以路径分支点和路径合并点为端点的路径合并子块,并记作所述摘要实体;
摘要收集,在设定的时间或深度上限内搜索路径,从而生成作为多条路径合并的摘要。
其中,在所述执行路径标记步骤中,以控制流程图和敏感指令定位信息为输入,目的是标记基本块中“漏洞相关”标记位。作为判断该基本块对应路径是否应被剪枝的依据,该标记位初始化为0。另外同时生成Entity对象标记摘要实体的起始基本块与终点基本块。
而且,请参阅图3,是本发明实施例提供的基于路径合并的可引导符号执行漏洞检测方法的步骤二中执行路径标记的流程图。如图3所示,所述流程图灰色背景部分调用图4所述流程。步骤34所对应的灰底结点由第二部分步骤3d~3i的结点构成。路径标记针对CFG图,从敏感基本块开始逆向进行深度优先探索,标记“漏洞相关”基本块。步骤30为起始动作。步骤31和步骤3b根据图2收集的sensitive_loc数组,从最后一个元素向前依次选取敏感指令对应的基本块对象;另外初始化整型变量i为0,在第二部分用作摘要实体的编号。步骤32判断对应基本块的“漏洞相关”标记位是否为0,若为0,则执行步骤33,更改标记位为1;否则执行步骤39,回溯探索剩余基本块。步骤34调用图4所示摘要实体标记流程,判断该基本块是否为摘要实体的起始基本块或终点基本块,并标记,其具体实现由图4详示。步骤35判断当前基本块在CFG图中是否有前驱结点,若有则将当前基本块的“可用前驱数”减一,并指向前驱基本块,从步骤32循环执行。若“可用前驱数”为0则中断当前探索,执行步骤39回溯。步骤39沿CFG的后继指针回溯寻找指向剩余未探索路径的基本块。若找到则执行步骤37,与步骤36类似,“可用前驱数”减一,并指向前驱基本块,随后从步骤32循环执行。若未找到,即以程序入口为起始结点,敏感基本块为终结点的区域被标记完成,则执行步骤3a。步骤3a判断sensitive_loc数组是否已到第一个元素,若还有剩余敏感基本块,则执行步骤3b,取敏感基本块,重新执行步骤32~步骤3a的循环体;反之则执行步骤3c结束。
请参阅图4,是本发明实施例提供的基于路径合并的可引导符号执行漏洞检测方法的步骤二中摘要实体标记的流程图。如图4所示,所述摘要实体标记步骤按照“括号匹配算法”的思路实现。步骤40为起始动作。步骤41建立一个栈用于实现“括号匹配算法”;步骤42判断当前基本块的“可用前驱数”是否为2,若为2则认为当前基本块起始指令为路径合并点,执行步骤43,将i入栈,初始化编号为i的摘要实体Entity对象,将其终点属性指向当前基本块,接着执行步骤3g。步骤44将编号i自减一。步骤45判断当前基本块是否为摘要实体的起点,若是则执行步骤46,弹出栈顶,并将弹出的编号对应的摘要实体的起点指向当前基本块。步骤47为结束状态。
在所述摘要收集步骤中,对所述摘要实体按照预先设定的顺序排序,依次进行符号执行,并将搜集的每条路径的路径约束作为前置条件、以及将路径执行完的符号状态作为后置条件,所述前置条件与所述后置条件的合取作为一条路径的摘要,且所述摘要实体的摘要是所有单条路径摘要的析取。
请参阅图5,是本发明实施例提供的基于路径合并的可引导符号执行漏洞检测方法的步骤二中摘要收集的流程图。在符号执行过程中若进入未完成摘要收集的摘要实体,则按照图5所示的流程图开始摘要收集。摘要收集的过程是在摘要实体范围内进行符号执行,将每条路径的前置条件和后置条件集合作为摘要保存。
具体地,图5中指令的摘要生成用下述公式说明:
②Instr:
③Instr:
④Instr:
⑤Instr:
⑥Instr:
摘要φe是约束求解器支持的命题逻辑范式,表示摘要实体中收集的摘要。φe可以通过图5中步骤5d作为循环终止条件的迭代来计算,每次迭代生成的路径摘要为φp,摘要实体的摘要表示为路径摘要的析取,即φe=∨p∈path(entity)φp。其中φp=preCondition(p)∧postCondition(p)。这里preCondition(p)为路径p可以被执行的最弱命题条件,postCondition(p)是路径p执行后对符号变量的赋值。φp可以从路径p符号执行后得到的路径约束获取。以SIMPIL中的语句(statement)为例,我们来说明摘要的生成。
上述公式表示程序中除了halt以外的所有五类语句生成的摘要。公式①表示摘要由preCondition和postCodition合取构成。公式②到⑥分别为SIMPIL语言的五类语句定义preCondition和postCodition。公式②为赋值语句,公式③为存储语句,其对于该类语句总能达到,故其preCondition为true,而该语句所执行的步骤需要则为对符号变量的约束,故postCondition为var=exp等。公式④所示为无条件跳转语句,它没有任何对符号变量的步骤,故其摘要均为true。公式⑤和公式⑥的语句均可视为条件跳转指令,它们生成的摘要视其条件表达式的取值而定,以公式⑥所示语句为例,当exp0为真时,执行exp1所指向的程序语句;此时该路径只有满足exp0为真才可到达,故其preCondition为exp0;反之当exp0为假时,执行exp2指向语句,此时preCondition为!exp0
摘要收集流程如图5所示,步骤50为起始动作。步骤51初始化路径摘要对象,其中包含前置条件preC、后置条件postC,以及摘要对象所对应的起始位置startno与终点位置endno。另外在对象中维护reg_max_version、stack_max_version、input_max_version数组保障摘要重用时静态单一赋值(SSA)下变量版本号的一致。步骤52将当前选取摘要实体起始指令作为当前指令。步骤53首先判断当前指令指向的区域是否位于摘要实体中,若有则执行步骤54,判断该摘要实体是否完成摘要收集,若未完成,步骤55表示递归调用摘要收集流程,对内嵌摘要实体进行摘要收集;若已完成,步骤56表示将该摘要与当前路径摘要合取相连。步骤57表示跳过被重用的内嵌摘要实体继续收集摘要。步骤58按照公式②③④⑤⑥所示方法对每条指令生成摘要。步骤59将当前指令生成的摘要与当前路径摘要合取相连。步骤5a判断是否到达摘要实体终点,完成一条路径的摘要生成。若没完成则执行步骤5g,获取下一条指令为当前指令,回到步骤53,继续路径探索收集摘要。若已经达到摘要实体终点,则执行步骤5b,将当前收集的路径摘要存入当前Entity对象中摘要对象成员变量。步骤5c回溯寻找未探索完成的条件分支。步骤5d判断摘要实体范围内是否完成探索,判断标准为是否所有分支路径都被探索完成或者探索时间上限、深度上限已经达到,若满足则执行5h,通过引入辅助变量把各条路径摘要的中符号变量的SSA最大版本号保持一致:如变量y在摘要实体中所有摘要的最大版本号为2,而在路径path1中的最大版本号为1,则引入辅助变量y2=y1。接着执行5i将当前指令指向摘要实体起始位置,便于符号执行进行摘要重用。最后执行步骤5j,结束流程。步骤5e对路径摘要以分支指令为界进行截断,用于继续连接新路径摘要。步骤5f获取相应指令为当前指令,执行步骤53,开始新一轮路径摘要生成。
步骤三、在符号执行过程中,遇到已摘要程序片段,直接重用摘要,从而消除冗余探索,并将与漏洞无关的程序路径剪枝。
具体地,所述步骤三包括如下步骤:
摘要重用,对目标程序进行符号执行生成路径约束的过程中,当遇到位于摘要实体内的指令,关闭回溯,跳过其内部路径探索的过程,直接重用该部分对应的摘要;
漏洞检测,遇到敏感指令时,通过判断所述敏感指令是否满足安全约束进行检查。
其中,在所述漏洞检测步骤中,遇到所述敏感指令时,在Z3求解器中使用收集的路径约束判断是否满足漏洞触发条件。
请参阅图6,是本发明实施例提供的基于路径合并的可引导符号执行漏洞检测方法的步骤三中摘要重用与可引导的符号执行漏洞检测流程图。如图6所示,步骤60为起始动作。步骤61与步骤6i均表示按照执行顺序获取当前指令。步骤62判断当前指令是否位于摘要实体中,步骤63判断该摘要实体是否完成摘要收集,若是则重用摘要,步骤65将当前路径约束与摘要以合取相连;若否,则步骤64调用摘要收集流程。步骤66表示符号执行跳过摘要实体部分,指向摘要实体终点指令,并跳过对该终点指令的符号执行。若未遇到摘要实体,正常对指令进行符号执行与漏洞检测。首先,步骤67判断当前指令是否为敏感指令,若是则将当前路径约束与相应安全约束连接,步骤68使用Z3约束求解器判断约束是否满足并生成测试用例,若当前路径约束中包含重用的摘要,在约束求解过程中,只要找出摘要实体的所有摘要中存在一个路径摘要使得当前路径约束满足安全约束,则表示可以触发漏洞,约束满足,这本质上解释了路径合并技术对符号执行应用于漏洞检测时效率的提高。步骤6a判断当前指令是否为赋值指令(var=exp;store(exp0,exp1)等),若是则执行步骤6b符号表达式求值和更新符号变量。步骤6c判断当前指令是否为分支指令,若是则执行步骤6d,对路径分支进行剪枝,将漏洞相关路径存入选择池中。步骤6e判断是否达到程序终点,若未达到则继续符号执行;若达到则执行步骤6f,约束求解生成对应路径的测试用例。步骤6g判断是否可以终止符号执行,若不需,则执行步骤6h。步骤6h根据选择池从分支指令指向的未执行基本块开始新的路径探索与符号执行。符号执行终止条件为选择池是否为空以及是否到达路径深度或时间上限。若可以终止符号执行,则执行步骤6j。
相较于现有技术,本发明提供的基于路径合并的可引导符号执行漏洞检测方法将路径合并技术与启发式搜索技术相结合,能极大减少符号执行探索过程中的探索数量并且剪除与漏洞不相关的路径,在对敏感语句检查时减少不必要约束的求解,使符号执行的效率、漏洞检测的精度得到提高,从而实现更加精确、高效的漏洞检测。
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化囊括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。
此外,应当理解,虽然本说明书按照实施方式加以描述,但并非每个实施方式仅包含一个独立的技术方案,说明书的这种叙述方式仅仅是为清楚起见,本领域技术人员应当将说明书作为一个整体,各实施例中的技术方案也可以经适当组合,形成本领域技术人员可以理解的其他实施方式。

Claims (7)

1.一种基于路径合并的可引导符号执行漏洞检测方法,其特征在于:包括如下步骤:
a、对目标程序进行扫描和解析,获得与漏洞相关的程序控制流,并标记路径合并范围;
b、在符号执行过程中,根据获得的所述程序控制流信息依次对标记的范围进行摘要收集;
c、在符号执行过程中,遇到已摘要程序片段,直接重用摘要,从而消除冗余探索,并将与漏洞无关的程序路径剪枝。
2.根据权利要求1所述的基于路径合并的可引导符号执行漏洞检测方法,其特征在于:步骤a包括如下步骤:
目标程序解析,对目标程序进行词法分析和语法分析,并生成指令对象;
生成程序控制流程图,对程序指令进行分析生成基本块对象,并根据本方法特定需求在控制流程图生成阶段生成所述程序控制流程图;
敏感指令定位,扫描程序中间表示代码,匹配可能触发漏洞的语句,并以指令行号作为记录标识。
3.根据权利要求1所述的基于路径合并的可引导符号执行漏洞检测方法,其特征在于:在步骤b中,将漏洞相关路径和待收集摘要的子块进行标记,并这一路径合并子块称为摘要实体。
4.根据权利要求3所述的基于路径合并的可引导符号执行漏洞检测方法,其特征在于:步骤b包括如下步骤:
漏洞相关路径标记,依次从多条敏感指令所在基本块开始逆向搜索程序入口,使用DFS算法遍历控制流程图,以程序入口为遍历终点,并将所经过的基本块标记为漏洞相关基本块;
摘要实体标记,在所述执行路径标记过程的遍历过程中维护一个辅助栈,使用括号配对算法标记以路径分支点和路径合并点为端点的路径合并子块,并记作所述摘要实体;
摘要收集,在符号执行过程中,进入摘要实体时,在设定的时间或深度上限内搜索所有摘要实体内路径,从而生成作为多条路径合并的摘要。
5.根据权利要求4所述的基于路径合并的可引导符号执行漏洞检测方法,其特征在于:在所述摘要收集步骤中,将搜集每条路径的分支条件约束作为前置条件、以及将路径执行完的符号状态作为后置条件,所述前置条件与所述后置条件作为一条路径的摘要,且所述摘要实体的摘要是所有单条路径摘要的析取。
6.根据权利要求1所述的基于路径合并的可引导符号执行漏洞检测方法,其特征在于:所述步骤c包括如下步骤:
摘要重用,对目标程序进行符号执行漏洞检测的过程中,当遇到位于摘要实体内的指令,若该摘要实体并未完成摘要收集,则进入摘要收集阶段,收集完成后直接重用摘要,继续探索目标程序;反之,跳过其内部路径探索的过程,直接重用该部分对应的摘要;
漏洞检测,遇到敏感指令时,为判断所述敏感指令是否满足安全约束进行检查。
7.根据权利要求6所述的基于路径合并的可引导符号执行漏洞检测方法,其特征在于:在所述漏洞检测步骤中,遇到所述敏感指令时,在Z3求解器中使用收集的路径约束判断是否满足漏洞触发条件。
CN201610393789.0A 2016-06-03 2016-06-03 一种基于路径合并的可引导符号执行漏洞检测方法 Active CN106599695B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610393789.0A CN106599695B (zh) 2016-06-03 2016-06-03 一种基于路径合并的可引导符号执行漏洞检测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610393789.0A CN106599695B (zh) 2016-06-03 2016-06-03 一种基于路径合并的可引导符号执行漏洞检测方法

Publications (2)

Publication Number Publication Date
CN106599695A true CN106599695A (zh) 2017-04-26
CN106599695B CN106599695B (zh) 2019-07-09

Family

ID=58556390

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610393789.0A Active CN106599695B (zh) 2016-06-03 2016-06-03 一种基于路径合并的可引导符号执行漏洞检测方法

Country Status (1)

Country Link
CN (1) CN106599695B (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107315961A (zh) * 2017-07-11 2017-11-03 北京奇虎科技有限公司 程序漏洞检测方法及装置、计算设备、存储介质
CN107748716A (zh) * 2017-09-15 2018-03-02 深圳英飞拓科技股份有限公司 一种程序漏洞的查找方法及终端设备
CN108681672A (zh) * 2018-05-09 2018-10-19 西安电子科技大学 一种基于A-Star的引导型符号执行方法及系统、Android应用程序
CN109873826A (zh) * 2019-02-28 2019-06-11 中国人民解放军战略支援部队信息工程大学 一种基于动态反馈的渗透路径规划算法及系统
CN111222159A (zh) * 2019-12-30 2020-06-02 中国电子科技集团公司第三十研究所 基于图计算技术的云平台数据泄漏路径识别方法
CN112231225A (zh) * 2020-10-30 2021-01-15 中国人民解放军国防科技大学 一种基于数组信息引导的符号执行优化方法及装置
CN115237748A (zh) * 2022-06-01 2022-10-25 北京邮电大学 基于反馈增量驱动的符号执行方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102708045A (zh) * 2012-04-13 2012-10-03 电子科技大学 一种缓解路径爆炸的动态符号执行方法
CN104732152A (zh) * 2015-04-07 2015-06-24 南京大学 基于符号执行路径剪枝的缓冲区溢出漏洞自动检测方法
CN104794401A (zh) * 2015-04-15 2015-07-22 南京大学 一种静态分析辅助的符号执行漏洞检测方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102708045A (zh) * 2012-04-13 2012-10-03 电子科技大学 一种缓解路径爆炸的动态符号执行方法
CN104732152A (zh) * 2015-04-07 2015-06-24 南京大学 基于符号执行路径剪枝的缓冲区溢出漏洞自动检测方法
CN104794401A (zh) * 2015-04-15 2015-07-22 南京大学 一种静态分析辅助的符号执行漏洞检测方法

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107315961A (zh) * 2017-07-11 2017-11-03 北京奇虎科技有限公司 程序漏洞检测方法及装置、计算设备、存储介质
CN107315961B (zh) * 2017-07-11 2020-06-23 北京奇虎科技有限公司 程序漏洞检测方法及装置、计算设备、存储介质
CN107748716A (zh) * 2017-09-15 2018-03-02 深圳英飞拓科技股份有限公司 一种程序漏洞的查找方法及终端设备
CN108681672A (zh) * 2018-05-09 2018-10-19 西安电子科技大学 一种基于A-Star的引导型符号执行方法及系统、Android应用程序
CN109873826A (zh) * 2019-02-28 2019-06-11 中国人民解放军战略支援部队信息工程大学 一种基于动态反馈的渗透路径规划算法及系统
CN109873826B (zh) * 2019-02-28 2022-05-27 中国人民解放军战略支援部队信息工程大学 一种基于动态反馈的渗透路径规划方法及系统
CN111222159A (zh) * 2019-12-30 2020-06-02 中国电子科技集团公司第三十研究所 基于图计算技术的云平台数据泄漏路径识别方法
CN111222159B (zh) * 2019-12-30 2022-07-05 中国电子科技集团公司第三十研究所 基于图计算技术的云平台数据泄漏路径识别方法
CN112231225A (zh) * 2020-10-30 2021-01-15 中国人民解放军国防科技大学 一种基于数组信息引导的符号执行优化方法及装置
CN112231225B (zh) * 2020-10-30 2024-02-27 中国人民解放军国防科技大学 一种基于数组信息引导的符号执行优化方法及装置
CN115237748A (zh) * 2022-06-01 2022-10-25 北京邮电大学 基于反馈增量驱动的符号执行方法
CN115237748B (zh) * 2022-06-01 2023-07-04 北京邮电大学 基于反馈增量驱动的符号执行方法

Also Published As

Publication number Publication date
CN106599695B (zh) 2019-07-09

Similar Documents

Publication Publication Date Title
CN106599695A (zh) 一种基于路径合并的可引导符号执行漏洞检测方法
US10289541B2 (en) Source code flow analysis using information retrieval
KR101981028B1 (ko) 바이너리 기반 보안 취약점 탐색 시스템, 그 방법 및 프로그램
CN104487941B (zh) 在向量处理过程中控制处理数据元素的顺序
CN109426722A (zh) Sql注入缺陷检测方法、系统、设备及存储介质
CN104636256A (zh) 一种内存访问异常的检测方法及装置
CN109491918A (zh) 一种汇编冗余指令的检测方法及装置
CN113326187B (zh) 数据驱动的内存泄漏智能化检测方法及系统
CN105159828B (zh) 源代码级的上下文敏感性检测方法
CN105487983B (zh) 基于智能路径引导的敏感点逼近方法
CN102073825B (zh) 基于路径驱动的可执行程序安全性检测方法
D’Souza et al. Collective intelligence for smarter API recommendations in python
CN102156634B (zh) 一种实现值关联间接跳转预测的方法
CN107247668A (zh) 代码自动检测和校正方法
CN112199115A (zh) 基于特征相似度匹配的跨Java字节码和源代码行关联方法
CN106649218A (zh) 一种基于SimHash算法的二进制文件快速比较方法
Saumya et al. Xstressor: Automatic generation of large-scale worst-case test inputs by inferring path conditions
Boigelot et al. Counting the solutions of Presburger equations without enumerating them
CN107168881A (zh) 代码异常定位与处理方法
CN102708054A (zh) 二进制程序循环写内存安全漏洞的检测方法
Gao et al. LLSPLAT: improving concolic testing by bounded model checking
Saifullah et al. Exploring type inference techniques of dynamically typed languages
Chen et al. Baton: symphony of random testing and concolic testing through machine learning and taint analysis
CN109002716A (zh) 一种移动应用的恶意代码入侵检测与防范方法
CN110457046B (zh) 混合指令集程序的反汇编方法、装置、存储介质及终端

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant