浅谈计算机软件安全检测技术

2013-08-15 00:42黄英丽
网络安全技术与应用 2013年8期
关键词:安全漏洞计算机软件漏洞

黄英丽

(广西南宁浩越软件科技有限公司 广西 530022)

0 引言

在当前这个高度信息化的时代,信息安全越来越成为人们的关注焦点。软件是计算机系统的灵魂,网络通信、操作系统以及安全算法等都是以软件的形式存在的,这些软件在一定程度上都存在着各自一些弱点,即软件漏洞,这给计算机网络信息安全带来了巨大的威胁。这就需要一个可靠的软件检测系统,实时检测计算机内部的漏洞,提前找出安全隐患,并及时对软件漏洞进行有效的修复。目前,计算机内部的防火墙也具有对攻击性程序进行检测和拦截的功能,当然,这并不能清除所有的安全隐患。除此之外,编写安全代码也是能解决软件安全问题的有效途径,但它耗时较长,不能起到立竿见影的效果。因此,笔者在这里引入一些目前针计算机软件安全检测的重要技术。

1 计算机软件安全漏洞概述

所谓的计算机软件安全漏洞,就是指计算机软件内部会带来安全问题的代码。安全漏洞常常会引起来自其它代码和程序的攻击,造成严重的安全问题。软件安全漏洞可以根据不同的角度进行分类,本文以C语言特点为基础,将计算机软件安全漏洞分为以下几种:

第一,缓冲区溢出漏洞。缓冲溢出区是近二十多年来引起安全问题的比例最大的软件安全漏洞,据统计,在1999年,缓冲溢出区的漏洞占有率为50%以上,2002年占57%。之所以会引起缓冲区溢出漏洞,主要是因为计算机内部使用了不安全的编程语言。另外,程序员在进行编程时的技术不到位也是产生缓冲溢出区漏洞的另一个原因。通常情况下,缓冲区都有自己的固定大小,程序员在编写程序时要留意不超过容量。例如,gets()函数在遇到EOF字符或者换行字符之前,是不会停止文本读入的,它不会进行边界检查,以以下代码为例:

char buffer[1024];

gets(buffer);

最初字符数组的长度是1024,而当使用gets函数读取数据并将其放入定义的buffer中时,若受到一个恶意攻击,则原本通常情况下都小于1024的数据就会被攻击者重新构造,变成一个大于1024的数据,这时,buffer将会放不下所有数据,并使程序在执行的时候产生溢出。

第二,竞争条件漏洞(race condition)。这是一种常见的软件漏洞,尤其是当计算机处于多任务、多程序的时候,这种漏洞就会更加频繁。因为在多任务的网络环境下,每时每刻都会有不同的多个用户进行不同的程序,而在这之间,就会产生先后顺序而带来的执行权的竞争问题。当前,并行计算和分布式系统的深入开展更使这一漏洞愈演愈烈,对计算机的信息安全构成了巨大的威胁。

第三,格式化字符串漏洞(Format string)。格式化字符串漏洞是早在几年前就已经被发布的另一类较为微妙的程序代码缺陷,例如在[29]:printf(“%s”,buffer)这一代码中,printf的第一个参数就是一个格式化字符串,它主要用于指定后边参数的类型以及个数等一些特征。但是,printf函数对其后边参数的特征是不做检查的,也就是说,上述无漏洞的代码,即使被写成printf(buffer)也是可以被编译的,这样就产生了格式化字符串漏洞。这一漏洞一旦产生,就可以被用于任意读写进程的内存空间,并且还很难被控制。

2 计算机软件安全检测技术

针对以上一些常见的计算机软件安全漏洞及其特征,为了做好计算机的安全保护工作,降低安全漏洞带来的危险指数,我们运用一些有效的计算机软件安全检测系统和技术,以起到未雨绸缪的效果。在这里,笔者引入以下几种检测技术。

2.1 动态检测技术

所谓的动态检测技术,就是指在计算机进行程序运行的时候,通过内存、堆和栈等与环境变量相关的运行因素进行检测和分析,以此来检测正在运行的程序是否存在漏洞的技术。这一技术在进行程序检测的时候并不会涉及到修改目标程序源码等问题,因此具有较高的程序保密性。当然,这一检测系统中涉及着很多的检测方法。

