基于生命周期的应用软件开发安全策略浅析
2019-05-23陈波
陈波
摘要:随着计算机网络技术的不断发展,软件在全社会各行业得到了广泛的应用,很大程度上也提高了企业的生产效率,但是软件的安全问题也随着软件的广泛应用而渐渐地暴露出来,并且呈现出越来越紧急的态势,由于软件存在的安全漏洞被利用最终导致的企业损失的利益问题也是越来越多。基于此,本文提出了基于应用软件开发生命周期的安全策略,将安全策略应用到软件开发的各个阶段中,尽可能减少最终软件产品中存在的漏洞。
关键词:软件安全;生命周期;安全策略
中图分类号:TP393 文献标识码:A
文章编号:1009-3044(2019)08-0217-02
软件的安全问题贯穿了软件开发的整个过程,是软件开发与维护生命周期的各个环节都必须解决的技术问题,本文从软件开发的各个阶段来提出对应的安全策略。
1 基于生命周期的应用软件开发安全策略解析
1.1 需求分析阶段的安全策略
需求分析阶段主要是从系统的角度理解软件并评审用于产生计划估算的软件范围是否恰当,在这个阶段我们需要通常需要跟业主方进行当面沟通,去倾听和挖掘业主方的需求,然而站在业主方角度,业主方通常会使用平舌话的语言来描述需求,而站在技术人员的角度通常会用专业技术的语言来描述需求,这种情况可能会带来双方的理解偏差。我们的安全策略在这个阶段是一定要考虑到人性化,用业主方听得懂的语言来进行沟通而不是采用技术化的语言,我们还可以采用问卷调查的方式。
1.2 系统设计阶段的安全策略
系统设计是基于需求分析的成果,对系统做深层次的分析,从而得出一系列行之有效的系统实现方案,使整个项目在逻辑上和物理上能够得以实现。系统设计的任务包括构建系统框架,设计系统功能,描述系统流程,建立系统的数据模型、接口模型及界面模型,形成系统的逻辑结构,告诉程序员软件系统应该“怎么做”。
在设计阶段引入的漏洞已经成为软件安全问题的一个主要来源,由于缺乏应用的语义与语境信息,网络和操作系统层次上提供的安全技术无法使得应用系统免于攻击。因此,需要在软件设计阶段尽早识别软件面临的威胁,提前评估其安全态势,并设计相应的应对方案,从而增强软件系统的安全性。为此,我们提出威胁建模技术进行安全架构分析,依次执行分解应用程序,实行攻击面最小化分析,确定面临的威胁,进行威胁评估,最后,我们再进行全面的安全架构设计。
1.3系统开发阶段的安全策略
软件系统开发阶段目标是按照系统设计阶段产生的文档,进行软件系统功能开发,整合各个功能模块,实现系统的集成运行,并满足需求分析阶段提出的性能要求,具体任务是将详细设计的结果转化为用具体程序设计语言编写的程序代码。
1.3.1代码静态分析
代码静态分析,是对源代码进行分析,找出存在缺陷的代码,一般会结合静态程序分析工具使用,采用机器学习,语义精简等技术,来检测类如死锁、空指针、资源泄露、缓存区溢出等问题,在这里我们重点是要进行软件缺陷检测,挖掘软件程序潜在的漏洞问题。
1.3.2代码动态分析
代码动态分析是与静态分析技术相對而言的,动态分析技术一般是通过观察程序在运行过程中的状态,如寄存器内容,函数执行结果,内存使用情况等等,分析函数功能,明确代码逻辑,挖掘可能存在的漏洞,代码流和数据流通常是动态调试分析技术关注的两个方面。动态调试常用的工具有Debug、WinDbg、Olydbg等。
1.3.3建立安全编码规则
在编码阶段,开发人员的安全意识水平和安全编程能力将直接影响系统自身的安全性和健壮性。规范对开发人员的编码提出统一的安全要求,我们提出以下几种安全编码原则:
1.3.3.1最小功能性原则
软件应该只包含那确实真正需要的功能:(1)只运行明确定义的功能(2)系统调用只在确实需要的时候(3)只在确实需要的时候访问数据。
1.3.3.2最小授权原则
应采用适当的身份验证和权限分配模式,确保程序功能实现严格遵循“最小权限”和“需要知道”安全原则。
1.3.3.3谨慎使用多任务和多进程
应尽量使用单任务的程序,如果软件需要使用多任务和多进程,应同步所有的进程和任务以避免冲突。
1.3.3.4界面输出最小化
用户界面应只提供必需的功能,确保用户不能通过用户界面直接访问数据或者直接访问被保护对象。
1.3.3.5代码应尽量简单
尽量使用结构化的编程语言,尽量避免使用递归和Go to声明语句,应尽量使用简单的代码,清除不必要的功能,防止采用信息隐藏方式进行数据保护。
1.3.3.6提供备份机制
为保证运行数据的完整性和可用性,应设计有效的备份策略,根据业务和系统维护需要提供定期或不定期、自动或手动方式的备份机制。
1.3.3.7其他编码规则
其他涉及的安全编码规则主要存在于输入处理、输出处理、数据库访问、文件操作、安全特征等方面。
1.4测试与验证阶段安全策略
软件测试是程序的执行过程,目的在于发现错误,一个好的测试用例在于能够发现至今尚未发现的错误,一个成功的测试是发现了至今未发现错误的测试。在测试阶段我们着重提出软件开发的环境分离,职责分离:生产环境对开发和测试只开放查询权限;修改权限时需要经过一定的机制来控制记录,一般只在调试程序时开放修改权限;测试环境对开发只开放查询权限;需要修改权限时要经过确认,一般只在调试程序时开放修改权限;开发环境对测试人员只开放查询权限;以上三个环境,都由专人负责升版(跑脚本)维护。
实际上,软件的安全性测试,对测试人员有着极高的专业素质,不仅要有精湛的攻击技术,而且能够具备黑客思维,能够从软件的各个方面设计方案来抵御有可能的黑客攻击,排除有可能的漏洞
1.5发布与维护阶段安全策略
发布阶段是软件由程序变成成品的阶段,在这个阶段实施人员应该注重软件的开发环境与生产环境一致,而在维护阶段,我们的维护人员主要是处理系统漏洞,随着新的黑客技术的不断产生,任何系统都不会是绝对安全的,所以最终的产品总是会存在漏洞,但是漏洞一旦被发现,我们必须要做出最快的响应,首先我们要确认漏洞产生的原因,并及时的修复漏洞,以免企业的生产受到威胁,最严重甚至导致系统瘫痪,导致企业的利益受到侵占,一般漏洞被确认后,通常要分为3个阶段,首先,发现漏洞后通知厂商,并将漏洞报告给安全响应中心,然后,确认漏洞并进行风险评估,最后修复漏洞并发布漏洞补丁,以及做出相应的安全简报。
2结语
不难看出,安全问题涉及软件开发的各个阶段,软件的安全运行在企业生产过程中起着举足轻重的作用,这就对软件开发的过程提出了更高的要求,必须将安全性考虑到软件开发的各个阶段中,使得软件开发能够前后呼应,在软件开发的初期将安全问题进行全面的分析,在软件开发的后期也能够省出很大的人力和物力,也为软件成品的安全性提高了坚实的基础。
参考文献:
[1] 李昕陈,智李俐.开源软件安全问题与对策[J].计算机安全,2008(4).
[2] 崔丹丹,张二峰.软件安全问题初探[A].商场现代化,2009(2).
【通联编辑:光文玲】