论文部分内容阅读
摘 要 随着计算机技术的发展,计算机软件种类层出不穷,功能越来越强大。但计算机软件开发过程中受多种因素影响,容易出现安全漏洞,这些漏洞一旦被恶意攻击者利用通常会给软件的使用者造成巨大损失。因此,加强计算机软件安全漏洞检测的研究具有重要的现实意义。本文从静态与动态两个方面探讨计算机软件安全漏洞检测方法,以期为提高软件安全性提供参考。
关键词 计算机软件;安全漏洞;检测方法
中图分类号:TP31 文献标识码:A 文章编号:1671-7597(2015)03-0085-02
任何计算机程序开发过程中,受开发人员个人水平或其他技术因素影响,均可能出现安全漏洞。计算机软件安全漏洞区别于软件的安全弱点,只有可能引起攻击的弱点才称之为漏洞,换言之,计算机软件安全不一定是漏洞,但漏洞却是计算机软件的安全弱点。
1 计算机软件安全漏洞动态检测技术
所谓动态检测技术指软件运行期间,通过分析堆、内存、环境变量等因素,判断软件是否存在安全漏洞。此种检测技术的特点在于在不修改二进制代码或程序源码的条件下进行的检测,因此,确保了程序的保密性。
1.1 非执行栈技术
基于栈的计算机软件攻击行为时常发生,究其原因在于一些操作系统的栈允许执行与写入,这就给攻击者留下了可乘之机,即一些攻击者将一些恶意代码注入到栈中,而后加以运行试图达到攻击的目的。
为防止上述攻击行为的发生,比较有效的手段是禁止栈执行代码,不过需要对操作系统进行修改。同时,还需考虑软件性能问题,尤其在堆和栈同时存在溢出可能的程序中,会提高故障发生率。一般的处理办法是借助栈溢出将程序跳转到至于堆上的攻击代码上,避免栈中代码的执行。该技术检测的内容不够全面,其只能检测和组织栈攻击行为。而且通过将恶意代码注入到数据段中躲过该种技术的检测。另外,考虑到一些应用程序的正确执行需要栈的支撑,因此该技术可能会引起一些兼容问题,不过可以经过分析进行排除。
1.2 非执行堆和数据技术
堆是程序运行过程中进行动态分配的内存区域,而数据段在程序编译时就已完成。很长一段时间人们担心非执行堆和数据段会给软件的正常运行带来不利影响,因此,该种检测技术的发展非常缓慢。
该种技术可使攻击者注入的恶意代码丧失执行的机会,尤其与非执行栈技术配合使用效果更为明显。不过与非执行栈技术相比,因其需要修改较多内核,因此,该技术花费的成本要高一些。研究表明,该种技术可有效检测和阻止将恶意代码注入内存中的攻击行为,但如果是对函数参数或指针进行恶意的修改则无能为力。另外,该种检测技术给其他应用程序的影响非常小,因此,在性能上的消耗可不必过多的考虑。
1.3 内存映射技术
部分攻击者利用NULL结尾的字符串对内存进行覆盖,以实现攻击目标。而使用内存映射技术随机将代码页映射到不同的内存地址中一定程度上避免某些攻击行为的发生。
例如,针对一些缓冲区溢出漏洞,攻击者实施攻击行为时需要在内存中找到目标进程的地址,而后通过构造的数据对其进行覆盖,以达到攻击的目的。利用内存映射技术将代码页随机映射到某个地址上,可提高攻击者的攻击难度,增加攻击成本。应用该种检测技术需要对操作系统的内核进行修改,尽管其不需要修改代码,考虑到程序链接阶段二进制的地址已经确定,因此,需对其进行重新链接。
该种检测技术对防止基于内存地址跳转的攻击比较有效,但无法检测与预防新代码注入的攻击。而且低端内存大小一般受限制,因此,将代码页均映射到低端内存中可能性不大。该种检测技术消耗的性能可忽略不计,而且运行起来给其他程序造成的影响较小。
1.4 程序解释技术
加强程序运行过程中的行为监视并对其进行安全检查,是检测软件安全漏洞的有效方法,这就需要运用程序解释技术。
程序监视器将攻击行为分为绕过安全检测、无限制控制转移、非原始代买执行三种类型。针对不同的攻击行为人们开发出了对应的机制及安全策略。例如,针对无限制的控制转移,要求函数要想返回只回到调用地址,而且对调用及跳转均给予了严格的限制,只有目的段为导出表、源段为导出表才可被执行。并将间接调用控制在某个段内,并严格审查open、ececve等一些危险的函数。
使用程序解释技术时并不需要修改应用程序代码或操作系统内核,只需将应用程序链接产生新启动代码即可,而后通过对动态优化程序加以调用、并解释框架即可。该技术会对兼容性产生一定的影响,而且安全策略较为严格会造成某些应用程序的崩溃。不同的安全策略消耗的性能存在较大差异,不过从整体上来看,其在性能上的消耗并不算太大。
2 静态检测技术
静态检测技术指借助一定的程序分析技术对程序的源代码或二进制代码进行分析,以找到软件弱点的一种方法。该种检测技术可找到软件的诸多弱点,但其并不完全,而且会出现一些误报现象。不过该种技术操作方便,并不需要修改目标程序和操作系统,因此仍具有较高的实用价值。
2.1 词法检测技术
该种检测技术指检测程序源码中系统调用,以及使用的可能存在危险的库函数,而不做深入的分析。该种方法操作简单,不过产生误报的机率较大。利用该种技术需要做好的工作包括查看报表、对弱点数据库加以维护以及对函数名加以鉴别,但应用该检测技术发现软件漏洞,所做的工作远不止这些。词法检测技术应用效果受弱点数据库定义的影响,而且局限于对标准库函数进行检测,无法检测用于自己定义的函数。
由于词法检测技术并未添加任何程序代码,因此不会引起兼容性问题,但受分析技术不全面影响,难免会出现大量误报。另外,其虽不会影响目标程序,但实施过程中需要花费大量人力成本。
2.2 程序评注技术
通过静态分析程序源代码获得的信息非常有限,而使用程序评注技术一定程度上可提高软件漏洞检测效率。 程序评注以注释的形式存在于程序代码中,从实质上来讲其并不增加程序的语言特性,因此不会给源程序造成影响。借助评注信息对程序进行静态分析,从而寻找到程序中可能会出现的漏洞。例如:程序段char*p=......;/*@notmull@*/,可知p指针的值不能为空,如果后面代码中将其赋予空值的话就会出现错误。
该种检测技术需要技术人员逐一排查程序代码,认真分析是误报还是存在的漏洞。如果是漏洞则需通过修改代码加以排除,否则需对这个警告加以禁止,并进行评注。另外,因该种技术并不会给编译器带来影响,因此不需要修改编译器。
2.3 类型推断技术
计算机软件开发过程中如程序员不应用上述两种静态检测技术,为确保编程的安全性需要将新的语言拓展引入进来,借助编译器对安全内容实施静态分析,强制程序员按照要求进行代码的书写。
应用类型推断理论是语言扩展较为流行的做法,即为增加安全约束将一些新的类型修饰应用到某些特别类型的数据上。如将其和动态检测技术配合使用,可动态检测出指针的不安全使用情况。实际应用过程中如将所有变量均添加一个类型信息,工作量会非常之大。不过利用现有的算法实现类型推断,只需要用类型来标记个别变量即可,使该种方法的实用性得以大大提高。
使用类型推断技术因将新的指针扩展及类型修饰引入到程序中,因此,会不可避免的带来程序兼容问题,因此,程度开发过程中应引起足够的重视,对一些变量增加新的定义。
2.4 变异语言技术
计算程序软件开发过程中使用变异语言技术可有效消除程序弱点,尤其使用C++、C语言开发软件时,可使用其变异技术,以避免内存管理漏洞、格式化字符串溢出以及缓冲区溢出现象的出现。
运用变异语言技术的一般做法为对goto随意跳转、不安全类型转换以及指针的算术运算加以限制,甚至禁止应用。要想利用该种技术提高计算机软件的安全性,需要修改合法的程序代码,但也正因如此可能会引发一些兼容性问题。
除此之外,计算机软件漏洞静态检测技术还有很多,尤其随着科技的发展,相信会涌现出更多有效的检测软件安全漏洞的静态检测技术,以及时发现软件漏洞提高计算机软件的安
全性。
3 总结
综上所述,动态检测技术一定程度上可检测出计算机软件的漏洞,但却很难发现未引起攻击的漏洞,而且一旦发现攻击行为,需要终止程序执行,才能阻止攻击行为造成的破坏。动态检测技术的作用在于防范漏洞攻击行为,但不能修复软件漏洞。另外,动态检测技术还受操作系统及计算机硬件的影响。而静态技术主要针对软件程序进行的检测,因此不受软件运行平台的影响,但会受到程序开发人员的编写代码风格的影响,会给定位软件漏洞带来一定的难度。总之,计算机软件开发过程中应结合实际,灵活采用多种安全漏洞检测技术,以尽可能多的发现、修正安全漏洞,保证软件的安全运行。
参考文献
[1]申国霞.浅析计算机软件中安全漏洞检测技术的应用[J].电子制作,2014(04):84.
[2]高妍.计算机软件安全漏洞检测技术与应用[J].计算机光盘软件与应用,2014(04):172-173.
[3]杨浩宇.计算机软件安全检测问题与方法[J].信息技术与信息化,2014(06):121-122.
[4]魏南强.试析计算机软件安全漏洞监测[J].无线互联科技,2014(09):64.
关键词 计算机软件;安全漏洞;检测方法
中图分类号:TP31 文献标识码:A 文章编号:1671-7597(2015)03-0085-02
任何计算机程序开发过程中,受开发人员个人水平或其他技术因素影响,均可能出现安全漏洞。计算机软件安全漏洞区别于软件的安全弱点,只有可能引起攻击的弱点才称之为漏洞,换言之,计算机软件安全不一定是漏洞,但漏洞却是计算机软件的安全弱点。
1 计算机软件安全漏洞动态检测技术
所谓动态检测技术指软件运行期间,通过分析堆、内存、环境变量等因素,判断软件是否存在安全漏洞。此种检测技术的特点在于在不修改二进制代码或程序源码的条件下进行的检测,因此,确保了程序的保密性。
1.1 非执行栈技术
基于栈的计算机软件攻击行为时常发生,究其原因在于一些操作系统的栈允许执行与写入,这就给攻击者留下了可乘之机,即一些攻击者将一些恶意代码注入到栈中,而后加以运行试图达到攻击的目的。
为防止上述攻击行为的发生,比较有效的手段是禁止栈执行代码,不过需要对操作系统进行修改。同时,还需考虑软件性能问题,尤其在堆和栈同时存在溢出可能的程序中,会提高故障发生率。一般的处理办法是借助栈溢出将程序跳转到至于堆上的攻击代码上,避免栈中代码的执行。该技术检测的内容不够全面,其只能检测和组织栈攻击行为。而且通过将恶意代码注入到数据段中躲过该种技术的检测。另外,考虑到一些应用程序的正确执行需要栈的支撑,因此该技术可能会引起一些兼容问题,不过可以经过分析进行排除。
1.2 非执行堆和数据技术
堆是程序运行过程中进行动态分配的内存区域,而数据段在程序编译时就已完成。很长一段时间人们担心非执行堆和数据段会给软件的正常运行带来不利影响,因此,该种检测技术的发展非常缓慢。
该种技术可使攻击者注入的恶意代码丧失执行的机会,尤其与非执行栈技术配合使用效果更为明显。不过与非执行栈技术相比,因其需要修改较多内核,因此,该技术花费的成本要高一些。研究表明,该种技术可有效检测和阻止将恶意代码注入内存中的攻击行为,但如果是对函数参数或指针进行恶意的修改则无能为力。另外,该种检测技术给其他应用程序的影响非常小,因此,在性能上的消耗可不必过多的考虑。
1.3 内存映射技术
部分攻击者利用NULL结尾的字符串对内存进行覆盖,以实现攻击目标。而使用内存映射技术随机将代码页映射到不同的内存地址中一定程度上避免某些攻击行为的发生。
例如,针对一些缓冲区溢出漏洞,攻击者实施攻击行为时需要在内存中找到目标进程的地址,而后通过构造的数据对其进行覆盖,以达到攻击的目的。利用内存映射技术将代码页随机映射到某个地址上,可提高攻击者的攻击难度,增加攻击成本。应用该种检测技术需要对操作系统的内核进行修改,尽管其不需要修改代码,考虑到程序链接阶段二进制的地址已经确定,因此,需对其进行重新链接。
该种检测技术对防止基于内存地址跳转的攻击比较有效,但无法检测与预防新代码注入的攻击。而且低端内存大小一般受限制,因此,将代码页均映射到低端内存中可能性不大。该种检测技术消耗的性能可忽略不计,而且运行起来给其他程序造成的影响较小。
1.4 程序解释技术
加强程序运行过程中的行为监视并对其进行安全检查,是检测软件安全漏洞的有效方法,这就需要运用程序解释技术。
程序监视器将攻击行为分为绕过安全检测、无限制控制转移、非原始代买执行三种类型。针对不同的攻击行为人们开发出了对应的机制及安全策略。例如,针对无限制的控制转移,要求函数要想返回只回到调用地址,而且对调用及跳转均给予了严格的限制,只有目的段为导出表、源段为导出表才可被执行。并将间接调用控制在某个段内,并严格审查open、ececve等一些危险的函数。
使用程序解释技术时并不需要修改应用程序代码或操作系统内核,只需将应用程序链接产生新启动代码即可,而后通过对动态优化程序加以调用、并解释框架即可。该技术会对兼容性产生一定的影响,而且安全策略较为严格会造成某些应用程序的崩溃。不同的安全策略消耗的性能存在较大差异,不过从整体上来看,其在性能上的消耗并不算太大。
2 静态检测技术
静态检测技术指借助一定的程序分析技术对程序的源代码或二进制代码进行分析,以找到软件弱点的一种方法。该种检测技术可找到软件的诸多弱点,但其并不完全,而且会出现一些误报现象。不过该种技术操作方便,并不需要修改目标程序和操作系统,因此仍具有较高的实用价值。
2.1 词法检测技术
该种检测技术指检测程序源码中系统调用,以及使用的可能存在危险的库函数,而不做深入的分析。该种方法操作简单,不过产生误报的机率较大。利用该种技术需要做好的工作包括查看报表、对弱点数据库加以维护以及对函数名加以鉴别,但应用该检测技术发现软件漏洞,所做的工作远不止这些。词法检测技术应用效果受弱点数据库定义的影响,而且局限于对标准库函数进行检测,无法检测用于自己定义的函数。
由于词法检测技术并未添加任何程序代码,因此不会引起兼容性问题,但受分析技术不全面影响,难免会出现大量误报。另外,其虽不会影响目标程序,但实施过程中需要花费大量人力成本。
2.2 程序评注技术
通过静态分析程序源代码获得的信息非常有限,而使用程序评注技术一定程度上可提高软件漏洞检测效率。 程序评注以注释的形式存在于程序代码中,从实质上来讲其并不增加程序的语言特性,因此不会给源程序造成影响。借助评注信息对程序进行静态分析,从而寻找到程序中可能会出现的漏洞。例如:程序段char*p=......;/*@notmull@*/,可知p指针的值不能为空,如果后面代码中将其赋予空值的话就会出现错误。
该种检测技术需要技术人员逐一排查程序代码,认真分析是误报还是存在的漏洞。如果是漏洞则需通过修改代码加以排除,否则需对这个警告加以禁止,并进行评注。另外,因该种技术并不会给编译器带来影响,因此不需要修改编译器。
2.3 类型推断技术
计算机软件开发过程中如程序员不应用上述两种静态检测技术,为确保编程的安全性需要将新的语言拓展引入进来,借助编译器对安全内容实施静态分析,强制程序员按照要求进行代码的书写。
应用类型推断理论是语言扩展较为流行的做法,即为增加安全约束将一些新的类型修饰应用到某些特别类型的数据上。如将其和动态检测技术配合使用,可动态检测出指针的不安全使用情况。实际应用过程中如将所有变量均添加一个类型信息,工作量会非常之大。不过利用现有的算法实现类型推断,只需要用类型来标记个别变量即可,使该种方法的实用性得以大大提高。
使用类型推断技术因将新的指针扩展及类型修饰引入到程序中,因此,会不可避免的带来程序兼容问题,因此,程度开发过程中应引起足够的重视,对一些变量增加新的定义。
2.4 变异语言技术
计算程序软件开发过程中使用变异语言技术可有效消除程序弱点,尤其使用C++、C语言开发软件时,可使用其变异技术,以避免内存管理漏洞、格式化字符串溢出以及缓冲区溢出现象的出现。
运用变异语言技术的一般做法为对goto随意跳转、不安全类型转换以及指针的算术运算加以限制,甚至禁止应用。要想利用该种技术提高计算机软件的安全性,需要修改合法的程序代码,但也正因如此可能会引发一些兼容性问题。
除此之外,计算机软件漏洞静态检测技术还有很多,尤其随着科技的发展,相信会涌现出更多有效的检测软件安全漏洞的静态检测技术,以及时发现软件漏洞提高计算机软件的安
全性。
3 总结
综上所述,动态检测技术一定程度上可检测出计算机软件的漏洞,但却很难发现未引起攻击的漏洞,而且一旦发现攻击行为,需要终止程序执行,才能阻止攻击行为造成的破坏。动态检测技术的作用在于防范漏洞攻击行为,但不能修复软件漏洞。另外,动态检测技术还受操作系统及计算机硬件的影响。而静态技术主要针对软件程序进行的检测,因此不受软件运行平台的影响,但会受到程序开发人员的编写代码风格的影响,会给定位软件漏洞带来一定的难度。总之,计算机软件开发过程中应结合实际,灵活采用多种安全漏洞检测技术,以尽可能多的发现、修正安全漏洞,保证软件的安全运行。
参考文献
[1]申国霞.浅析计算机软件中安全漏洞检测技术的应用[J].电子制作,2014(04):84.
[2]高妍.计算机软件安全漏洞检测技术与应用[J].计算机光盘软件与应用,2014(04):172-173.
[3]杨浩宇.计算机软件安全检测问题与方法[J].信息技术与信息化,2014(06):121-122.
[4]魏南强.试析计算机软件安全漏洞监测[J].无线互联科技,2014(09):64.