首页 理论教育 探究软件安全隐患的成因

探究软件安全隐患的成因

时间:2023-06-09 理论教育 版权反馈
【摘要】:1)软件生产没有严格遵守软件工程的流程。实际上,有些程序在实验室阶段根本不会出现安全隐患,如以下代码:表示将input字符串复制到buffer中,即使在开发阶段的测试过程中让这个函数产生缓冲区溢出,也不会产生攻击效果。因此在开发阶段很难意识到这个问题,使得软件留下安全隐患。从软件工程客观角度讲,软件的安全性隐患又来源于以下几个方面。2)安全问题的不可预见性。3)由于软件需求的变动。

探究软件安全隐患的成因

软件出现安全隐患,并造成损失,一方面是由于黑客,但是从开发者角度,几乎都有一个共同的基本原因:那就是由于软件在设计、编码、测试和运行阶段,没有发现软件中的各种漏洞,导致软件的不安全。

从严格的定义上来讲,软件安全隐患一般可以分为两类:错误和缺陷。错误是指软件实现过程中出现的问题,大多数的错误可以很容易发现并修复,如缓冲区溢出、死锁、不安全的系统调用、不完整的输入检测机制和不完善的数据保护措施等;缺陷是一个更深层次的问题,它往往产生于设计阶段并在代码中实例化且难于发现,如设计期间的功能划分问题等,这种问题带来的危害更大,但是不属于编程的范畴。业内一般将这两个概念放在一起讲,通常不去刻意区分错误和缺陷。

那么造成软件不安全的原因是什么呢?首先,站在软件开发者的角度,软件不安全的原因可以归纳为以下几种。

1)软件生产没有严格遵守软件工程的流程。由于缺乏经验或者主观(如片面追求高进度)的原因,软件的设计者和开发者没有统一的管理,可以在软件开发周期的任意时候,随意删除、新增或者修改软件需求规格说明书、安全威胁模型、设计文档、源代码、整合框架、测试用例和测试结果、安装配置说明书,使得软件的安全性保证大大减弱。

大多数系统软件或其他商业软件,结构都相当复杂,而且由于考虑到软件的扩展性,它们的设计更巧妙,也更复杂。在运行的过程中,这些系统又可以在大量不同的状态之间转换,这个特性使得开发和使用持续正常运行的软件,变成一件很困难的事情,更不用说持续安全运行了。面对不可避免的安全威胁和风险,项目经理和软件工程师必须从开发流程做起,让安全性贯穿整个软件开发过程。就大多数相对成功的软件工程案例而言,如果在软件缺陷方面对项目经理和软件工程师进行系统的培训,可以避免软件的许多安全缺陷。

2)编程人员没有采用科学的编程方法。在软件开发的过程中没有考虑软件可能出现的问题,仅仅将能够想到的安全问题停留在实验室内进行解决。实际上,有些程序在实验室阶段根本不会出现安全隐患,如以下代码:

表示将input字符串复制到buffer中,即使在开发阶段的测试过程中让这个函数产生缓冲区溢出,也不会产生攻击效果。只有在“精心”设计之后,才可能对系统造成攻击。因此在开发阶段很难意识到这个问题,使得软件留下安全隐患。

3)测试不到位(不过有时是无法到位)。主要是测试用例的设计无法涵盖尽可能典型的安全问题。(www.xing528.com)

一般测试用例只是设计输入正确的用户名和密码,看能否正常登录;再输入错误的用户名和密码,看能否得到相应的错误提示。但是攻击者如果输入某些和SQL注入有关的值,就有可能在不需要知道用户名和密码的情况下登录到系统,进而知道系统中的其他信息或对系统中的内容进行修改。

从软件工程客观角度讲,软件的安全性隐患又来源于以下几个方面。

1)软件复杂性和工程进度的平衡。如上所述,软件规模大且复杂,不仅仅是编码工作量的提高,更重要的是其中需要考虑的问题更加复杂,测试用例规模也呈指数级增长,但是工程进度只是按照软件规模进行适当的延长,因此很多问题来不及解决,软件带着缺陷投入使用。

2)安全问题的不可预见性。主要是软件工程师对运行的实际情况不了解,在测试时做出过于简单的假设。有些问题,包括对软件的功能、输出和软件运行环境的行为状态,或者外部实体(用户、软件进程)的预期输入,都无法完全考虑到,而入侵者有足够的时间进行入侵方法的研究。

3)由于软件需求的变动。软件规格说明书或设计文档无法一开始就确定下来;在现代软件工程中,很多软件的需求变动,导致其设计本来就是变动的,很多安全问题可能在变动的过程中被忽略。

4)软件组件之间交互的不可预见性。如客户可能在运行软件的过程中,自行安装第三方提供的组件,开发者根本无法知道客户的软件将要和什么组件交互,也就不清楚软件在运行的过程中出现何种安全问题。

因此,不管采用了什么样的措施,软件的安全问题都无法完全避免。即使在需求分析和设计时可以避免(如通过形式化方法),或者在开发时可以避免(如通过全面的代码审查和大量的测试),但缺陷还是会在软件汇编、集成、部署和运行时被引入。不管如何忠实地遵守一个基于安全的开发过程,只要软件的规模和复杂性继续增长,一些可被挖掘出来的错误和其他缺陷是肯定存在的。人们所能做的工作就是尽量让安全问题变少,而不可能完全消灭安全问题。因此,本章介绍的安全编码技术,不是为了消除安全隐患,而是为了尽量减少安全隐患。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