CN108319858B - 针对不安全函数的数据依赖图构建方法及装置 - Google Patents

针对不安全函数的数据依赖图构建方法及装置 Download PDF

Info

Publication number
CN108319858B
CN108319858B CN201810084140.XA CN201810084140A CN108319858B CN 108319858 B CN108319858 B CN 108319858B CN 201810084140 A CN201810084140 A CN 201810084140A CN 108319858 B CN108319858 B CN 108319858B
Authority
CN
China
Prior art keywords
definition
parameter
function
key
graph
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201810084140.XA
Other languages
English (en)
Other versions
CN108319858A (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.)
Institute of Information Engineering of CAS
Original Assignee
Institute of Information Engineering of CAS
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 Institute of Information Engineering of CAS filed Critical Institute of Information Engineering of CAS
Priority to CN201810084140.XA priority Critical patent/CN108319858B/zh
Publication of CN108319858A publication Critical patent/CN108319858A/zh
Application granted granted Critical
Publication of CN108319858B publication Critical patent/CN108319858B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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
    • 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/034Test or assess a computer or a system

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本发明实施例公开一种针对不安全函数的数据依赖图构建方法及装置,构建出的数据依赖图在用于脆弱性分析时能够提高分析效率。方法包括:S1、采用符号执行技术模拟执行目标设备固件中的二进制程序,在模拟所述二进制程序执行的过程中,将不安全函数作为潜在脆弱点,对所述不安全函数中关键参数之间的关系进行记录,并建立所述二进制程序的函数调用图和控制流图,其中,所述关键参数之间的关系记录在所述控制流图的节点中;S2、基于所述函数调用图、控制流图和关键参数之间的关系,根据参数的“定义‑引用”规则,构建仅与不安全函数中关键参数相关的数据依赖图。

Description

