软件安全开发模型的研究精Word文件下载.docx
《软件安全开发模型的研究精Word文件下载.docx》由会员分享,可在线阅读,更多相关《软件安全开发模型的研究精Word文件下载.docx(8页珍藏版)》请在冰豆网上搜索。
在整个开发过程中,应当对开发人员进行安全培训和开发过程的安全监理。
图1为软件开发安全模型的框架示意图。
图1 软件开发安全模型的框架
1、安全需求
在用户需求和软件需求阶段,了解用户对安全性的要求,明确软件需要达到的安全性是非常重要的一点。
在设计阶段,根据用户的需求采取符合安全性要求的设计方案,才能保证软件的整体安全性。
(1安全需求定义
我们认为开发的安全需求,通常包括如下方面:
1开发成果的完整性;
2开发过程、开发成果的保密性;
3软件中没有安全隐患,包括设计的安全漏洞、编码引入的安全隐患等;
4
开发的软件不会引起法律纠纷;
5开发出来的软件产品,需要进行安全性检测和评估;
6软件开发和支持环境应当被严格控制。
(2确保开发成果(包括中间成果完整性的措施
软件安全开发模型的研究
国电自动化研究院信息所 余 勇 林为民
摘要 本文提出了软件安全开发的模型,包括安全需求、安全设计、安全编码、安全检测、对开发人员的安全培训和开发过程的安全监理。
关键词 安全需求 保密性 安全监理
为了保证开发成果的完整性、防止代码丢失,通常需要进行如下控制:
1进行备份,最好形成固定的备份制度。
如:
做到每天的增量备份,每周的完全备份,并有灾难恢复机制;
2进行软件配置管理、避免混乱,其中需要强调的是版本控制;
3对阶段成果进行评审、检查。
(3开发过程、开发成果保密性的措施
系统安全的一个重要属性就是信息的保密性,为了做到这点,通常需要进行如下安全控制:
1将开发的文档和代码存放在安全的地方,没有授权的用户不能访问;
2开发人员不得在外部邮件组、或不正确的邮件组讨论项目的进度、软件的设计、软件的代码;
3项目的关键文档,必须与项目的普通文档相区别,限制可以获得这些资料的人员。
整体设计文档、关键设计文档、核心源代码、软件的加密方法、license的实现等,禁止非核心人员获得此类文档;
4开发人员不得以技术交流的原因,把整个代码或文档的拷贝,和非项目组成员分享;
5不能在家(或其他非公司所在地开发和项目相关的内容,禁止以明文的方式通过网络传输项目内容;
6维护个人开发环境,避免个人开发环境被病毒感染、被攻击,从而泄漏项目开发的机密;
7项目文档需具有密级,严格控制代码访问,明确项目文档访问的权限,防止员工具有越权访问资源的权力。
(4软件开发和支持环境应当被严格控制
负责开发系统的管理人员应当对软件项目和支持环境的安全负责。
他们应该确保所有被提议的系统改动都进行了复审,使这些改动既不损害系统安全也不损害操作环境的安全。
2、安全设计
软件的设计分为概要设计和详细设计。
(1概要设计的安全考虑
概要设计中应考虑如下的安全性因素:
1系统输入的安全性,对错误输入、恶意输入的处理;
2系统内部数据传输的安全性;
3系统输出的安全性;
4系统内各模块的出错处理;
5运行中可能出现的各种异常情况,是否都有合适、安全的处理方法;
6软件的防盗版设计;
7如果是分布式系统,还要考虑网络传输的安全性(是否需要加密、加密的强度等,各分布模块的安全性,抗网络攻击的能力。
(2详细设计中的安全考虑
详细设计中应考虑如下的安全性因素:
1接口安全性(入口安全性检验;
2算法安全性;
3程序异常处理。
3、安全编码
经过良好设计的、具有良好习惯的编程风格的代码,相对来说,也具有较好的安全性。
通常良好的编码风格有:
使用安全的函数;
对输入的参数进行校验;
开发完成后,进行完备的单元测试,包括边界测试、语句覆盖测试;
开发完成后,确认错误和异常情况被正确地处理;
修改代码的同时,确保注释和文档进行了相应的修改;
在代码集成和引用方面还应注意不使用没有许可证权限的代码。
(1使用安全的函数
在调用某些函数时有一些常见问题。
尽管某种函数调用可能与安全性无关,但如果使用不当,仍会导致不易发觉的安全隐患。
如CopyMemory、CreateProcess、CreateProcessAsUser、CreateProcessWithLogonW、memcpy、sprintf、swprintf等函数在安全性方面尤为值得注意。
(2控制程序改动的步骤
为最小化信息系统的错误,执行改动时要进行严格控制。
应当实行正规的改动控制步骤,确保安全和控制步骤不被损害。
负责支持的程序员应只对那些与工作必要的部分系统享有访问权,并且确保改动已获得正式批准和同意。
该过程应包括:
1保留一份已达成协议的授权级别的记录;
2确保改动由经过授权的用户提出;
3对控制和步骤的完整性进行复审,确保不会因为改动而受到损害;
4检查所有需要修改的计算机软件、信息、数据库实体和硬件;
5在改动前,应获得对详细建议的批准;
6确保在任何改动实施前,被授权的用户接受这些改动;
7确保实施改动是为了减少业务中断;
8确保系统文档组在每一个改动完成后都做了更新,旧文档被存入档案或被处理;
9为所有软件更新保留一个版本控制;
10对所有的改动请求保留一份以备审查;
11确保在正确的时间进行改动,不能扰乱所涉及的业务过程。
(3对操作系统改动的技术复审
定期的改动操作系统是有必要的,如为了安装一个新的软件版本或补丁。
在改动后,应当对应用系统进行复审和测试,确保改动对操作或安全没有负面影响。
这个过程应当包括:
1对应用程序控制和步骤完整性的复审,确保它们不因操作系统的改动而受到损害;
2确保年度的支持计划和财政预算中包括了对这些操作系统改动的复审和系统测试;
3确保及时通知对操作系统的改动,使得在改动实施前能够进行适当的复审;
4确保业务连续性计划做了恰当的改动。
(4对软件包改动的限制
在使用中应当尽量不要修改厂商提供的软件包。
如果实在要修改,应当考虑以下几方面:
1软件内置的控制和完整性步骤被损害的风险;
2是否应当得到厂商的同意;
3从厂商那里得到所需改动的程序更新的可能性;
4将原来的软件保留,对该软件的副本实进行改动。
(5隐蔽通道和特洛伊程序
隐蔽通道可以通过一些间接的、隐藏的手段来暴露信息,它可以通过改变一个参数来被激活,而这些参数无论对于安全的还是不安全的计算系统都是可访问的,也可以通过在数据流中嵌入信息来激活隐蔽通道。
特洛伊程序被设计成以一种非法的、不易被注意的、不是程序用户和接收人所必需的形式来侵入系统。
应考虑从以下方面进行控制:
1只从声誉好的程序提供者处购买程序;
2以源代码的形式购买程序,使得程序可以被检验;
3使用经过安全评估的产品;
4在操作使用前审查所有源码;
5程序安装好后,对它的访问和修改要进行控制;
6聘用经过安全考核的员工进行关键系统的管理。
(6外包软件的开发
软件开发的工作由外部的人员或单位承担时,应当从以下几方面进行安全考虑:
1许可证问题,程序的所有权和知识产权问题;
2对所进行工作的质量和准确度的保证问题;
3对软件开发的质量和准确度审查的权利;
4关于程序质量的合约要求;
5在安装软件前进行测试,以防止特洛伊程序的植入。
(7程序中的出错和异常处理
正确输入的数据可能会由于处理错误或故意行为而出错,因此,程序的设计应当采取措施,以将导致完整性损失的风险降至最低。
需要考虑的因素包括:
1程序中用来执行对数据改动的加入与删除函数的使用情况和位置;
2防止程序在错误指令下运行;
3使用正确的程序进行处理失效的恢复,以保证程序正确地处理数据。
(8代码安全性的维护
如果对代码进行修改,填写修改记录能帮助我们在代码安全性维护上起很大的作用。
入口参数、数据结构、引用代码、代码改动的注释应该是清楚、完备的。
4、安全检测
软件的安全检测方法通常包括:
静态检测、动态检测、文档检查、接口安全性检测、出错处理检测、异常情况检测。
(1静态检测方法和工具
静态检测指在程序没有运行的情况下,检查程序的正确性。
静态检测工具不需要执行所测试的程序,它扫描所测试程序的上下文,对程序的数据流和控制流进行分析,然后给出测试报告。
静态检测方法包括:
1“重读”代码, “重读”的时候要注意检查以下几项:
是否检查了入口参数的类型;
是否检查了入口参数的值域;
是否有无用的代码和变量;
分配的空间是否都“干净”地释放了;
释放的指针是否都指向了NULL;
条件循环是否出现无限循环的情况。
2使用各种编译工具,检查程序。
3使用专门的静态检测工具,如检测C程序的 lint、splint等。
(2动态检测方法和工具
动态测试通过选择适当的测试用例,实际运行所测程序,比较实际运行结果和预期结果,以找出错误。
动态检测需要在动态检测程序运行的情况下,执行所测试的程序,通过对程序运行时的内存、变量、内部寄存器等中间结果进行记录,来检测程序运行态的正确性,单步跟踪、设置断点是其基本的方法。
动态检测工具方法包括:
1基于符号表的DEBUG工具,如 gdb。
2跟踪程序,如strace / ltrace。
(3文档检查
文档检查主要包括:
1规格说明书中是否有安全性的需求定义;
2概要设计说明书、详细设计说明书、技术白皮书中是否有对安全性的设计和描述;
3概要设计说明书、详细设计说明书、技术白皮书中对安全性的描述是否和需求一致;
4用户文档中是否提示了用户安全性相关事项。
(4接口安全性检测
入口检测主要包括:
1命令行输入的参数是任意的,尤其是setuid/setgid程序,一定要检查参数的有效性和合法性;
2文件描述符的安全性:
如文件权限读、写函数的安全性,标准输入、输出、出错的安全性;
3文件内容的安全性:
直接读取的文件,如果不被信任的用户能访问该文件或任何它的父目录,都是不可信任的;
4所有的Web输入都是不被信任的,都需要进行严格的有效性验证;
5字符集问题:
如果是新写代码,使用ISO 10646/Unicode,如果需要处理旧字符集,确保非法用户不能修改此字符集;
6是否过滤可能被重复解释的 html/url ;
7基于Web的应用程序,应该禁止http的“get”和“HEAD”,除非能限定它们只用于查询;
8设置输入数据的超时和加载级别限制,特别是对于网络数据更应如此。
出口检测主要包括:
1最小化反馈信息,使得黑客不能获得详细信息;
2反馈不要包含注释信息,特别是产生html文件的Web程序;
3是否处理了阻塞或响应缓慢的输出情况;
4是否控制了输出的数据格式(pringf系列函数问题;
5控制输出的字符编码;
6基于WEB的应用程序,不要运行用户访问Include 和 配置文件。
(5出错处理检测
主要包括:
1各种出错情况都被处理;
2给用户的出错信息,不会泄漏程序信息的细节。
(6异常情况检测
1软件的各种异常情况都被处理;
2软件的异常情况不会导致程序进入不可知情况。
5、安全培训
在软件开发整个过程中,都要对开发人员进行安全培训。
(1对环境、网络、代码、文档等方面的管理培训
主要培养员工维护开发环境、网络、代码的安全意识,了解开发规范的安全要求。
(2对配置管理的培训
使员工熟悉项目的配置管理工具、版本管理方法、变更管理方法等,对负责备份的人员进行备份方法、灾难恢复方法的培训,保证项目的正常进行。
(3对安全编程的培训
包括系统设计中的安全要素和可能出现的安全漏洞、编程中的常见安全问题、良好的编程习惯、进程的安全性、文件的安全性、动态链接库的安全性、指针的安全性、Socket 和网络通讯的安全性、避免缓冲区溢出、验证所有的输入、避免随意的输出信息、界面安全性、调用函数库的安全性。
(4对安全性测试的培训
包括在单元测试中测试代码的安全性、系统安全性测试的内容和方法、网络程序的安全性测试内容和方法、容错性和可靠性测试方法。
(5对知识产权意识的培训
培养员工使用第三方资源的知识产权意识,避免在设计和开发中引入法律纠纷的隐患。
6、安全监理
安全监理的主要作用是:
检查和控制开发流程,确保开发流程中各项安全措施的遵守。
安全监理应该由第三方担任,可以外包,也可以由公司的其他部门承担,不应由开发者担任这个角色。
安全监理的内容主要包括如下5部分。
(1开发环境的安全性
主要检查内容包括:
项目文档、代码存放是否安全;
是否有完善的备份制度;
是否有灾难恢复机制;
项目文档和代码的访问是否受控;
是否有代码和文档的版本管理;
开发的网络环境是否安全;
开发人员使用的邮件组是否安全。
(2开发流程的安全性检查和评估
程序员是否使用了“危险”的代码;
程序员的函数是否都检查了入口参数的合法性;
是否使用了XX的代码;
是否对第三方代码,没有进行安全性评估、测试,就直接使用;
测试用的“后门”,是否在发布版中去除;
程序员是否在代码中隐藏“恶意”的代码;
代码中是否有无用的代码。
(3开发各个环节的安全性措施是否被实施
是否对开发人员的邮件进行检查;
是否检查了代码和文档的访问权限。
(4开发各个环节的安全性要求是否被遵守
需求分析阶段,是否确认用户的安全性需求;
设计阶段,是否做了安全性的设计;
编码阶段是否采用良好的风格进行编程;
测试阶段,安全性测试是否执行;
安全性测试是否充分。
(5对出现的安全问题提出响应策略
是否有应对泄密的安全策略;
是否有发现软件中的安全漏洞的响应策略;
是否有软件完整性损坏的响应策略。
在软件开发过程中,遵循安全开发模型,开发人员将养成良好的编码风格和文档习惯,从而开发出安全可靠的软
参考文献
1.Information Security Management BS 7799:
1999.
伟世盾安推出自主硬件平台的抗拒绝服务设备
近日,北京伟世盾安信息技术有限公司推出了基于全新硬件平台的抗DoS/DDoS攻击系统产品。
此次更新的硬件平台是在国内完全自主研发和制造的,拥有自主版权,向芯片级别的安全又迈出了一步。
全新的硬件平台是基于集成电路设计技术在FPGA芯片上实现专用服务器这一概念,将TCP/IP协议栈以及代理服务器系统集成在单颗芯片上实现的。
FPGA是现场可编程门阵列(Field Programmable Gate Array的简称。
FPGA是融合了ASIC和网络处理器两种芯片优点的一种芯片。
利用FPGA芯片实现数据密集应用,有着得天独厚的优势,其原因在于:
FPGA芯片在内部通过逻辑电路完成计算功能,而不是像CPU依靠取指,分解成微指令代码,执行。
利用集成电路设计技术在FPGA上开发获得的处理能力功能远高于传统计算机体系结构服务器,在此基础上实现的天目抗DoS/DDoS攻击系统具有如下优点:
1线速级别的网络流量处理能力;
2高性能的攻击流量识别和过滤;
3极小的网络延迟;
4整个网络设备功耗非常低;
5散热量极小,无需专用风扇进行散热。