第一,非执行栈技术。基于栈进行的攻击是近几年较为常见的,究其原因,大部分是因为很多操作系统的栈是可以写也可以执行的,而且很多内部变量都是保存在栈中的,攻击者只要在栈中注入一些恶意代码,然后就可以找到一些方法来执行这段代码。因此,对于如何防范栈攻击,最有效且最直接的方法,便就是使栈不能执行代码。这样,即使攻击者在栈内注入恶意代码,这个代码也不会得以执行。非栈执行技术在一定程度上防范了一些恶意入侵者,只是,这一技术需要在操作系统层进行一系列的修改,另外,该技术的检测还不够全面,在性能上也还存在有些不足。

第二,非执行堆与数据技术。堆在计算机内主要是对正在运行的程序进行动态的内存区域分配,而数据是程序被编写之初就初始化好的。如果堆和数据都不能执行代码,则恶意代码就不会被执行。这一技术使得传统程序在堆或数据段中生成代码的方式得以改变,当然,也带来了很多程序之间的不兼容性。

第三,内存映射技术。很多攻击者会通过NULL结尾的字符串去覆盖内存,以达到对计算机软件的攻击,内存映射技术使用映射代码页将企图跳转到较低内存区的攻击者有效地拦截下来,并把代码页随机地映射到不同的内存区域。

第四,安全的共享库技术。不安全的共享库是很多安全漏洞的来源,例如,在C&C++中就有很多不安全的函数,如strcpy、strcat、gets等。安全共享库技术在动态链接的基础上,在程序运行期间对不安全的函数进行拦截和调节,同时对参数进行检测。

2.2 静态检测技术

所谓的静态检测技术,就是在程序分析技术的基础上,对应用程序的二进制代码或者代码源进行分析的技术。这一技术可以在短时间内找出程序内部的大量弱点,运用起来十分快捷方便。静态检测技术也涉及很多的方法:

第一,词法检测技术。词法分析是对程序源代码中有危险的函数和系统进行分析和调用,对于具有潜在危险的源代码,词法分析并不会进行深入分析,因此,这一技术又存在很多的误报。

第二,程序评注技术。动态检测技术并不能对从程序源代码中静态生成的信息进行检测,这就需要在程序源代码中加入一些人为的评注信息,以便静态检测技术能够进行得更顺利和精确。通常,程序评注是以注释的形式存在的,因此它不会改变原有的合法代码的语言特性,与此同时,检测工具还可以利用这些评注信息对程序进行更深入的静态分析。

2.3 其他检测技术

第一,开放源代码。开放源代码是一种软件发布的方法,它通过将源代码广泛发布,让更多人对这一软件进行观察阅读,并找出尽可能多的安全漏洞,以起到“眼睛足够,漏洞自现”的效果。

第二,测试库技术。这一技术主要通过审查所有的内存操作函数来检测软件中的动态性内存错误,并对正在运行中的每一个内存块都做了大量的额外标记,以这些标记信息作为检测内存操作是否正确的有效指标。

第三,栈保护的编译器扩展技术。这一技术的核心是通过对编译器进行扩展从而保护栈中的地址。当然,在这一过程中,需要对原有的程序进行重新编译,因此,其所涉及的代价也是较大的。

3 小结

当前,计算机已经渗入到社会生活的方方面面,在计算机安全备受关注的时代,我们更应该积极引入和研发多样化和全面化的安全检测技术,做好计算机安全的预防工作,及时发现恶意代码和潜在危险,进一步提高计算机的抗风险能力和安全性能,保证计算机网络的安全运行。

[1]徐岩柏.计算机软件中安全漏洞检测研究[J].工程技术(计算机光盘软件与运用).2007年;

[2]马晓银.计算机软件安全漏洞检测技术之我见[J].工程技术(计算机光盘软件与运用).2010年第16期;

[3]牛洁,王滈.浅谈计算机软件安全检测技术[J].工程技术(计算机光盘软件与运用).2012年第13期;

[4]李新远,吴字红.基于数据挖掘的入侵检测建模叨[J].计算机工程与应用.2013年.

猜你喜欢
安全漏洞计算机软件漏洞
漏洞
基于大数据技术的软件安全漏洞自动挖掘方法研究
基于模糊测试技术的软件安全漏洞挖掘方法研究
基于C语言的计算机软件编程
安全漏洞太大亚马逊、沃尔玛和Target紧急下架这种玩具
浅谈不同编程语言对计算机软件开发的影响
安全漏洞检测技术在计算机软件中的应用
浅谈基于C语言的计算机软件程序设计
三明:“两票制”堵住加价漏洞
漏洞在哪儿