针对不安全函数的数据依赖图构建方法及装置
技术领域
本发明实施例涉及程序静态分析领域,具体涉及一种针对不安全函数的数据依赖图构建方法及装置。
背景技术
近年来,针对各种嵌入式设备的网络攻击事件层出不穷,部分设备被频繁曝出存在漏洞或后门。嵌入式设备的系统通常由一个称作为“固件”的软件组成,与传统软件类似,嵌入式设备固件中也存在安全缺陷或漏洞。由于固件代码具备高权限、漏洞利用代码隐蔽性高、漏洞修复周期长等特点,固件中隐藏的缺陷或漏洞会带来严重的安全隐患。
固件脆弱性分析方法主要分为静态分析和动态分析两类。其中,静态分析方法不需要真实运行程序,适用于自动化、批量化分析,其主要依赖于程序的控制流图、数据依赖图以及函数调用图等。由于在构建数据依赖图的过程中,会对所有的变量建立“定义-引用”关系,但很多变量信息对于脆弱性分析并没有帮助,导致后续进行数据依赖分析时效率较低,同时考虑全部变量也会消耗更多的时间和空间。
发明内容
针对现有技术存在的不足和缺陷,本发明实施例提供一种针对不安全函数的数据依赖图构建方法及装置。
一方面,本发明实施例提出一种针对不安全函数的数据依赖图构建方法,包括:
S1、采用符号执行技术模拟执行目标设备固件中的二进制程序,在模拟所述二进制程序执行的过程中,将不安全函数作为潜在脆弱点,对所述不安全函数中关键参数之间的关系进行记录,并建立所述二进制程序的函数调用图和控制流图,其中,所述关键参数之间的关系记录在所述控制流图的节点中;
S2、基于所述函数调用图、控制流图和关键参数之间的关系,根据参数的“定义-引用”规则,构建仅与不安全函数中关键参数相关的数据依赖图。
另一方面,本发明实施例提出一种针对不安全函数的数据依赖图构建装置,包括:
建立单元,用于采用符号执行技术模拟执行目标设备固件中的二进制程序,在模拟所述二进制程序执行的过程中,将不安全函数作为潜在脆弱点,对所述不安全函数中关键参数之间的关系进行记录,并建立所述二进制程序的函数调用图和控制流图,其中,所述关键参数之间的关系记录在所述控制流图的节点中;
构建单元,用于基于所述函数调用图、控制流图和关键参数之间的关系,根据参数的“定义-引用”规则,构建仅与不安全函数中关键参数相关的数据依赖图。
第三方面,本发明实施例提供一种电子设备,包括:处理器、存储器、总线及存储在存储器上并可在处理器上运行的计算机程序;
其中,所述处理器,存储器通过所述总线完成相互间的通信;
所述处理器执行所述计算机程序时实现上述方法。
第四方面,本发明实施例提供一种非暂态计算机可读存储介质,所述存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述方法。
本发明实施例提供的针对不安全函数的数据依赖图构建方法及装置,采用符号执行技术模拟执行目标设备固件中的二进制程序,在模拟所述二进制程序执行的过程中,将不安全函数作为潜在脆弱点,对所述不安全函数中关键参数之间的关系进行记录,并建立所述二进制程序的函数调用图和控制流图;基于所述函数调用图、控制流图和关键参数之间的关系,根据参数的“定义-引用”规则,构建仅与不安全函数中关键参数相关的数据依赖图,本方案通过构建仅与潜在脆弱点处关键参数相关的数据依赖图,减少了不必要的时间和空间消耗,在判断潜在脆弱点的安全性时,基于该数据依赖图进行回溯,可以快速获取关键参数的大小、来源及约束等信息,从而提高脆弱性分析的效率。
附图说明
图1为本发明针对不安全函数的数据依赖图构建方法一实施例的流程示意图;
图2为本发明针对不安全函数的数据依赖图构建方法另一实施例的流程示意图;
图3为本发明针对不安全函数的数据依赖图构建装置一实施例的结构示意图;
图4为本发明实施例提供的一种电子设备的实体结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明实施例保护的范围。
参看图1,本实施例公开一种针对不安全函数的数据依赖图构建方法,包括:
S1、采用符号执行技术模拟执行目标设备固件中的二进制程序,在模拟所述二进制程序执行的过程中,将不安全函数作为潜在脆弱点,对所述不安全函数中关键参数之间的关系进行记录,并建立所述二进制程序的函数调用图和控制流图,其中,所述关键参数之间的关系记录在所述控制流图的节点中;
本实施例中,步骤S1中针对的目标设备包括但不限于网络摄像头、路由器、智能灯泡、可编程逻辑控制器PLC等物联网智能设备;不安全函数包括用户自定义函数和C/C++中不安全的系统函数,其中针对的系统函数包括但不限于内存分配类函数如malloc/new、内存拷贝类函数如memcpy、字符串处理类函数如strcpy/strcat、字符读取类函数如gets/scanf/sscanf/fscanf、格式化字符串函数如sprintf/snprintf/vsprintf/vsnprintf、以及命令执行类函数如system/execve/popen等。不安全函数中的关键参数包括但不限于函数参数、函数返回值、指向内存地址空间的指针以及全局数据区中的变量等,关键参数之间的关系主要包括参数的定义关系和引用关系。
S2、基于所述函数调用图、控制流图和关键参数之间的关系,根据参数的“定义-引用”规则,构建仅与不安全函数中关键参数相关的数据依赖图。
本发明实施例提供的针对不安全函数的数据依赖图构建方法,采用符号执行技术模拟执行目标设备固件中的二进制程序,在模拟所述二进制程序执行的过程中,将不安全函数作为潜在脆弱点,对所述不安全函数中关键参数之间的关系进行记录,并建立所述二进制程序的函数调用图和控制流图;基于所述函数调用图、控制流图和关键参数之间的关系,根据参数的“定义-引用”规则,构建仅与不安全函数中关键参数相关的数据依赖图,本方案通过构建仅与潜在脆弱点处关键参数相关的数据依赖图,减少了不必要的时间和空间消耗,在判断潜在脆弱点的安全性时,基于该数据依赖图进行回溯,可以快速获取关键参数的大小、来源及约束等信息,从而提高脆弱性分析的效率。
在前述方法实施例的基础上,所述S2,可以包括:
S20、对所述函数调用图进行遍历以获取所述二进制程序中的函数,针对单个函数对其控制流图进行遍历,针对单个函数控制流图中的节点,获取节点中保存的关键参数之间的关系记录,根据参数的“定义-引用”规则,先后在当前函数和全局变量定义列表中查找关键参数定义中引用参数的定义,若查找成功则将关键参数的定义和其引用参数的定义作为节点、其依赖关系作为边添加到数据依赖图中,或者若查找失败则将关键参数的定义作为节点添加到数据依赖图中,同时将该关键参数的定义更新到所有直接调用该当前函数的父函数中;
S21、若判断获知所述节点出度为0,则将该当前函数内对函数参数的定义更新到所有直接调用该当前函数的父函数中,并将该当前函数内对全局变量的定义更新到全局变量定义列表中。
本实施例中,对程序的函数调用图和控制流图进行遍历,采用的遍历方法包括但不限于前序遍历、中序遍历、后序遍历和层次遍历等。
在前述方法实施例的基础上,所述根据参数的“定义-引用”规则,先后在当前函数和全局变量定义列表中查找关键参数定义中引用参数的定义,若查找成功则将关键参数的定义和其引用参数的定义作为节点、其依赖关系作为边添加到数据依赖图中,或者若查找失败则将关键参数的定义作为节点添加到数据依赖图中,同时将该关键参数的定义更新到所有直接调用该当前函数的父函数中,可以包括:
根据关键参数定义中引用参数的类型判断是否需要对引用参数的定义进行查找;
若需要对引用参数的定义进行查找,则根据参数的“定义-引用”规则,在当前函数内查找关键参数定义中引用参数的定义;
若在当前函数内查找到关键参数定义中引用参数的定义,则将关键参数的定义和其引用参数的定义作为节点、其依赖关系作为边添加到数据依赖图中;或者
若在当前函数内未查找到关键参数定义中引用参数的定义,则在全局变量定义列表中查找关键参数定义中引用参数的定义;
若在全局变量定义列表中查找到关键参数定义中引用参数的定义,则将关键参数的定义和其引用参数的定义作为节点、其依赖关系作为边添加到数据依赖图中,或者若在全局变量定义列表中未查找到关键参数定义中引用参数的定义,则将关键参数的定义作为节点添加到数据依赖图中,同时将该关键参数的定义更新到所有直接调用该当前函数的父函数中。
在前述方法实施例的基础上,所述方法还可以包括:
若不需要对引用参数的定义进行查找,则将关键参数的定义作为节点添加到数据依赖图中。
本实施例涉及一种针对不安全函数的数据依赖图构建方法,针对固件中的二进制程序,采用符号执行技术模拟程序执行;将不安全的函数作为潜在脆弱点,在模拟程序执行的过程中,对不安全函数中关键参数之间的关系进行记录,并建立程序的函数调用图和控制流图;对函数调用图和单个函数的控制流图进行遍历,针对控制流图中的节点,获取节点中保存的关键参数关系记录,然后在函数内或全局变量定义列表中查找关键参数定义中引用参数的定义,基于参数间的依赖关系,构建仅与不安全函数中关键参数相关的数据依赖图。
根据图2给出的流程图,本实施例的方法具体包括以下步骤:
步骤1,针对目标设备固件中的二进制程序,采用符号执行技术模拟程序执行;
步骤2,对不安全的函数设置“钩子”,在模拟程序执行的过程中,记录不安全的函数中关键参数之间的关系,同时构建程序的函数调用图和控制流图;
这里,对不安全的函数设置“钩子”,主要用于对函数的参数进行记录,包括参数值、参数类型、及参数大小等信息,以及对函数的返回值进行标记。记录函数参数的结构定义如下,其中,value属性为参数值;flag属性表示参数是栈变量、堆变量、全局变量、立即数或常量字符串等;style属性表示参数是地址、值或数组等;function_name属性表示该函数的名字;size属性表示参数的大小;arg_index属性表示该参数是第几个参数。
Figure BDA0001561905670000071
此外,还需要建立并记录关键参数之间的“定义-引用”关系。“定义-引用”和“引用-定义”常用于数据流分析中,其中对变量的赋值出现称为变量定义,除了定义之外的变量其他出现称为变量引用。以strcpy(arg1,arg2)为例,其实质是对参数arg1进行定义,而arg2为引用的参数,因此可以建立arg1与arg2之间的“定义-引用”关系,记录参数间“定义-引用”关系的结构定义如下。
Figure BDA0001561905670000081
在采用符号执行技术模拟程序运行的过程中,为了提高效率,采用并行分析的方式,即同时对二进制程序中的每个用户自定义函数进行分析。假设存在两个函数sub1()和sub2(),其中在sub1()中调用了sub2(),在对sub1()进行分析时,只会对sub2()的调用进行记录,包括调用sub2()的基本块地址、传参的值以及大小等信息,不会跳转到sub2()继续分析。在完成对sub1()和sub2()的分析后,会根据之前记录的函数调用信息将sub1()和sub2()关联起来,以保证控制流的完整性。
步骤3,按后序方式对函数调用图进行遍历,针对函数调用图中的每个函数,对其控制流图进行层次遍历;
步骤4,针对单个函数控制流图中的节点,获取节点中保存的关键参数关系记录,根据“定义-引用”规则,先后在当前函数和全局变量定义列表中查找关键参数定义中引用参数的定义,若查找成功则将关键参数的定义和其引用参数的定义作为节点、其依赖关系作为边添加到数据依赖图中,然后跳转到步骤6。
这里,在当前函数内针对某个关键参数的定义,如果该定义中引用参数的类型为整数类型,则不对引用参数的定义进行查找。如果该定义中引用参数的类型为堆/栈变量、返回值、函数参数或全局变量,则需要查找引用参数的定义,若引用参数的定义对应的节点为strcmp/strcasecmp等约束函数,则在两个节点之间建立一条约束边,反之则建立一条数据边。在全局变量定义列表中针对某个关键参数的定义查找其引用参数的定义时,如果存在多个对引用参数的定义,则在关键参数定义和每个引用参数的定义之间都建立一条数据边。
步骤5,将该关键参数的定义作为节点添加到数据依赖图中。若在当前函数和全局变量定义列表中均无法找到该定义中引用参数的定义,则还需将该关键参数的定义更新到所有直接调用该函数的父函数中;
步骤6,若当前函数的控制流图中某个节点出度为0,则需要将函数内对函数参数的定义更新到所有直接调用该函数的父函数中,同时将对全局变量的定义更新到全局变量定义列表中;
这里,由于函数内部对函数参数的定义会影响父函数的行为,因此在遍历单个函数控制流图时,如果遇到某个节点出度为0,则进行函数参数定义更新。此外,也需要进行全局变量定义列表更新。
步骤7,若函数控制流图遍历完毕则跳转到步骤8,否则跳转到步骤4;
步骤8,若函数调用图遍历完毕则停止,否则跳转到步骤3。
构建针对不安全函数的数据依赖图的算法伪代码如下,其中,节点表示对关键参数的定义,用结构体def_use_info表示,边表示关键参数之间的引用关系。
Figure BDA0001561905670000091
Figure BDA0001561905670000101
参看图3,本实施例公开一种针对不安全函数的数据依赖图构建装置,包括:
建立单元1,用于采用符号执行技术模拟执行目标设备固件中的二进制程序,在模拟所述二进制程序执行的过程中,将不安全函数作为潜在脆弱点,对所述不安全函数中关键参数之间的关系进行记录,并建立所述二进制程序的函数调用图和控制流图,其中,所述关键参数之间的关系记录在所述控制流图的节点中;
构建单元2,用于基于所述函数调用图、控制流图和关键参数之间的关系,根据参数的“定义-引用”规则,构建仅与不安全函数中关键参数相关的数据依赖图。
具体地,所述建立单元1采用符号执行技术模拟执行目标设备固件中的二进制程序,在模拟所述二进制程序执行的过程中,将不安全函数作为潜在脆弱点,对所述不安全函数中关键参数之间的关系进行记录,并建立所述二进制程序的函数调用图和控制流图,其中,所述关键参数之间的关系记录在所述控制流图的节点中;所述构建单元2基于所述函数调用图、控制流图和关键参数之间的关系,根据参数的“定义-引用”规则,构建仅与不安全函数中关键参数相关的数据依赖图。
本发明实施例提供的针对不安全函数的数据依赖图构建装置,采用符号执行技术模拟执行目标设备固件中的二进制程序,在模拟所述二进制程序执行的过程中,将不安全函数作为潜在脆弱点,对所述不安全函数中关键参数之间的关系进行记录,并建立所述二进制程序的函数调用图和控制流图;基于所述函数调用图、控制流图和关键参数之间的关系,根据参数的“定义-引用”规则,构建仅与不安全函数中关键参数相关的数据依赖图,本方案通过构建仅与潜在脆弱点处关键参数相关的数据依赖图,减少了不必要的时间和空间消耗,在判断潜在脆弱点的安全性时,基于该数据依赖图进行回溯,可以快速获取关键参数的大小、来源及约束等信息,从而提高脆弱性分析的效率。
在前述装置实施例的基础上,所述构建单元,可以包括:
构建子单元,用于对所述函数调用图进行遍历以获取所述二进制程序中的函数,针对单个函数对其控制流图进行遍历,针对单个函数控制流图中的节点,获取节点中保存的关键参数之间的关系记录,根据参数的“定义-引用”规则,先后在当前函数和全局变量定义列表中查找关键参数定义中引用参数的定义,若查找成功则将关键参数的定义和其引用参数的定义作为节点、其依赖关系作为边添加到数据依赖图中,或者若查找失败则将关键参数的定义作为节点添加到数据依赖图中,同时将该关键参数的定义更新到所有直接调用该当前函数的父函数中;
更新子单元,用于若判断获知所述节点出度为0,则将该当前函数内对函数参数的定义更新到所有直接调用该当前函数的父函数中,并将该当前函数内对全局变量的定义更新到全局变量定义列表中。
在前述装置实施例的基础上,所述构建子单元,具体可以用于:
根据关键参数定义中引用参数的类型判断是否需要对引用参数的定义进行查找;
若需要对引用参数的定义进行查找,则根据参数的“定义-引用”规则,在当前函数内查找关键参数定义中引用参数的定义;
若在当前函数内查找到关键参数定义中引用参数的定义,则将关键参数的定义和其引用参数的定义作为节点、其依赖关系作为边添加到数据依赖图中;或者
若在当前函数内未查找到关键参数定义中引用参数的定义,则在全局变量定义列表中查找关键参数定义中引用参数的定义;
若在全局变量定义列表中查找到关键参数定义中引用参数的定义,则将关键参数的定义和其引用参数的定义作为节点、其依赖关系作为边添加到数据依赖图中,或者若在全局变量定义列表中未查找到关键参数定义中引用参数的定义,则将关键参数的定义作为节点添加到数据依赖图中,同时将该关键参数的定义更新到所有直接调用该当前函数的父函数中。
在前述装置实施例的基础上,所述构建子单元,具体还可以用于:
若不需要对引用参数的定义进行查找,则将关键参数的定义作为节点添加到数据依赖图中。
本实施例的针对不安全函数的数据依赖图构建装置,可以用于执行前述方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
图4示出了本发明实施例提供的一种电子设备的实体结构示意图,如图4所示,该电子设备可以包括:处理器11、存储器12、总线13及存储在存储器12上并可在处理器11上运行的计算机程序;
其中,所述处理器11,存储器12通过所述总线13完成相互间的通信;
所述处理器11执行所述计算机程序时实现上述各方法实施例所提供的方法,例如包括:采用符号执行技术模拟执行目标设备固件中的二进制程序,在模拟所述二进制程序执行的过程中,将不安全函数作为潜在脆弱点,对所述不安全函数中关键参数之间的关系进行记录,并建立所述二进制程序的函数调用图和控制流图,其中,所述关键参数之间的关系记录在所述控制流图的节点中;基于所述函数调用图、控制流图和关键参数之间的关系,根据参数的“定义-引用”规则,构建仅与不安全函数中关键参数相关的数据依赖图。
本发明实施例提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例所提供的方法,例如包括:采用符号执行技术模拟执行目标设备固件中的二进制程序,在模拟所述二进制程序执行的过程中,将不安全函数作为潜在脆弱点,对所述不安全函数中关键参数之间的关系进行记录,并建立所述二进制程序的函数调用图和控制流图,其中,所述关键参数之间的关系记录在所述控制流图的节点中;基于所述函数调用图、控制流图和关键参数之间的关系,根据参数的“定义-引用”规则,构建仅与不安全函数中关键参数相关的数据依赖图。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。术语“上”、“下”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。
本发明的说明书中,说明了大量具体细节。然而能够理解的是,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。类似地,应当理解,为了精简本发明公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释呈反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。本发明并不局限于任何单一的方面,也不局限于任何单一的实施例,也不局限于这些方面和/或实施例的任意组合和/或置换。而且,可以单独使用本发明的每个方面和/或实施例或者与一个或更多其他方面和/或其实施例结合使用。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围,其均应涵盖在本发明的权利要求和说明书的范围当中。

