源代码静态检测分析技术浅析

       目前,基于源代码静态检测分析技术,运用越来越广,那么源代码安全检测的技术主要有哪些呢?下面我结合源代码静态分析的发展,技术特点,来分析四种相关技术:

  1. 数据流和模式匹配技术
  2. 符号执行的分析技术
  3. 抽象解释的分析方法
  4. 值流分析为主的分析方法

       数据流和模式匹配分析技术早期静态分析工具经常采用的技术,包括达到定值分析、支配分析、活跃变量分析、静态单赋值技术等,这类分析技术的优点是效率高、算法复杂度低。但是这种分析技术最大的缺点是路径不敏感,无法实现跨函数分析,往往需要再借助函数内联、摘要技术等补充分析,导致复杂度增加。采用数据流分析的精度偏低,市场上Fortify SCA、Testbed、C++ test主要采用这种分析技术。

       符号执行是将软件源代码中的变量的值采用抽象化符号形式表示,并模拟执行,分析中是基于路径敏感的。符号执行算法的复杂度会非常高,对于代码量比较大的软件会发生状态爆炸。为了做到精度与效率的折中,研究领域提出了很多改进,采用较多是Saturn,采用布尔可满足性的方式对缺陷进行计算求解,函数内是路径敏感分析,函数间采用摘要的方式分析。缺点是函数内检测精度还可以,但是跨函数分析精度较差。分析效率上,基本上可以实现10-100万行/小时。国外代码检测工具中Klocwork Insight、Coverity Prevent采用了符号执行技术。

       以抽象解释为主的分析方法,会将被检测代码中的每一条语句的影响简单模型化为一个抽象及其的状态变化,使分析更简易,但是代价是丧失了一定程度上分析完备性。抽象解释本质上是在计算效率与精度之间取得平衡,通过损失部分计算精度以保证计算可行性,再通过多次迭代计算以增强计算精度的一种抽象逼近方法。抽象解释通过多面体、区间分析以及八面体技术实现。抽象解释为主的分析方法,主要缺陷是效率较低。代表性工具是Polyspace,虽然基本上不会出现漏报,但是对于1000行/小时的检测效率来说,很难在工程实践中运用。

       以值流分析为主的分析方法,值流分析模型结合了控制流分析、数据流分析中的定值使用以及调用关系分析构建值流图。通过点与点之间的连线表达变量的定值使用关系,每个值流子图表达了某个变量到其值发生改变之前的生命周期。在值流模型基础上衍生出值依赖分析模型,通过结合指向分析、区间分析等方法,使程序模型能够更加精确地表达变量值之间的依赖关系,为缺陷检测提供了更为精化的模型,但是精度与效率还有提高的余地。FastCheck采用值流分析进行内存泄露检测。Saber采用全稀疏值流模型,在FastCheck基础上进行了改进,通过引入指向分析和修改影响分析技术,提高检测精度。国内有一款工具采用值依赖分析方法是北大博士团队主导研发CoBOT。

(完)

 

你可能感兴趣的:(代码安全,源代码静态分析,安全检测,静态分析,代码检测)