近几年互联网的大量普及,软件安全问题开始愈加突显。因为互联网上的病毒和攻击者引起的身份窃取、数据丢失以及一般性的混乱事件已经随处可见。单单2008年第一季度,就有1474个不同的软件脆弱点报告上来,只有64个发布了相应的解决方案。也就是说解决率大约只有4%。应用软件安全将成为信息系统安全的下一个热点。
软件安全一般分为应用程序级别的安全性和操作系统级别的安全性。应用程序级别的安全性,包括对数据或业务功能的访问,在预期的安全性情况下,操作者只能访问应用程序的特定功能、有限的数据等。操作系统级别的安全性是确保只有具备系统平台访问权限的用户才能访问,包括对系统的登录或远程访问。
1基于软件工程的软件安全性保障框架
1.1传统开发方法在安全方面的不足
在传统面向对象项目开发过程中,在安全性方面存在以下不足:
1)设计阶段,由于以类为单位组织建模,因此它不能全面地反映软件系统的安全需求。
2)编码阶段,将数据和方法封装到类中的思想增强了数据的安全性和软件的模块化,但是有一些数据和方法是特定于应用的,对于系统安全方面的考虑比较少。
3)维护阶段,一般是系统在使用过程中发现了漏洞再去修补,不仅效率低而且工作量大。
2.2基于软件工程原理的软件安全性保障框架
本文依据系统安全工程的原理,将软件安全引入到软件开发生命周期之中。为了开发出安全的应用软件,提出一个软件安全性保障框架,将软件安全保障实施到软件开发的各个模块当中。
该框架具体分为:软件安全需求分析、软件安全设计与编码、软件安全检测与评估、漏洞响应和维护阶段。首先分析软件开发中可能出现的安全问题,了解项目的安全需求,之后再要保证程序设计和编码过程中的.安全性,开发完成后对软件进行安全性检测和评估,最后进行产品的维护,对产品中存在的漏洞问题进行响应和处理。
2.2.1软件安全需求分析
软件安全分析开始于项目开发初期并贯穿于整个系统生命周期的始终。在完成项目需求分析的同时,也要建立安全需求。在这个阶段主要完成两个任务:
1)软件需求危险分析计划制定
在系统需求分析阶段,首先建立软件安全需求定义,确保软件安全需求定义的正确性,然后制定一个危险分析计划。
2)写出初步的软件安全需求文档
安全分析的结果应写成软件安全需求文档,应用到软件需求文档、软件设计文档、软件测试计划、软件维护计划中去。
2.2.2软件安全设计和编码阶段
安全从设计开始。设计阶段如果出了安全问题,那下一步的测试维护工作会更加困难而又低效。这个阶段主要有三个任务:
1)进行软件设计危险分析
明确在设计阶段有哪些安全方面的目标需要达到,识别软件可能会遇到的攻击和一些安全隐患,划出安全边界、哪些数据是比较可信的、哪些输入接口较易成为攻击目标、列出潜在的攻击方式等,确保设计的完整性和正确性。
2)软件安全设计
进行安全分析之后,还必须进行软件安全设计。设计时要注意尽量降低危险发生率,对可能发生危险的地方要提供警告,危险发生后采取有效措施进行控制,同时还要注意所额外增加的复杂度。
3)基于编码的软件安全分析
在软件代码编写阶段,也要注意编码过程中是否会引入新的危险,因为编码人员可能会不小心使用一个不安全的函数。除了要求编码人员提高程序质量之外,还可以使用第三方的安全编译来提高编码阶段的安全水平。
2.2.3软件安全检测与评估阶段
软件安全性测试是软件安全开发生命周期不可缺少的一个组成部分,测试中的投入要远远小于项目完成后再进行的漏洞修补和安全维护。
安全性测试和普通的功能性测试的测试目的是不同的。软件安全测试的目的是确保软件不会去完成没有预先设计的功能,而且所有预料到的危险已经被消除或减轻。如代码运行过程中系统是不是处于安全的状态,系统运行风险是否可以接受,操作人员的失误包括极端环境在内的各种异常和故障是否被妥当控制,尽可能找到软件中的所有漏洞,减少软件遭到攻击的可能性。
软件的安全检测通常包括一下几个方面:静态检测、动态检测、文档检查、出错处理和异常情况检测。
1)动态检测
选择合适的测试用例,实际执行待测程序,通过分析程序运行时的内存、变量、内部寄存器等中间结果来检测程序运行时的正确性。
2)静态检测
静态检测是在程序没有运行的情况下,静态分析程序的数据流和控制流,然后给出相应的测试分析报告。
3)检查文档
检查需求说明书、概要设计说明书、详细设计说明书中是否有对安全性的设计和描述,对安全性的描述是否和需求一致,还有用户文档是否有安全性注意事项等。
4)出错处理和异常情况检测
保证各种出错和异常情况都被处理,提示给用户的出错信息不会涉及到程序设计的细节,而且软件的异常情况不能导致程序进入不可知的危险情况。
2.4.4漏洞响应和维护阶段
即使我们在需求分析,软件设计,代码编写,以及软件测试过程中都加入了安全因素的考虑,最终的软件产品还是可能会存在漏洞,所以漏洞响应和维护是很重要的一个环节,软件的维护和跟踪,响应、修复漏洞是很重要的。漏洞发现后要在第一时间采取措施,确保客户的利益不被侵害。这个阶段大致可分为以下两个阶段:
1)漏洞响应
发现漏洞,首先通知客户收到漏洞报告,联系相关的开发部门进行技术细节的分析,为漏洞进行风险评估。
2)修复漏洞
开发部门和安全响应部门协商进行解决方案的制定,对修复漏洞的补丁进行严格测试之后对外公布安全补丁,发布安全简报。
3结论
真实有效的安全解决方案能为开发安全的关键软件提供好的思路。本文运用系统安全工程的原则,对软件安全工程进行详细分析,提出初步的软件安全性保障框架,详细论述了框架各阶段的安全分析工作,并结合实际提出一些实用的改进方法,有一定的参考价值,希望在大量的实际应用中逐步完善成为使用有效的软件安全性保障方案。
参考文献:
[1]软件安全速成课企业系统有多脆弱?[EB/OL]. [2]软件系统的安全必须能够经受住正面的攻击
[3]于东辉.基于面向方面的软件安全框架的研究[D].大连:大连理工大学,2005.
[4]蔡霞,陈基熊.软件安全及有关技术浅析[J].计算机应用,1999(11).
[5]崔丹丹,张二峰.软件安全问题初探[J].商场现代化,2009(2).
[6]余勇,林为民.软件安全开发模型的研究[J].计算机安全,2005(4).
【软件安全性保障框架研究论文】相关文章: