免费论文查重: 大雅 万方 维普 turnitin paperpass

简析计算机软件计算机软件中安全漏洞概述及防范策略

最后更新时间:2024-01-27 作者:用户投稿原创标记本站原创 点赞:6606 浏览:18272
论文导读:
摘要:随着科技进步与信息化的迅猛发展,软件安全问题越来越受到研究者们的重视,尤其是在计算机软件中,这些安全漏洞会带类很大的安全问题,有时是那些被证实可以攻击的软件弱点,这些漏洞需要我们有着较为清晰的认识,只有在了解的基础上才能有有效的防范方法。
关键词:计算机软件;安全漏洞;防范方法
:A
软件安全弱点就是可能会带来安全问题的计算机软件中的代码。软件安全弱点和软件安全漏洞不同,只有被证实可以引起攻击的弱点才是漏洞。弱点不一定都是漏洞,但漏洞一定是弱点。软件安全弱点信息披露的三个比较著名的地方是: Bugtraq、CERT与RISKS Digest。
每个计算机系统中都存在着安全脆弱点,而且现在软件安全性问题比过去更大,更加严重。其中的原因有三:第一个原因就是计算机网络的无所不在,这给攻击者寻求弱点提供了途径和方便性;第二个原因是现代信息系统及其相应程序的庞大和复杂,而且广泛使用的低级语言更加剧了弱点的存在;第三个原因就是软件的可扩展性。软件安全弱点随着上述因素的存在而在日益增加,这使得软件安全性问题比以往任何时候都更紧迫。了解软件中存在哪些可能的漏洞就显得很重要了。

一、软件安全漏洞分类

软件安全漏洞可以从不同的角度和层次进行分类,分类的目的是有助于更好的把握漏洞的共性,使漏洞的检测效率更高、针对性更强。
操作系统和绝大多数的协议通信软件都是使用C或C++开发的,该语言拥有简洁、使用方便、灵活、运算能力好、硬件访问能力强、可移植性好和程序执行效率高等诸多的优点,所以使用也是最为广泛的。本论文对漏洞的分类也主要从C或C++语台一的特点出发。软件安全漏洞从语言的角度说就是那些已经成功通过了编译器的编译,但编译器发现不了的,潜藏在程序源代码中的能引起安全故障的编程错误或遗漏。这些软件安全漏洞主要分为如下的几类:

(一)缓冲区溢出

引起缓冲区溢出漏洞的原因也很简单。从大的方面说就是使用了不安全的编程语言,比如C语言或C+十语言等,再加上程序员拙劣的编程技巧。从小的方面说就是语言自身没有边界检查,使得数组或指针的访问常常越界。
溢出漏洞导致的程序行为有:目标程序的执行很古怪;目标程序的执行完全崩溃;目标程序可以继续,而且没有任何明显的不同。其中第三种情况是最棘手的,也是最坏的情况,它掩盖了可能发生的攻击,使得软件的测试人员也不能发现问题。

(二)竞争条件

竞争条件,是一种常见的软件BUG。特别是在多进程多任务的现在操作系统面前情况更是严重。这个问题比起缓冲区溢出漏洞来说更难解决,一个程序可能几年来都一直运行正常,但是突然间就因为竞争条件BUG而出现异常,而这种异常表现又是不能确定的。即使发现了竞争条件问题的存在,想修正它也是十分困难,因为它们极少出现。
随着并行计算和分布式系统的开发和扩展,竞争条件问题近年来愈演愈烈。其中基于文件的竞争条件问题在安全方面一直是最臭名昭著的。大多数基于文件的竞争条件问题都有一个共同的规律:在使用文件之前都会对文件的属性进行检查。但是这个检查存在缺陷。这个缺陷在安全界被称为检查时刻使用时刻,缩写就是TOCTOU。当然了,涉及安全性的竞争条件TOCTOU问题不仅仅在访问文件的时候发生,在其他的各式各样的复杂系统中也常常出现。比如电子商务中的多数据库同步就是一个典型的竞争条件问题。

(三)格式化字符串

格式化字符串,漏洞是另一类微妙的程序代码缺陷。这个漏洞在几年前就已经被发布了,但是现在的很多软件产品仍然含有这个漏洞。格式化字符串是程序函数中特殊的一类字符串参数。除了可以利用格式化字符串漏洞显示重要信息外,最危险的就是它可以向内存中写入指定的数据。格式化字符串漏洞只要存在,就可以被用来在进程的内存空间中任意读写,其危害还是非常大的。所以这类漏洞是软件安全漏洞检测的一个重要方面。
(四)随机数
从事过安全研究的人都知道随机数在安全性应用中是很重要的。随机数可以用来生成序列号,甚至可以生成密钥。随机数被用在安全应用中就是一个安全弱点。所以在软件安全弱点中要把它也作为重要组成部分。

二、软件安全漏洞防范方法

(一)防止缓冲区溢出漏洞

防止缓冲区溢出的最好办法就是对程序中的危险函数进行详细检查。使用安全的版本来替换不安全的版论文导读:码算法,它提供了安全的随机数流,有足够的嫡,即使攻击者知道了全部算法的细节,也不能猜出生成的数据流。参考文献:【1】孙百勇,Web服务CGI安全漏洞分析与检测【J】,华中科技大学学报(自然科学版),2003,03/【2】杨义先等编著,信息安全新技术【源于:论文封面格式范文www.7ctime.comM】,北京邮电大学出版社,2002.上
本,例如使用Strncat来替换stcrat等等。计算机软件中完全没有BUG,是根本不可能的,除非软件足够小。即使上面的程序源码检查中没有发现缓冲区溢出问题,还是不能掉以轻心,还是有其它方法可以使用的,比如在Linux操作系统上使用的不可执行堆栈补丁程序和stackguard工具等都对缓冲区溢出有较好的保护。

(二)防止竞争条件漏洞

防止竞争条件漏洞的方法就是对能产生竞争的代码实行原子化操作。简单来说就是代码的执行是最小的单元,执行操作的时候,不会有其他的任何事情打断它的执行。原子化体现在代码上就是采用锁定的方式。
防范TOCTOU问题应该做到的是:避免直接使用文件名的系统调用,而是要使用文件句柄或者文件描述字。这样使用,可以保证处理文件时不会在背后被改变。而且不需要自己对文件进行访问检查,应该留给操作系统的底层文件系统函数处理。也就是说要避免使用access等函数调用。

(三)防止格式化字符串漏洞

防止格式化字符串漏洞的方法就是不要给攻击者任意构造格式串的机会。在代码中直接使用格式常量能有效防止这个漏洞。能产生格式化字符串漏洞的函数都是不定参数个数的函数,而且它们都不会对参数进行类型和个数检验。所以在使用这些函数时要确保参数的个数和类型是一一对应的。另外,还可以通过不可执行堆栈程序等在一定程度上防止该漏洞的利用;在Windows下使用窗口来输入输出数据在一定程度上可以避免该漏洞。

(四)防止随机数漏洞

防范随机数漏洞的一个好方法就是使用好的随机数发生器,一个好的随机数发生器本身就是一个算法,它提供了安全的随机数流,有足够的嫡,即使攻击者知道了全部算法的细节,也不能猜出生成的数据流。
参考文献:
【1】孙百勇,Web服务CGI安全漏洞分析与检测【J】,华中科技大学学报(自然科学版),2003,03/
【2】杨义先等编著,信息安全新技术【源于:论文封面格式范文www.7ctime.com
M】,北京邮电大学出版社,2002.