源代码安全漏洞检测方法探讨

2017-02-13 16:02马虹哲
网络空间安全 2016年11期
关键词:源代码漏洞

【 摘 要 】 随着计算机网络的快速发展,有关于软件的安全性问题越发的突显出来。源代码安全漏洞检测正是基于计算机软件安全为出发点研发出来的相关技术。论文分析了源代码安全漏洞的几种常见检测方法,并对这些方法的优缺点进行了比较,以期能为计算机网络安全提供一些参考意见。

【 关键词 】 源代码;漏洞;安全检测方法

【 中图分类号 】 TP309.2

【 文献标识码 】 A

Discussion on Detection Method of Source Code Security Vulnerabilities

Ma Hong-zhe

(Institute of Electric Power Research,Guangxi Power Grid Company Limited GuangxiNanning 530023)

【 Abstract 】 With the rapid development of computer network, there are more and more prominent on the security of software. Source code security vulnerability detection is based on the computer software security as the starting point of the research and development of related technologies. This paper analyzes several common detection methods of source code security vulnerabilities, and compares the advantages and disadvantages of these methods in order to provide some reference for computer network security.

【 Keywords 】 source code; vulnerability; security detection method

1 引言

身处于现代信息时代,网络的安全问题已成为全社会关注的热点问题。计算机系统中的任何漏洞都可能造成包括经济、政治、军事、社会、科技等多方面的严重安全隐患。只有从本质上解决计算机软件的安全漏洞问题,才能从根本上确保网络信息的安全。然而软件安全漏洞有极大的隐藏特性,如不形成对它的触发,很难注意到它的存在。

因此,目前世界各国都投入了大量精力,用于源代码安全漏洞检测方法的开发研究。

2 源代码漏洞的形成原因和具体表现

源代码漏洞是指在程序设计之初,由于考虑不周等问题,导致写代码的时候,一些代码写的不完善,由此留下了可以被侵入的后门,从而产生的可能会对程序本身、系统或数据带来潜在危害的代码问题。源代码问题一旦被不法分子发现、利用,所造成的危害不可估量。代码漏洞可以表现在很多方面,算法本身或者代码本身的问题都可能会造成代码漏洞。

代码漏洞的具体表现主要包括几个方面。

对输入的数据没有进行有效的检查。或者是进行过检查但是检查不周,也可能是处理不当,此类问题最常造成缓冲区漏洞的出现。比如在对某账号进行密码的设置输入时,如果程序未对密码的长度进行限制,用户则可能出于安全考虑输入超长的密码,由此可能会导致存储密码时对其它的数据进行覆盖,引发一系列的问题。

代码逻辑设计缺陷或错误。这类问题一般是由程序员的疏忽大意造成的。比如判断时因考虑不周而少漏条件,当遇到特殊数据和情况时,导致程序出现不可预估的错误。

算法本身的漏洞。实现源代码的安全无漏洞,首先应确保在写代码时进行严密的算法,算法本身出现了漏洞,则必然导致诸多问题的存在。比如采用比较简单的加密算法,会为信息泄漏留下操作的可能性。

3 常见的源代码安全检测方法

3.1 抽象解释

抽象解释是把程序代码的执行过程看成各种抽象状态的迁移过程,并通过对抽象状态进行分析来确定程序的性质。初始抽象状态必须是初始实际状态的安全近似,而且每次状态迁移需要保持正确的关系,这样才能保证分析结果的正确。理论上,正确的抽象能够找出程序中所有可能的缓冲区溢出漏洞。但也相应的带来较多的误报。在实际使用中,为降低误报率,用户应当根据被测程序的特性,选择合适的解释函数和抽象域等。

3.2 词法分析

词法分析是最早被用来进行缓冲区溢出漏洞检测的方法之一。这种方法是对软件源程序进行扫描分析,同时与特征库进行匹配,当发现某个片与“危险片段库中的数据”匹配时,则可找出软件程序中可能存在的溢出漏洞。这种方法的局限性在于容易产生漏报或误报,并且它也不能理解软件程序的语义。因此需要进一步的进行上下文分析。

3.3 规则检查

安全性一直是程序编程过程中必需考虑的部分,因此在编程时就会从安全性的角度设定一些必须遵循的规则。而通过对这种规则的检查,就能找到源代码中的某些漏洞。规则检查在进行大规模的程序安全检测时,可以通过选取相关的规则对某一类型的安全问题进行快速分析,但正是受这种检查法自身特点的束缚,使得它只能对特定类型的问题进行检查,无法实现全面的源代码漏洞检测。

3.4 类型推导

如果将安全属性看成一种类型,那么通过类型推导检查,就能找出源代码中的不安全漏洞类型。这种方法忽略了代码执行条件和顺序,只是利用定型规则确定代码中部件的的类型,所以在进行源代码漏洞检测时处理速度很快。

一般情况下,类型推导可分为三个阶段:首先是定型断言,确定变量的初始类型;其次是推导规则,即进行推论系统规则集的建构;最后是检查规则,即判断推论结果是否具有“危害性”。

类型推导法对于软件安全漏洞的快速检测量方面具有很大的优势,能进行大规模程序的安全性分析,但由于约束变量取值为无穷,所以这种方法也只能用来检测特定类型的源代码漏洞。

3.5 数据流分析

数据流分析在源代码的安全检测中,用途比较广泛。这种方法从对源代码的语义信息进行构造变量切入,采用代数方法对变量进行定义和使用的确定。

数据流分析方法基于这样一个事实,数据流沿程序控制图传播。当所有程序点的分析状态达到不动点时,传播停止,同时得到程序性质的解。但是数据流分析方法不能精确跟踪指令的控制条件,所以这种检测方法得到的结果不够精确。

3.6 约束分析

通过产生、求解程序的约束条件,约束分析即可确定程序的性质。约束分析方法建立的局部化约束产生的规则能清楚的描述指令副作用乃至控制条件。

约束分析检测分为约束产生和约束求解两个阶段。约束产生阶段是进行包括变量类型和分析状态在内的约束系统的构建,对这个系统进行求解的过程即为了约束求解阶段。

这种检测法常用于可能造成缓冲区溢出的字符串操作的检测。但是,这种方法不容易处理精确循环:程序中存在循环,且循环控制条件之间存在依赖关系时,则建立的约束条件可能无解。

3.7 符号执行

符号执行是通过采用抽象符号代替变量,对路径敏感的程序控制流进行模拟,在约束求解中对可能发生的错误解进行检测的方法。在检测中,如果出现象一组抽象符号的解满足,则可判定程序中存在错误。符号执行法的检测能力完全取决于求解工具的约束条件和求解能力。虽然这种方法的检测时间较长,但它的优点是可以进行比较精准的检测,程序中很多细微的逻辑错误都能被找到,对于某些特定问题的检测很有必要。

3.8 模型检测

作为形式化的验证技术的一种,模型检测采用的是通过状态迁移描述程序的行为。这种方法用时序逻辑和计算树逻辑等来表示程序系统的性质,将系统属性(安全与否)的检验问题变换为搜索不符合逻辑公式的状态问题。首先,进行抽象模型的构建,这里必需注意,只有有限状态的程序才能进行模型构建;然后模型验证要遍历程序的所有状态空间进行验证。这种检测有两种常见的方法:符号化模型检测和模型转换自动机,两者均为并发系统方法。符号化模型检测是通过将抽象模型中的状态转变为语法树描述的逻辑公式,对公式进行可满足性验证,而模型转换自动机则是通过在安全时序的基础上,构建一个新的自动机进行验证。

在协议验证和硬件检测领域,模型检测的应用较为常见。模型检验能够发现程序中存在复杂语义上的错误,从而准确发现程序中潜在的安全性漏洞,但现存的模型检验工具普遍分析源程序的形式化的表示(数学描述),而不是以源程序作为输入,如需要源程序的数学模型。通常可以通过程序分析(数据流分析,控制流分析,程序切片工具)来自动完成源程序的模型的生成。程序切片提取程序的精简了的模型,其中程序分析是基础,除了语法分析之外,更需要涉及语义的分析,包括控制流分析和数据流分析。

由于程序的复杂性导致了模型过于庞大的问题,因此模型检测除了只能分析那些有限状态的系统,还有只能针对程序中的某一个属性构造抽象模型的弱点,有较大的局限性。

4 各种检测方法的比较分析

以上介绍的几种源代码安全漏洞检测法,既有区别又存在内在的联系。比如抽象解释就是其他方法的理论基础。这些方法都有各自的优缺点,不可能处理所有的源代码安全漏洞检测问题,因此需要对这些方法的特征有一个综合的了解,在实际应用时,合理的采取几种方法的综合检测,能更好地完成源代码安全漏洞检测工作。关于这些方法的优缺点,如表1所示。

参考文献

[1] 周诚,张涛,马媛媛,李伟伟.一种高效检测源代码安全漏洞的代码审查方法[J].现代电子技术,2015,05:83-86.

[2] 时志伟,赵亮.一种关于PHP源代码安全漏洞的静态检测方法[J].信息安全与通信保密,2011,11:80-82.

[3] 朱圣才,徐御,王火剑.常见源代码安全漏洞分析与研究[J].信息网络安全,2014,02:48-52.

作者简介:

马虹哲(1987-),女,汉族,研究生,硕士,工程师;主要研究方向和关注领域:信息安全。

猜你喜欢
源代码漏洞
基于TXL的源代码插桩技术研究
漏洞在哪里
侦探推理游戏(二)
保护好自己的“源代码”
解密别克安全“源代码”
民用飞机A级别机载软件项目源代码到目标代码追溯性分析研究
漏洞在哪儿
Windows系统WebDAV提权漏洞
基于Android平台的飞行射击游戏设计
视频、Office漏洞相继爆发