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

时间:2022-03-25 09:03:14

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

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

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

随着社会信息化的发展,大型社会服务部门对外信息服务多已建立了信息系统,也正是随着各种公众信息服务软件的应用,软件信息安全事件也不断冲击着公众的管感点,因软件安全问题引起服务中断的事情屡见报端,究其原因,很大成分是在软件规模的演变中,原来软件定位多服务于小型区域和内部使用,对软件安全的要求自然比较低,在软件功能定位已发生明显变化,服务于公众客户,承载规模越来越大的时候,软件安全的建设未随之提升,而且随着软件规模的增大,依赖人工进行软件安全漏洞风险的难度也日益增加,一点侥幸和一点为难,为软件安全隐患打开了方便之门,这种问题演变出来的影响如今不得不令人痛心决心予以考虑,这也正是软件代码安全漏洞工具用武之地。

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 属性检查

属性检查工具关注临时安全的属性上面,临时安全的属性按顺序列出一些不允许发生事件的清单,。比如不能去访问已经释放了的内存块的地址,大多数属性检查工具允许程序员写自己的规则去检测特定程序的属性。

1.6 缺陷发现

缺陷发现工具的目的并不像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.

[3]Xia Yiming.Security Vulnerability Detection Study Based on Static Analysis[J].Computer Science,2006,33(10):279-283.

[4]Foster J S,Fghndrich M,Aiken A.A Theory of Type Qualifiers[J]. ACM SIGPLAN Notices,1999,34(5):192-203.

上一篇:低压外推法电流互感器检定装置的溯源 下一篇:基于OPENCV的计算机视觉技术研究