浅谈关于计算机软件安全漏洞检测技术
2013-04-29刘伟塔李文涛
刘伟塔 李文涛
摘 要 随着现代化科学技术的不断发展,电子商务当前己经成为企业市场的主要支撑点。计算机软件的发展日趋强大,软件中的安全缺陷与漏洞也在不断增多,随着使用范围的扩大,软件的安全性问题也越来越多,软件的安全则试保证了计算机和软件的安全性,降低了计算机的风险,并且对计算机软件中的风险进行有效的避免与更正。本文就计算机软件安全漏洞检测方面进行了分析。
关键词 计算机软件 安全漏洞 检测
中图分类号:TP311.5 文献标识码:A
1 计算机软件所面临的威胁
1.1 非法复制
计算机软件是一项知识密集的产品,需要投入大量的人力物力进行开发,所付出的开发成本通常是硬件价值的好几倍,甚至好几百倍。然而,计算机软件却是及其容易复制的产品,给产品产权造成了严重的威胁。近年来,全球每年非法盗用软件版权损失超过140亿美元,且损失量逐年提升,尤其是在我国这样经济发展迅速但是软件管理落后的巨型市场中,非法复制所带来的税收、法律等诸多问题造成了严重的社会影响。
1.2 软件质量问题
由于一些原因,软件开发中都有不可避免的问题和缺陷,通常将软件质量的缺陷称为漏洞,这些漏洞对计算机软件的安全系统有着严重的威胁。近年来,由软件漏洞引起的安全事件逐步增加,一些致力于找各种软件漏洞的高手通常都能发现软件的安全漏洞问题,从而利用这些漏洞对计算机用户进行攻击,给用户造成了不便。
1.3 软件跟踪
计算机软件一旦开发出来,总有人对软件进行动态破译,利用各种程序调试工具对软件程序进行跟踪、窃取软件源码,以及取消加密功能等。当前软件跟踪技术通过利用系统所提供的单步中断和断电中断的功能实现,可将其分为动态跟踪和静态跟踪两种。
2 计算机软件的安全漏洞
计算机安全漏洞是系统的特性,攻击者或攻击程序利用这种脆弱的特性,通过己授权的方式来获取未授权的访问,从而对系统造成一定损害,即使现在大多人在计算机中安装了反病毒软件或防火墙,但是对于防止计算机软件安全漏洞的破坏没有多大的用处,甚至有更多的问题出现。
在目前看来,有五大安全漏洞容易被人们忽略,即Geronimo、JBOSS应用服务器、LIBTIFF开源软件库、NET-SNMP和ZLIB 。Geronimo2.0这个安全漏洞是让远程非法侵入者绕过身份识别,通过插入恶意软件代码来获取访问权限;JBOSS服务器3.2.4至4.0.5的版本中,有个目录遍历的安全漏洞;LIBTIFF开源软件库是读写标签图像文件格式的文件;NET-SNMP的安全漏洞存在于NET或SNMP中的协议文件里;ZLIB是数据压缩软件库,由于库中存在的代码解释一个长度大于1,从而导致安全漏洞。
3 计算机软件安全漏洞检测技术
对于计算机软件安全漏洞必须采取一定的检测技术来加以预防,主要有静态检测技术和动态监检测技术两种方法。
3.1 计算机软件安全漏洞静态检测技术
静态检测技术主要是通过对程序的分析,通过应用程序的二进制代码进行分析的技术方法。当然,完全检测的方法基本上是不存在的,即时可以检测到大量漏洞,也不会完全找到,也许从中存在许多误报。静态检测技术最大的优点就是软件不需要运行,检测十分方便,不过需要专业人员核对、整理,并进行分析和处理。计算机软件安全漏洞的静态检测方式主要有元编译技术、变异语技术、词法检测技术、程序评注技术、约束解算器技术和类型推断技术。
3.1.1 元编译技术
元编译技术是一种利用编译器的简单技术,其误报率低,而且对于语言特性的扩展不会更新。元编译技术是将程序的安全属性当做轻量级编译器扩展,根据其建立模型执行。利用这类技术可以自动对所有检验的代码安全性进行推测和判断,从而对相应扩展进行编写。
3.1.2 变异语技术
变异语技术是通过对指针算术运算、不安全的类型转换、goto的无规律跳转、setjmp与longjmp等不安全的操作进行限制,一般采用C或C++的安全程序变异技术。衡量静态检测的标准包括漏报率及误报率,静态检测对软件的源代码及二进制代码进行检测,所以利用静态检测的错误越多,编写的程序就越可靠。
3.1.3 词法检测技术
词法检测技术较为简单,只是对源代码中不安全C库函数和系统进行调用,容易产生大量误报,其主要是对函数名进行辨别,没有兼容性困难。
3.1.4 程序评注技术
程序评注技术在兼容性上没有任何问题,它是以注释的形式表现,不会给代码增加新的语言。利用评注信息来做静态分析,并从中找出漏洞隐患。
3.1.5 约束解算器技术
约束解算器技术对源程序无需做任何评价,但是会产生大量误报,从而需要工作人员进行核算分析。该技术是利用约束对目标程序特定属性直接建立模型,之后采用静态分析进行解算约束。
3.2 動态检测技术
动态检测技术主要是通过对修改运行环境进行分析来提高程序的保密性,是在不修改目标程序的源代码或二进制代码的前提下,对执行程序进行漏洞检测,从而达到软件安全的目的。动态检测技术可以分为:非执行堆与数据技术、非执行栈技术、内存映射技术、安全共享库技术、沙箱技术和程序解释技术。
3.2.1 非执行堆与数据技术
该技术是在软件运行不正常的情况下采取禁止执行行为,从而检测阻止内存中的恶意代码,但是,对于检测预防和修改函数指针及函数参数没有办法做到,其兼容性相对较低。
3.2.2 内存映射技术
该技术通过对映射代码页的使用,让入侵者难以通过NULL结尾字符串到达低端内存区域,同时,由于将代码页映射到随机的地址,给入侵者带来了很大困难。此项技术需要对操作系统内核进行修改,无法检测和阻止新代码的攻击。
3.2.3 安全共享库技术
该技术是以动态链接技术为依据,通过对不安全函数的检测和拦截,来达到阻止其调用的目的。安全共享库技术不会造成兼容问题,但是对于本地变量、代码段数据和数据段溢出的攻击无法实施防护。
3.2.4 沙箱技术
沙箱技术是通过对进程访问资源的限制来达到对某种攻击行为的预防目的,将资源访问策略设定在应用程序中,策略的安全不需要对操作系统内核及应用程序作任何改变。沙箱技术主要在系统调用中应用,具有全而性,而且没有兼容问题。
4 计算机软件安全漏洞的防治方法
4.1 防止竞争条件漏洞
对于竞争条件漏洞的防治方式要将产生竞争的代码实行原子化操作。代码是执行的最小单位,在执行程序操作的时候,不会有任何干扰来阻止其执行。原子化的体现就是采用锁定的方式,通过防范TOCTOU问题,做到避免直接对使用的文件名系统进行调用,从而需要将使用文件句柄或者文件进行描述。
4.2 防止缓冲区溢出漏洞
通过对程序中危险函数的严格检查来防止缓冲区溢出,使用安全版本来替换不安全版本,比如使用strncat来对strcat进行替换等等。
4.3 防止随机数漏洞
对随机数漏洞的防范必须要使用较好的随机数发生器,好的随机数发生器自身就带有密码算法,从而为随机数流提供了安全,即使受到攻击,对全部算法的细节有所了解,也无法得到生成的数据流。
4.4 格式化字符串的漏洞防范
通过严密的防范,在代码中直接使用格式常量,不给攻击者留下任何构造格式串的机会。通常不定参数个数函数会产生格式化字符串漏洞函数,必须在使用这些函数之前,确保其参数及个数是均衡对应的。此外,通过在Windows下使用窗口输入输出数据也可以降低该漏洞所造成的安全威胁。
5 结束语
综上所述,计算机安全漏洞是计算机信息系统遭到破坏的根本源头,通过采取计算机软件动态检测技术和静态检测技术来检测并防止攻击者入侵,从而有效保障电子信息的安全。