软件安全开发模型的研究精

上传人:206****923 文档编号:91112667 上传时间:2019-06-22 格式:DOC 页数:12 大小:42.50KB
返回 下载 相关 举报
软件安全开发模型的研究精_第1页
第1页 / 共12页
软件安全开发模型的研究精_第2页
第2页 / 共12页
软件安全开发模型的研究精_第3页
第3页 / 共12页
软件安全开发模型的研究精_第4页
第4页 / 共12页
软件安全开发模型的研究精_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《软件安全开发模型的研究精》由会员分享,可在线阅读,更多相关《软件安全开发模型的研究精(12页珍藏版)》请在金锄头文库上搜索。

1、 一、软件开发存在的安全问题随着Internet的普及以及软件和系统的日益复杂,人们对应用程序开发的安全性已经越来越重视了。在软件开发过程中常见的安全问题如下:(1没有明确用户对安全性方面的需求;(2设计上没有安全性的考虑;(3程序设计中的安全漏洞;(4代码中存在漏洞,如缓冲区溢出、对入口参数没有有效性检查等;(5为了测试方便,开发人员在程序中开的后门;(6开发人员在程序中植入恶意代码;(7引用别人的代码或公共源码,但没有经过安全性测试;(8开发人员使用的库函数,存在安全漏洞;(9代码存放不安全;(10代码的非授权访问;(11开发文档不安全;(12开发人员在外部邮件或不正确的邮件组中,泄漏开发

2、项目信息;(13未经许可,采用没有通过合法渠道获得的代码;(14开发人员泄漏软件的加密方法;(15开发人员泄漏软件的关键设计、代码和项目进展情况;(16在不安全的地方(家中、客户机器上修改、维护、讨论代码;(17开发的网络环境不安全。如何保证开发出来软件的安全性呢?对此,我们提出了软件开发的安全模型。二、软件安全开发模型框架软件开发安全模型首先应该了解软件开发中可能出现的安全问题,明确开发中的安全需求;然后保证程序设计、编码的安全性,并对开发出的软件进行安全性检测和评估。在整个开发过程中,应当对开发人员进行安全培训和开发过程的安全监理。图1为软件开发安全模型的框架示意图。图1软件开发安全模型的

3、框架1、安全需求在用户需求和软件需求阶段,了解用户对安全性的要求,明确软件需要达到的安全性是非常重要的一点。在设计阶段,根据用户的需求采取符合安全性要求的设计方案,才能保证软件的整体安全性。(1安全需求定义我们认为开发的安全需求,通常包括如下方面:1开发成果的完整性;2开发过程、开发成果的保密性;3软件中没有安全隐患,包括设计的安全漏洞、编码引入的安全隐患等;4 开发的软件不会引起法律纠纷;5开发出来的软件产品,需要进行安全性检测和评估;6软件开发和支持环境应当被严格控制。(2确保开发成果(包括中间成果完整性的措施软件安全开发模型的研究国电自动化研究院信息所余勇林为民摘要本文提出了软件安全开发

4、的模型,包括安全需求、安全设计、安全编码、安全检测、对开发人员的安全培训和开发过程的安全监理。关键词安全需求保密性安全监理 为了保证开发成果的完整性、防止代码丢失,通常需要进行如下控制:1进行备份,最好形成固定的备份制度。如:做到每天的增量备份,每周的完全备份,并有灾难恢复机制;2进行软件配置管理、避免混乱,其中需要强调的是版本控制;3对阶段成果进行评审、检查。(3开发过程、开发成果保密性的措施系统安全的一个重要属性就是信息的保密性,为了做到这点,通常需要进行如下安全控制:1将开发的文档和代码存放在安全的地方,没有授权的用户不能访问;2开发人员不得在外部邮件组、或不正确的邮件组讨论项目的进度、

5、软件的设计、软件的代码;3项目的关键文档,必须与项目的普通文档相区别,限制可以获得这些资料的人员。如:整体设计文档、关键设计文档、核心源代码、软件的加密方法、license的实现等,禁止非核心人员获得此类文档;4开发人员不得以技术交流的原因,把整个代码或文档的拷贝,和非项目组成员分享;5不能在家(或其他非公司所在地开发和项目相关的内容,禁止以明文的方式通过网络传输项目内容;6维护个人开发环境,避免个人开发环境被病毒感染、被攻击,从而泄漏项目开发的机密;7项目文档需具有密级,严格控制代码访问,明确项目文档访问的权限,防止员工具有越权访问资源的权力。(4软件开发和支持环境应当被严格控制负责开发系统

6、的管理人员应当对软件项目和支持环境的安全负责。他们应该确保所有被提议的系统改动都进行了复审,使这些改动既不损害系统安全也不损害操作环境的安全。2、安全设计软件的设计分为概要设计和详细设计。(1概要设计的安全考虑概要设计中应考虑如下的安全性因素:1系统输入的安全性,对错误输入、恶意输入的处理;2系统内部数据传输的安全性;3系统输出的安全性;4系统内各模块的出错处理;5运行中可能出现的各种异常情况,是否都有合适、安全的处理方法;6软件的防盗版设计;7如果是分布式系统,还要考虑网络传输的安全性(是否需要加密、加密的强度等,各分布模块的安全性,抗网络攻击的能力。(2详细设计中的安全考虑详细设计中应考虑

7、如下的安全性因素:1接口安全性(入口安全性检验;2算法安全性;3程序异常处理。3、安全编码经过良好设计的、具有良好习惯的编程风格的代码,相对来说,也具有较好的安全性。通常良好的编码风格有:使用安全的函数;对输入的参数进行校验;开发完成后,进行完备的单元测试,包括边界测试、语句覆盖测试;开发完成后,确认错误和异常情况被正确地处理;修改代码的同时,确保注释和文档进行了相应的修改;在代码集成和引用方面还应注意不使用没有许可证权限的代码。(1使用安全的函数在调用某些函数时有一些常见问题。尽管某种函数调用可能与安全性无关,但如果使用不当,仍会导致不易发觉的安全隐患。如C o p y M e m o r

8、y、C r e a t e P r o c e s s、CreateProcessAsUser、CreateProcessWithLogonW、memcpy、sprintf、swprintf等函数在安全性方面尤为值得注意。(2控制程序改动的步骤为最小化信息系统的错误,执行改动时要进行严格控制。应当实行正规的改动控制步骤,确保安全和控制步骤不被损害。负责支持的程序员应只对那些与工作必要的部分系统享有访问权,并且确保改动已获得正式批准和同意。该过程应包括:1保留一份已达成协议的授权级别的记录;2确保改动由经过授权的用户提出;3对控制和步骤的完整性进行复审,确保不会因为改动而受到损害;4检查所有需要

9、修改的计算机软件、信息、数据库实体和硬件;5在改动前,应获得对详细建议的批准;6确保在任何改动实施前,被授权的用户接受这些改动;7确保实施改动是为了减少业务中断;8确保系统文档组在每一个改动完成后都做了更新,旧文档被存入档案或被处理;9为所有软件更新保留一个版本控制;10对所有的改动请求保留一份以备审查;11确保在正确的时间进行改动,不能扰乱所涉及的业务过程。(3对操作系统改动的技术复审定期的改动操作系统是有必要的,如为了安装一个新的软件版本或补丁。在改动后,应当对应用系统进行复审和测试,确保改动对操作或安全没有负面影响。这个过程应当包括:1对应用程序控制和步骤完整性的复审,确保它们不因操作系

10、统的改动而受到损害;2确保年度的支持计划和财政预算中包括了对这些操作系统改动的复审和系统测试;3确保及时通知对操作系统的改动,使得在改动实施前能够进行适当的复审;4确保业务连续性计划做了恰当的改动。(4对软件包改动的限制在使用中应当尽量不要修改厂商提供的软件包。如果实在要修改,应当考虑以下几方面:1软件内置的控制和完整性步骤被损害的风险;2是否应当得到厂商的同意;3从厂商那里得到所需改动的程序更新的可能性;4将原来的软件保留,对该软件的副本实进行改动。(5隐蔽通道和特洛伊程序 隐蔽通道可以通过一些间接的、隐藏的手段来暴露信息,它可以通过改变一个参数来被激活,而这些参数无论对于安全的还是不安全的

11、计算系统都是可访问的,也可以通过在数据流中嵌入信息来激活隐蔽通道。特洛伊程序被设计成以一种非法的、不易被注意的、不是程序用户和接收人所必需的形式来侵入系统。应考虑从以下方面进行控制:1只从声誉好的程序提供者处购买程序;2以源代码的形式购买程序,使得程序可以被检验;3使用经过安全评估的产品;4在操作使用前审查所有源码;5程序安装好后,对它的访问和修改要进行控制;6聘用经过安全考核的员工进行关键系统的管理。(6外包软件的开发软件开发的工作由外部的人员或单位承担时,应当从以下几方面进行安全考虑:1许可证问题,程序的所有权和知识产权问题;2对所进行工作的质量和准确度的保证问题;3对软件开发的质量和准确

12、度审查的权利;4关于程序质量的合约要求;5在安装软件前进行测试,以防止特洛伊程序的植入。(7程序中的出错和异常处理正确输入的数据可能会由于处理错误或故意行为而出错,因此,程序的设计应当采取措施,以将导致完整性损失的风险降至最低。需要考虑的因素包括:1程序中用来执行对数据改动的加入与删除函数的使用情况和位置;2防止程序在错误指令下运行;3使用正确的程序进行处理失效的恢复,以保证程序正确地处理数据。(8代码安全性的维护如果对代码进行修改,填写修改记录能帮助我们在代码安全性维护上起很大的作用。入口参数、数据结构、引用代码、代码改动的注释应该是清楚、完备的。4、安全检测软件的安全检测方法通常包括:静态

13、检测、动态检测、文档检查、接口安全性检测、出错处理检测、异常情况检测。(1静态检测方法和工具静态检测指在程序没有运行的情况下,检查程序的正确性。静态检测工具不需要执行所测试的程序,它扫描所测试程序的上下文,对程序的数据流和控制流进行分析,然后给出测试报告。静态检测方法包括:1“重读”代码,“重读”的时候要注意检查以下几项:是否检查了入口参数的类型;是否检查了入口参数的值域;是否有无用的代码和变量;分配的空间是否都“干净”地释放了;释放的指针是否都指向了NULL;条件循环是否出现无限循环的情况。2使用各种编译工具,检查程序。3使用专门的静态检测工具,如检测C程序的lint、splint等。(2动

14、态检测方法和工具动态测试通过选择适当的测试用例,实际运行所测程序,比较实际运行结果和预期结果,以找出错误。动态检测需要在动态检测程序运行的情况下,执行所测试的程序,通过对程序运行时的内存、变量、内部寄存器等中间结果进行记录,来检测程序运行态的正确性,单步跟踪、设置断点是其基本的方法。动态检测工具方法包括:1基于符号表的DEBUG工具,如gdb。2跟踪程序,如strace/ltrace。(3文档检查文档检查主要包括:1规格说明书中是否有安全性的需求定义;2概要设计说明书、详细设计说明书、技术白皮书中是否有对安全性的设计和描述;3概要设计说明书、详细设计说明书、技术白皮书中对安全性的描述是否和需求

15、一致;4用户文档中是否提示了用户安全性相关事项。(4接口安全性检测入口检测主要包括:1命令行输入的参数是任意的,尤其是setuid/setgid程序,一定要检查参数的有效性和合法性;2文件描述符的安全性:如文件权限读、写函数的安全性,标准输入、输出、出错的安全性;3文件内容的安全性:直接读取的文件,如果不被信任的用户能访问该文件或任何它的父目录,都是不可信任的;4所有的Web输入都是不被信任的,都需要进行严格的有效性验证;5字符集问题:如果是新写代码,使用ISO10646/Unicode,如果需要处理旧字符集,确保非法用户不能修改此字符集;6是否过滤可能被重复解释的html/url;7基于We

16、b的应用程序,应该禁止http的“get”和“HEAD”,除非能限定它们只用于查询;8设置输入数据的超时和加载级别限制,特别是对于网络数据更应如此。出口检测主要包括:1最小化反馈信息,使得黑客不能获得详细信息;2反馈不要包含注释信息,特别是产生html 文件的Web程序;3是否处理了阻塞或响应缓慢的输出情况;4是否控制了输出的数据格式(pringf系列函数问题;5控制输出的字符编码;6基于WEB的应用程序,不要运行用户访问Include和配置文件。(5出错处理检测主要包括:1各种出错情况都被处理;2给用户的出错信息,不会泄漏程序信息的细节。(6异常情况检测主要包括:1软件的各种异常情况都被处理;2软件的

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号