当前位置:主页>科 研>学术交流>

符号执行技术研究

摘要: 本文首先介绍了符号执行的过程内分析和程序全局分析的基本原理;接着介绍了其中的路径状态空间爆炸、复杂结构语义和操作语义建模及程序全局分析这三个关键技术的难点及相关研究;最后介绍了一些使用符号执行技术开发的研究型工具。本文从基本原理到技术难点,从理论基础到工具,较系统地论述了符号执行技术。
关键词:符号执行 静态分析 源代码安全

Research of Symbolic Execution

Jinbin Lin Xiaofei Zhang Hui Liu

China Information Technology Security Evaluation Center University of Science and Technology of China

Abstract: The first portion of this paper introduces the basic principles of intra-procedural and inter-procedural analysis of symbolic execution. And the second presents the relevant researches of the difficulties of the three critical technologies, which are “Explosion of the state space of Paths”, “Modeling the complex structure-semantic and operation-semantic”, and “inter-procedural analysis”. Final, some tools of research that developed by using the technology of symbolic execution are introduced. This paper systematically presents the symbolic execution range from the basic principles to the technical difficulties and from the theoretical principles to tools.
Key words: Symbolic Execution, Static Analysis, Source code security

一、 简 介
    软件的安全性越来越受到人们的重视,如何检测软件中存在的安全问题也逐渐成为软件工程领域的研究热点。《Software Security》一书的作者Gary McGraw估计,在引发安全问题的错误中,大约有一半是实现时的疏忽、遗漏或误解造成的。基于源代码的静态分析工具是检测软件编码安全问题的一种有效方法。
    静态分析是一种在不执行程序的情况下对代码进行评估的技术,它通过对当前状态及趋势的分析来预判未来所有软件运行可能的情况。源代码静态分析方法涉及的理论包括指称语义、公理化语义、操作语义、抽象解释理论等,常见的实现技术有模型检验、数据流分析、抽象解释、谓词转换、定理证明、类型推导、符号执行等。其中,符号执行是目前源代码静态分析工具常采用的主要技术之一,本文将重点介绍符号执行技术的基本原理、关键技术及发展现状。

二、 符号执行的基本原理
1. 基本原理
    符号执行是指在不执行程序的前提下,用符号值表示程序变量的值,然后模拟程序执行来进行相关分析的技术,它可以分析代码的所有语义信息,也可以只分析部分语义信息(如只分析“内存是否释放”这一部分的语义信息)。
    符号执行分为过程内分析和过程间分析(又称全局分析)。过程内分析是指只对单个过程的代码进行分析,全局分析指对整个软件代码进行上下文敏感的分析。所谓上下文敏感分析是指在当前函数入口点要考虑当前的函数间调用信息和环境信息等。程序的全局分析是在过程内分析的基础上进行的,但过程内分析中包含了函数调用时就也引入了过程间分析,因此两者之间是相对独立又相互依赖的关系。
    过程内分析流程如图1所示。首先,对待分析的单个过程代码对象构建控制流图(Control Flow Graph, CFG)。控制流图(CFG)是编译器内部用有向图表示一个程序过程的一种抽象数据结构,图中的节点表示一个程序基本块,基本块是没有任何跳转的顺序语句代码块,图中的边表示代码中的跳转,它是有向边,起点和终点都是基本块。在CFG上从入口节点开始模拟执行,在遇到分支节点时,使用约束求解器判定哪条分支可行,并根据预先设计的路径调度策略实现对该过程所有路径的遍历分析,最后输出每条可执行路径的分析结果。其中,约束求解是数学上的判定过程,形象地说是对一系列的约束方程进行求解。
    如果要进行源代码的安全性检测,则需要在过程内分析时,根据具体的安全知识库来添加安全约束。例如,如果要添加缓冲区溢出的安全约束,则在执行时遇到对内存进行操作的语句时,就要对该语句所操作的内存对象的边界添加安全约束。以上面的方式来进行安全约束的添加,并且每次在添加之后就使用约束求解器对所有的安全约束进行求解,以判定当前是否可能潜在一个安全问题。
    图 1 过程内分析原理流程图
    程序全局分析流程如图2所示。首先,为整个程序代码构建函数调用图(Call Graph,CG),在函数调用图中,节点表示函数,边表示函数间的调用关系。根据预设的全局分析调度策略,对CG中的每个节点(对应一个函数)进行过程内分析,最终给出CG每种可行的调用序列的分析结果。
    图 2 全局分析原理流程图

(责任编辑:adminadmin2008)

分享到:

更多
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
  • 微笑/wx
  • 撇嘴/pz
  • 抓狂/zk
  • 流汗/lh
  • 大兵/db
  • 奋斗/fd
  • 疑问/yw
  • 晕/y
  • 偷笑/wx
  • 可爱/ka
  • 傲慢/am
  • 惊恐/jk
用户名: 验证码:点击我更换图片
资料下载专区
图文资讯

容器是如何让“一切都是代码”成为现实的

容器是如何让“一切都是代码”成为现实的

现代应用的发展在很大程度上要归功于DevOps运动的蓬勃兴起以及该运动所产生的各种自动...[详细]

如何快速掌握一门新技术/语言/框架

如何快速掌握一门新技术/语言/框架

IT行业中的企业特点是都属于知识密集型企业。这种企业的核心竞争力与员工的知识和技能...[详细]

建高效数据中心有径可循

建高效数据中心有径可循

能耗问题一直是各大数据中心的心头之痛。有数据表明,2015年我国数据中心能耗预计将高...[详细]

2015黑帽大会:网络灾难后 重建IT安全

2015黑帽大会:网络灾难后 重建IT安全

在遭遇网络灾难后重建IT安全似乎是不可能完成的任务,但根据安全专家Christina Kubeck...[详细]

面对DNS劫持 企业移动应用该如何防护?

面对DNS劫持 企业移动应用该如何防护?

DNS(Domain Name System)劫持又称域名劫持,是指对正常的域名解析请求加以拦截,转而...[详细]

返回首页 返回顶部