首席安全官Plus是一个围绕“大数据、云计算和人工智能”高技术领域,发布相关网络安全前沿技术和产业趋势的平台,努力打造“有特色、高水平、国际化”的网络安全思想高地。如投稿,请发送到:csoplus@163.com。

 

                                                   


软件的质量是软件产品的生命线,其质量问题的根源在于软件设计的不合理以及软件开发过程中的疏忽所引起的软件缺陷。软件缺陷会导致软件运行时出现一些设计时的非预期行为,非但不能完成预期的功能,反而会出现意料之外的执行状况。这种预期之外的行为轻则会损害程序的预期功能,重则会导致程序崩溃而不能正常运行,更为严重的情况下,与安全相关的程序缺陷可以被恶意程序利用,使程序宿主机器受到侵害,以至于泄露与程序本身完全无关的信息,如银行账号等私密数据,这种导致软件系统出现安全性问题的缺陷称为软件的安全漏洞.

 

软件安全漏洞检测是提高软件质量和安全性的重要方法和基本手段。软件安全漏洞检测是在给定软件程序和待检测的安全性质下,设计算法来判断程序中所有可能出现的行为和状态是否都满足待检验的安全性质,若程序在某次执行过程中存在违反该安全性质的行为,则说明存在相应的安全漏洞。

 

判断程序是否满足某种安全性质是一个逻辑命题,主要有3种方法:

  1. 基于程序正确性证明方法。程序正确性证明一般使用Hoarce逻辑[1,2]等公理系统从语法推导的角度证明程序的公理语义是否满足待检验的安全性质,基于该方法开发的工具通常需要事先给出程序的安全性规约,是一件费时费力的事情;

  2. 基于模型检验的方法。该方法使用有穷自动机表示程序的状态迁移系统,并从语义的角度验证所建立的状态迁移系统是否为待检验性质的一个模型,该方法只能应用于有穷状态系统,且存在状态爆炸问题;

  3. 基于程序分析的方法。该方法对软件进行人工或者自动分析,以验证、确认或发现软件性质(或者规约、约束)的过程或活动,使用程序分析的方法进行软件安全性检测,可有效发现和检测软件中存在的安全缺陷或漏洞,是目前普遍应用的方法。

 

需要注意的是,Henry Rice[1]在1953年证明了程序分析在普遍意义上不可能完全判定程序的任意非平凡性质,即无法构造出停机的通用算法对任意给定的程序判定其是否满足指定的性质。

 

尽管通用算法不存在,但是若对问题稍加限制,在有限范围内解决这一问题却是可行的。经过不断努力和尝试,科研人员提出了多种程序分析方法和支撑工具,可根据对程序安全性的实际需求从不同的角度和程度解决问题。

 

在介绍基于程序分析的软件安全漏洞检测技术之前,先介绍一下程序分析以及软件安全漏洞检测方法的评价指标,最重要的指标就是误报率和漏报率,其中误报是指算法报告了实际不存在的错误,漏报是指算法遗漏了本来存在的错误。

 

 

按照不用的角度,基于程序分析的软件安全漏洞检测可以有不同的分类方式:

1.按照程序代码的文本形式分类:

    1) 基于二进制代码分析的方法。二进制分析多采用下面要介绍的动态分析方法。

    2)  基于源代码分析的方法。源代码分析多采用下面要介绍的静态分析方法。

 

2.按照是否运行程序代码分类:

   1)基于静态分析的方法。静态分析方法从语法或语义的层面分析程序文本(源代码或二进制),以推导其语法或语义性质。多数静态分析方法为了建立用于分析的模型需要对程序的动态语义做某种形式的抽象,其抽象结果难免会引入实际不可行路径和不可达状态,如图1(b)所示,而静态分析方法难以在有限时间内判定抽象路径的可行性,这是导致误报的主要原因。这类方法对被分析程序的实际可达状态做上近似处理(Over Approximation)。当然也存在一些静态方法同时做上近似和下近似(Under Approximation),因而同时引入漏报和误报,如图1(C)所示。

    2)基于动态分析的方法。动态分析方法通过运行待测程序以获取和分析程序运行过程中产生的动态信息,以判断其运行时语义性质。动态分析只获取程序的实际可行路径和可达状态,这是保证分析结果没有误报的根本原因。但由于其大多时候并不能遍历程序的所有可行路径,因而可能错过了某些可以引发程序错误的执行路径,进而导致漏报,如图1(a)所示。换言之,动态分析方法对程序的实际可达状态做下近似处理。

 

总而言之,各种具体的分析方法均须隐式或显式地对被分析程序的可达状态集合建立分析模型,这个模型总可以被视为是对实际语义域的上近似或下近似,清楚区分分析方法对程序可达状态集的近似方式,是考察各种分析方法是否存在误报和漏报的根本角度。

 

参考文献

[1]SipserM.Introduction to the Theory of Computation. Boston,USA:ThomsonCourseTechnology,2006

[2]HoareCAR.Anaxiomatic approach to computerprogramming. Communications of the ACM,1969,12(10):576-580

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