Claims (8)

1.一种针对不安全函数的数据依赖图构建方法,其特征在于,包括:
S1,采用符号执行技术模拟执行目标设备固件中的二进制程序,在模拟所述二进制程序执行的过程中,将不安全函数作为潜在脆弱点,对所述不安全函数中关键参数之间的关系进行记录,并建立所述二进制程序的函数调用图和控制流图,其中,所述关键参数之间的关系记录在所述控制流图的节点中;
S2,基于所述函数调用图、控制流图和关键参数之间的关系,根据参数的“定义-引用”规则,构建仅与不安全函数中关键参数相关的数据依赖图;
其中,所述S2,包括:
S20,对所述函数调用图进行遍历以获取所述二进制程序中的函数,针对单个函数对其控制流图进行遍历,针对单个函数控制流图中的节点,获取节点中保存的关键参数之间的关系记录,根据参数的“定义-引用”规则,先后在当前函数和全局变量定义列表中查找关键参数定义中引用参数的定义,若查找成功则将关键参数的定义和其引用参数的定义作为节点、其依赖关系作为边添加到数据依赖图中,或者若查找失败则将关键参数的定义作为节点添加到数据依赖图中,同时将该关键参数的定义更新到所有直接调用该当前函数的父函数中;
S21,若判断获知所述针对单个函数控制流图中的节点出度为0,则将该当前函数内对函数参数的定义更新到所有直接调用该当前函数的父函数中,并将该当前函数内对全局变量的定义更新到全局变量定义列表中。
2.根据权利要求1所述的方法,其特征在于,所述根据参数的“定义-引用”规则,先后在当前函数和全局变量定义列表中查找关键参数定义中引用参数的定义,若查找成功则将关键参数的定义和其引用参数的定义作为节点、其依赖关系作为边添加到数据依赖图中,或者若查找失败则将关键参数的定义作为节点添加到数据依赖图中,同时将该关键参数的定义更新到所有直接调用该当前函数的父函数中,包括:
根据关键参数定义中引用参数的类型判断是否需要对引用参数的定义进行查找;
若需要对引用参数的定义进行查找,则根据参数的“定义-引用”规则,在当前函数内查找关键参数定义中引用参数的定义;
若在当前函数内查找到关键参数定义中引用参数的定义,则将关键参数的定义和其引用参数的定义作为节点、其依赖关系作为边添加到数据依赖图中;或者
若在当前函数内未查找到关键参数定义中引用参数的定义,则在全局变量定义列表中查找关键参数定义中引用参数的定义;
若在全局变量定义列表中查找到关键参数定义中引用参数的定义,则将关键参数的定义和其引用参数的定义作为节点、其依赖关系作为边添加到数据依赖图中,或者若在全局变量定义列表中未查找到关键参数定义中引用参数的定义,则将关键参数的定义作为节点添加到数据依赖图中,同时将该关键参数的定义更新到所有直接调用该当前函数的父函数中。
3.根据权利要求2所述的方法,其特征在于,还包括:
若不需要对引用参数的定义进行查找,则将关键参数的定义作为节点添加到数据依赖图中。
4.一种针对不安全函数的数据依赖图构建装置,其特征在于,包括:
建立单元,用于采用符号执行技术模拟执行目标设备固件中的二进制程序,在模拟所述二进制程序执行的过程中,将不安全函数作为潜在脆弱点,对所述不安全函数中关键参数之间的关系进行记录,并建立所述二进制程序的函数调用图和控制流图,其中,所述关键参数之间的关系记录在所述控制流图的节点中;
构建单元,用于基于所述函数调用图、控制流图和关键参数之间的关系,根据参数的“定义-引用”规则,构建仅与不安全函数中关键参数相关的数据依赖图;
其中,所述构建单元,包括:
构建子单元,用于对所述函数调用图进行遍历以获取所述二进制程序中的函数,针对单个函数对其控制流图进行遍历,针对单个函数控制流图中的节点,获取节点中保存的关键参数之间的关系记录,根据参数的“定义-引用”规则,先后在当前函数和全局变量定义列表中查找关键参数定义中引用参数的定义,若查找成功则将关键参数的定义和其引用参数的定义作为节点、其依赖关系作为边添加到数据依赖图中,或者若查找失败则将关键参数的定义作为节点添加到数据依赖图中,同时将该关键参数的定义更新到所有直接调用该当前函数的父函数中;
更新子单元,用于若判断获知所述针对单个函数控制流图中的节点出度为0,则将该当前函数内对函数参数的定义更新到所有直接调用该当前函数的父函数中,并将该当前函数内对全局变量的定义更新到全局变量定义列表中。
5.根据权利要求4所述的装置,其特征在于,所述构建子单元,具体用于:
根据关键参数定义中引用参数的类型判断是否需要对引用参数的定义进行查找;
若需要对引用参数的定义进行查找,则根据参数的“定义-引用”规则,在当前函数内查找关键参数定义中引用参数的定义;
若在当前函数内查找到关键参数定义中引用参数的定义,则将关键参数的定义和其引用参数的定义作为节点、其依赖关系作为边添加到数据依赖图中;或者
若在当前函数内未查找到关键参数定义中引用参数的定义,则在全局变量定义列表中查找关键参数定义中引用参数的定义;
若在全局变量定义列表中查找到关键参数定义中引用参数的定义,则将关键参数的定义和其引用参数的定义作为节点、其依赖关系作为边添加到数据依赖图中,或者若在全局变量定义列表中未查找到关键参数定义中引用参数的定义,则将关键参数的定义作为节点添加到数据依赖图中,同时将该关键参数的定义更新到所有直接调用该当前函数的父函数中。
6.根据权利要求5所述的装置,其特征在于,所述构建子单元,具体还用于:
若不需要对引用参数的定义进行查找,则将关键参数的定义作为节点添加到数据依赖图中。
7.一种电子设备,其特征在于,包括:处理器、存储器、总线及存储在存储器上并可在处理器上运行的计算机程序;
其中,所述处理器,存储器通过所述总线完成相互间的通信;
所述处理器执行所述计算机程序时实现如权利要求1-3中任一项所述的方法。
8.一种非暂态计算机可读存储介质,其特征在于,所述存储介质上存储有计算机程序,该计算机程序被处理器执行时实现如权利要求1-3中任一项所述的方法。
CN201810084140.XA 2018-01-29 2018-01-29 针对不安全函数的数据依赖图构建方法及装置 Active CN108319858B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810084140.XA CN108319858B (zh) 2018-01-29 2018-01-29 针对不安全函数的数据依赖图构建方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810084140.XA CN108319858B (zh) 2018-01-29 2018-01-29 针对不安全函数的数据依赖图构建方法及装置

Publications (2)

Publication Number Publication Date
CN108319858A CN108319858A (zh) 2018-07-24
CN108319858B true CN108319858B (zh) 2020-07-10

Family

ID=62888044

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810084140.XA Active CN108319858B (zh) 2018-01-29 2018-01-29 针对不安全函数的数据依赖图构建方法及装置

Country Status (1)

Country Link
CN (1) CN108319858B (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110968293A (zh) * 2018-09-30 2020-04-07 北京国双科技有限公司 构建函数前置依赖的方法及相关设备
CN110262803B (zh) * 2019-06-30 2023-04-18 潍柴动力股份有限公司 一种依赖关系的生成方法及装置
CN111008152B (zh) * 2019-12-26 2022-10-11 中国人民解放军国防科技大学 一种基于函数依赖图的内核模块兼容影响域分析方法、系统和介质
CN111291373B (zh) * 2020-02-03 2022-06-14 思客云(北京)软件技术有限公司 用于分析数据污染传播的方法、设备和计算机可读存储介质
CN111488579B (zh) * 2020-03-25 2023-06-02 腾讯科技(深圳)有限公司 漏洞检测方法、装置、电子设备和计算机可读存储介质
CN115150152B (zh) * 2022-06-30 2024-04-26 中国人民解放军陆军工程大学 基于权限依赖图缩减的网络用户实际权限快速推理方法
CN115794120B (zh) * 2023-02-06 2023-07-04 南京邮电大学 一种基于高阶函数的动态程序依赖簇检测方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101241532A (zh) * 2008-02-15 2008-08-13 北京邮电大学 面向源代码的基于不等式组求解的缓冲区溢出检测方法
CN102214141A (zh) * 2011-07-02 2011-10-12 中国矿业大学 基于实时堆栈的程序切片方法
CN102360334A (zh) * 2011-10-17 2012-02-22 中国人民解放军信息工程大学 一种动静态结合的软件安全性测试方法
CN103473400A (zh) * 2013-08-27 2013-12-25 北京航空航天大学 基于层次依赖建模的软件fmea方法
CN103914374A (zh) * 2012-12-31 2014-07-09 梁彬 基于程序切片和频繁模式提取的代码缺陷检测方法及装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9680855B2 (en) * 2014-06-30 2017-06-13 Neo Prime, LLC Probabilistic model for cyber risk forecasting

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101241532A (zh) * 2008-02-15 2008-08-13 北京邮电大学 面向源代码的基于不等式组求解的缓冲区溢出检测方法
CN102214141A (zh) * 2011-07-02 2011-10-12 中国矿业大学 基于实时堆栈的程序切片方法
CN102360334A (zh) * 2011-10-17 2012-02-22 中国人民解放军信息工程大学 一种动静态结合的软件安全性测试方法
CN103914374A (zh) * 2012-12-31 2014-07-09 梁彬 基于程序切片和频繁模式提取的代码缺陷检测方法及装置
CN103473400A (zh) * 2013-08-27 2013-12-25 北京航空航天大学 基于层次依赖建模的软件fmea方法

Also Published As

Publication number Publication date
CN108319858A (zh) 2018-07-24

Similar Documents

Publication Publication Date Title
CN108319858B (zh) 针对不安全函数的数据依赖图构建方法及装置
CN111160749A (zh) 一种情报质量评估和情报融合方法及装置
WO2019047480A1 (zh) 程序更新方法、计算机可读存储介质、终端设备及装置
CN108614702B (zh) 字节码优化方法及装置
CN105335137A (zh) 用于处理源文件的方法和装置
US9483384B2 (en) Generation of software test code
US10572371B2 (en) Generating valid use cases from a parsed configuration file describing use case options
KR102160780B1 (ko) 버그 정정 시스템 및 버그 정정 방법
JP6282217B2 (ja) 不正プログラム対策システムおよび不正プログラム対策方法
CN108694049B (zh) 一种更新软件的方法和设备
EP2107484A2 (en) A method and device for code audit
CN105825137A (zh) 一种确定敏感数据扩散行为的方法及装置
US20140366146A1 (en) Interactive analysis of a security specification
CN117272330B (zh) 服务器系统加固更新方法及系统
CN108196975B (zh) 基于多校验和的数据验证方法、装置及存储介质
CN106529281A (zh) 一种可执行文件处理方法及装置
CN111625448B (zh) 协议包生成方法、装置、设备及存储介质
CN107451002B (zh) 针对修改区块体数据的区块链的主动验证方法及系统
JP7409197B2 (ja) ソフトウェアプログラムにおける静的分析違反の修復パターンの精緻化
CN102982282B (zh) 程序漏洞的检测系统和方法
Alnaeli et al. On the evolution of mobile computing software systems and C/C++ vulnerable code: Empirical investigation
WO2015139646A1 (en) Data processing method and apparatus for unrealscript
CN117009972A (zh) 漏洞检测方法、装置、计算机设备和存储介质
CN114996955A (zh) 一种云原生混沌工程实验的靶场环境构建方法及装置
CN109472138B (zh) 一种检测snort规则冲突的方法、装置和存储介质

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