软件安全开发流程
软件工程的出现是为了应对因为软件的需求量大量增加而出现软件开发的“软件危机”而产生的。所谓的软件工程就是借鉴传统工程的方法进行软件开发,软件工程中经典的软件开发流程包含几个阶段,分别是需求分析、概要设计、详细设计、编码、测试、运行和维护。
软件工程的出现,使得研发出质量过关、成本合算的软件产品成为常态,“软件危机”的问题得到了解决,但是随着软件使用的进一步广泛,软件产品在人们生产和生活中所占的地位越来越重要,出现了新的问题,就是软件安全。而原有的软件开发的工程流程无法很好地解决软件安全问题。
以原有的软件工程中的软件开发流程为基础,并参考已有的软件安全开发流程SDL,进行适当的改造,提出一种新的软件安全开发流程。
一、现有的软件安全开发流程
1、SDL介绍
随着软件使用的普及,已经有一些有识之士对软件安全问题有所研究,并有一些可以使用的成果,在这之中,软件安全开发流程也应运而生。迄今,最为普及的软件安全开发流程是微软提出的软件安全开发周期—-SDL,这个流程的典型之处在于它把安全工作贯穿于整个软件开发的生命周期中,而且,即使仅仅是对其中的一个过程进行安全工作,也能大大提高软件的安全性。下面对SDL进行简单的说明。在一个完整的软件SDL实施过程中,一共可以分为13个阶段。
(1)安全教育和提高安全意识;(2)项目启动;(3)定义并遵从设计最佳实践;(4)产品风险评估;(5)产品风险分析;(6)为客户创建安全文档,工具;(7)安全编码策略;(8)安全测试策略;(9)安全推动活动;(10)产品最终安全评审;(11)安全响应计划;(12)产品发布;(13)执行安全响应。
SDL可以有效地提高软件安全性,降低软件安全问题。据微软提供的相关数据显示,使用SDL进行开发的WindowsVista所发现的安全漏洞比没有使用SDL的Windows Xp减少45%;使用SDL开发流程的sQLServer2005发现的安全漏洞比没有使用SDL的SQL Server2000减少91%。
SDL具有一些明显的优势,它既可整体使用也可以在某一个阶段使用,灵活性高,而且它与一般的开发流程比较匹配,所以实用性很高。另外,SDL不仅仅适合微软的平台,还适用于多种平台;SDL有比较充分的工具支持,例如威胁建模和静态源代码分析工具;SDL属于微软开发,所应有的文档非常详细。
2、SDL应用现状
通过2010年在美国旧金山的RSA会议上对软件开发流程与安全结合的调查数据发现,目前的软件公司已经开始关注软件的安全问题,而且其中超过50%的调查参与者表示对SDL进行关注。但是进一步的调查数据显示,在开发过程中真正应用了SDL的参与者仅仅13%。
没有使用软件安全开发流程的调查参与者也给出了自己的理由,主要是其时间成本、资源成本以及暂时的安全意识。由此看来,即使对软件安全开发流程的关注度越来越高,但是其实际使用情况仍不够理想。通过调查发现,企业规模是影响是否使用安全开发流程的重要因素之一。大企业可以承担更大的资源投入,保证安全工具和安全活动的费用,而一些中小企业对投入有一定的担忧。
二、对SDL的改进
有大量的数据证明,软件安全测试介入的时间越晚,所需要的付出越多。在软件发布后对安全漏洞的修复所需的成本至少是在软件设计和编码阶段就进行修复的30倍。
SDL的出现正是为了解决上述问题,但是现有的SDL具有一定的限制性,为了提高SDL的适用对象,降低其经济要求,将SDL进行了适当的改造。经过改造的软件安全开发流程的核心是安全知识库,安全知识库在软件生命周期中一直有效,并起到不同的作用。为了将软件开发流程变得更加灵活,将软件开发周期简化为需求、设计、测试、维护4个阶段。在这4个阶段中,采取不同的活动来提高软件安全性。
1、软件安全知识库
在所改造的软件开发流程中,安全知识库是最核心的存在,它可以包含很多内容,包括产品风险库,软件安全漏洞库,软件安全开发设计规则,安全工具,甚至包括一些相应的安全知识培训。
产品风险库:包括在项目开展之初的需求风险和已经评估的风险。安全工具:包括网络安全测试工具以及白盒安全测试工具。例如AppScan,Sninffer;白盒安全测试工具包括Fortify或者CheckMarx。安全知识文档:项目累积的安全经验文档或者培训文档。安全漏洞库:能够收集到的相关的产品安全漏洞,包括网络和代码级。安全设计规则:安全开发基础知识,例如编码规则。安全知识库在软件安全开发流程中的地位极其重要,在每一个开发阶段都可以使用安全知识库中的内容。
2、软件开发需求阶段
需求阶段的主要工作是需求收集和需求分析。在这个阶段,可以根据安全知识库的产品风险库对产品需求进行分析,把隐含安全风险的需求重新设计,或者计算针对某些功能或者过程不进行安全活动将会有多大的损失。
3、软件安全设计阶段
设计阶段分为概要设计和详细设计。概要设计阶段,将主要是对软件架构设计,软件模块功能定义,在这一阶段需要参考产品风险库和漏洞库,对一些已知的安全问题进行预处理,尤其是一些网络软件,面对各种广为人知的攻击手段做出相应的设计。
详细设计阶段的工作主要是代码编写,这时要根据漏洞库---主要是白盒安全漏洞和安全设计规则进行编码。对于白盒安全漏洞,现在已经有比较成熟的定义,例如fortify对白盒安全漏洞的分类和定义,参考这些漏洞分类,结合已经比较成熟的保证编码质量的编码规则进行详细设计工作。
4、软件安全测试阶段
软件安全的测试工作,主要分为3种类型,第一种是模糊测试:这种测试的原理是向目标系统发送非预期的输入并观察结果来发现软件漏洞。一般是设置大量非正常形数据进行解析,并包含了对网络协议和不信任的访问所产生的问题代码的测试。第二种是渗透测试:这种测试是为了证明网络防御按照预期设置正常运行的一种机制。它主要用来测试网络和主机系统的操作配置以及补丁的修复程度,较多的是使用模拟攻击发现信息系统中的漏洞,发现系统的脆弱性。第三种是运行时验证:对运行中的问题进行验证,用来完成常规运行中的测试和对问题日志的分析。可以使用缺陷分类表或者风险分类表来对测试出的缺陷进行统计,使用相应的测试方法修复发现的缺陷。
在这一阶段,可以大量的使用安全工具进行测试,比如网络软件的安全,使用一些渗透性测试工具进行测试(如Ac-tivePerl,Sniffer);代码级的安全测试,主要依靠一些静态测试工具和动态测试工具,比如专门代码静态安全测试的forti-fy,CheckMarx;还有一些对于软件使用环境和整体软件系统的安全测试,例如美国的安全软件nessus。现在,软件安全测试工具越来越多,已经涌现出许多成熟的或者有特点的商业的或者开源的软件安全测试工具,国内也有一些不错的软件安全工具,例如启明星辰天镜或者安华明鉴,这些都为实施软件安全的测试工作提供便利。在这一阶段,从成本考虑出发,大量的开源工具是优先考虑的。
5、软件维护阶段
维护阶段的工作主要是处理已经出现的安全问题并且将问题和处理方法搜集入安全知识库,为以后的软件安全开发提供知识储备。
经过简化后的软件安全开发流程仅仅包括了需求、设计、测试、维护4个阶段,这4个阶段都需要使用到安全知识库,所以建立的这套流程核心仍然是安全知识库。改造后的软件安全开发流程更加灵活,可是适应不同的开发流程,一旦建立安全知识库后,也可以在不同的阶段开展软件安全开发工作,降低安全成本。
总结
软件安全开发生命周期的应用主要是为了减少安全漏洞和降低安全漏洞的影响。但是软件开发仅仅是基于目前最优的安全方案,新的攻击手段层出不穷,所以安全问题和软件漏洞是不可能被彻底消除的。
软件安全工作现在更多的是体现在安全测试上,在软件安全开发上进行的工作仍然稀少,这与现有的软件开发流程所需成本较高,流程复杂有一定关系。通过对现有的软件安全开发流程SDL进行简化以适应中小企业的需要,也可以作为一些敏捷开发或者流程简单的开发使用。优化后的软件开发流程主要有这几个优点:开发时间更灵活,强调安全工具包括免费工具的使用,流程进行了简化,成本有所降低。
以上就是我们深圳市组创微电子有限公司为您介绍的对软件安全开发流程的研究。如果您有智能电子产品的软硬件功能开发需求,可以放心交给我们,我们有丰富的电子产品定制开发经验,可以尽快评估开发周期与IC价格,也可以核算PCBA报价。我们是多家国内外芯片代理商,有MCU、语音IC、蓝牙IC与模块、wifi模块。我们的拥有硬件设计与软件开发能力。涵盖了电路设计、PCB设计、单片机开发、软件定制开发、APP定制开发、微信公众号开发、语音识别技术、蓝牙wifi开发等。还可以承接智能电子产品研发、家用电器方案设计、美容仪器开发、物联网应用开发、智能家居方案设计、TWS方案开发、蓝牙音频开发、儿童玩具方案开发、电子教育产品研发。
- 返回顶部