当前位置:首页 期刊杂志

软件安全漏洞的自动化识别原理探析

时间:2024-05-04

刘嵩鹤

本文通过分析软件代码安全检测工作原理和市场上已广泛使用的工具,为希望借助软件代码安全检测工具,提升发现软件代码安全漏洞,进而提升软件代码安全质量提高帮助。

【关键词】软件安全 漏洞 自动化识别

随着软件规模的增大,依赖人工进行软件安全漏洞风险的难度也日益增加,一点侥幸和一点为难,为软件安全隐患打开了方便之门,这种问题演变出来的影响如今不得不令人痛心决心予以考虑,这也正是软件代码安全漏洞工具用武之地。

1 软件代码安全检查工具功能评析

随着计算机软件编译技术的发展和市场的需求,目前有多种开源的和商业的静态源代码分析工具可以帮助开发人员和软件安全人员在编码阶段快速扫描出软件代码所潜在的安全隐患,这些技术在我们日常的开发过程中很普遍,只是我们平时没有注意到而已。通过源代码分析工具对代码扫描后的结果,开发人员和安全代码审查人员可以对结果再次复查,极大地提高了代码安全审查的效率,这些分析工具或者技术主要包括如下的功能:

1.1 类型检查

类型检查是静态分析使用得最为广泛的形式,也是程序员最为熟悉的方式,很多程序员并没有在类型检查方面太多的思考,毕竟类型检查的规则被编程语言事先定义好了,并被编译器强制执行,因此关于类型检查的分析器是如何执行的,程序员一般都了解得很少。类型检查能够帮助开发人员全面地排除编码类型方面的错误,比如把一个整型的值赋给一个对象的变量;在编译时捕获错误;也在一定程度上预防运行时的错误。

1.2 代码编写风格检查

Style checkers 是一个专门的代码风格检查的静态分析工具,这种工具在类型检查之外强制一些其它的编码格式的规则,比如空格检查、命名规范、不推崇函数的使用、注释、程序结构等.被style checker检查的错误通常是那些影响代码的可靠性和可维护性方面的缺陷,这些缺陷在程序运行时并不一定是一个特定的错误。

1.3 程序理解

程序理解工具帮助用户理解代码量大的程序,帮助用户理解代码,集成开发环境(IDE)也总是包含一些程序理解功能,比如:“find all uses of this method”and “find the declaration of this global variable””一些高级的分析可以支持自动程序重构的特性。比如把单个的复杂的函数,裂解成多个更为简单的函数。

高级的程序理解工具也尽量帮助程序员去获取程序是按哪种方式工作的,有些工具尽量使用逆向工程了解代码的设计。因此会给程序员一个图形化的视图,这对程序员去理解代码量大的程序非常有用,尤其是这些代码不是程序员自己写的时候。

1.4 程序确认

程序确认工具接受一组规格要求和代码,并企图为代码提供证明:“代码的实现是满足规格要求的”,如果规格是程序应当作的每一件事情的完整描述,程序确认工具就能够执行一个等同的检查,以确保代码和规格是一致的。

1.5 缺陷发现

缺陷发现工具的目的并不像style checker 那样去抱怨代码的格式问题,也不去对程序代码和规格做比较。它仅仅指出在程序在哪儿,它的行为将不是程序员本身的意图,大多数程序缺陷工具是易于使用的,因为它们是与一组特定的缺陷规则相关,这些规则描述了一些特定的代码模式,这些代码模式将通常指示代码缺陷。

2 软件代码安全的审查路径

关注于安全的静态扫描工具使用了多种其它静态分析工具的技术,但它更关注识别安全问题这个目标,这就意味着它们应用这些技术的不同,它检查潜在的不安全的库函数的调用;检测边界错误和类型转换错误;使用控制流检测操作顺序不合理所带来的隐患;使用数据流跟踪技术去跟踪不安全的数据的引入及其不安全的操作…。同时也提供自定义安全规则的接口,以满足用户特定安全目的的需求。以下是数据流和控制流的例子。

数据流跟踪来自网络的数据,该数据最后在一块给定的内存执行操作,对来自网络的数据没有做大小控制,会导致缓冲区溢出。

控制流分析所有的操作路径,发现在特定的逻辑下,程序执行不安全的操作,比如下面的对同一内存块释放了两次,导致内存管理紊乱。

3 软件代码安全检测工具功能限定

静态安全扫描器并不是设计去发现架构方面的问题,或者说设计方面的缺陷,也不适合去发现集成方面的BUG,安全扫描器也有一些局限,特别是让它去分析一些大的系统,这些系统包含多种可执行的组件,或者不同的结构层次。应当强调的是:就像人工审计一样,安全扫描器并不能发现软件系统的所有代码的安全缺陷,它们也只能发现一些,毕竟安全扫描器它自己也是一个软件,这剩下的未被发现的问题仍然需要人工去把他们找出来。因此,不要仅仅单一依赖安全的扫描器去确保整个系统代码的安全。开发人员需要学会避免安全扫描器指出的问题,这是好的事情,但并不意味着能够避免那些安全扫描器没能发现的问题。安全扫描的结果不能作为仅有的判断软件质量的唯一方式。否则,软件可能从表面上看起来已经得到改善和提高了,但实际上仍然在有些方面很糟糕。

4 总结

源代码安全扫描器综合了多种静态扫描技术,能够在一定程度上帮助我们检测软件源代码的安全性,我们可以借助它的能力配合人工的安全审计快速审查代码安全。开发组织,为了开发安全的软件,不能仅仅依靠单一的源代码扫描分析工具,还需要加强开发人员安全编码的培训和教育,并结合自身组织的特点,整理出适合自身的安全编码实践,并在不断的项目实践中丰富和完善。

参考文献

[1]Weber S,Karger P A,Paradkar A.A Software Flaw Taxonomy:Aiming Tools at Security[C].Proc.of ACM Software Engineering for Secure Systems——Building Trustworthy Applications.Louis,Missouri,USA:[s.n.],2005.

[2]Landwehr C E.Formal Models for Computer Security[J].ACM Computing Surveys,1981,13(3):247-278.

作者单位

解放军95072部队信息支援室 广西壮族自治区南宁市 530021endprint

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!