软件安全开发-软件安全开发周期、开发语言1课件.pptx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《软件安全开发-软件安全开发周期、开发语言1课件.pptx》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 安全 开发 周期 语言 课件
- 资源描述:
-
1、第3章 软件安全开发教学目标 应掌握的知识要点:安全的软件开发周期;安全原则、规则及规章;安全需求:攻击用例;架构和设计评审/威胁建模;安全的编码原则;白盒/黑盒/灰盒测试;判定可利用性;软件的安全部署;软件安全编程。重点 安全的软件开发生命周期 软件安全编程 Web编程安全本节安排安全的软件开发周期软件开发语言内存安全进程和线程安全异常与错误处理输入安全3.1 安安全的软件开发周期全的软件开发周期定义 SSDL描绘了一种结构化方法,用以贯彻和实现安全的软件开发。SSDL方法体现了现代化快速应用程序开发研究计划带来的好处。这类研究计划在早期就开始考虑风险,贯穿每次软件构建的分析、设计和开发过程
2、,这已经日益成为一种流行的做法。3.1 安全的软件开发周期SSDL遵循的评估准则完备性 评估安全需求详尽定义的完备程度一致性 确保每项需求都不会与其他需求相矛盾可行性 评估可行性程度,即评估需求能切实使用现有技术实现的程度可测试性可测试性 评估可测试性,即评估测试方法能在多大程度上证明安全需求已经成功实现优先级优先级 帮助每个人理解就风险承担而言的需求的相对值规章规章 要求这种安全需求与本项目必须遵守的规章所规定的安全需求相符合3.1.1 安全的软件开发周期概述SSDL的组成部分3.1.1 安全的软件开发周期概述安全原则、规则及规章安全需求架构、设计评审和威胁建模安全的编码原则白盒、黑盒、灰盒
3、测试判定可利用性作用基于特定的官方规章来定义一份系统范围的规范,在其中定义将应用到本系统的安全需求。3.1.2 安全原则、规则及规章常见安全规范Sarbanes-Oxley Act of 2002(SOX)(The Graham-Leech-BlileyPayment Card Industry Data Security Standard3.1.2 安全原则、规则及规章安全需求获取过程3.1.3 安全需求获取安全需求的方法基于传统用例传统的用例设计方法只能用来满足功能性需求分析,对于安全需求的特殊性无法起到有效的作用基于问题框架它是从攻击者角度考虑系统安全问题反模型针对面向目标的需求分析方法
4、不能捕获由恶意的攻击行为所产生的障碍目标的缺点而给出的障碍目标获取方法和消解恶意障碍目标的方法3.1.3 安全需求反模型获取安全需求的步骤从系统中找出一些安全安全关键性的对象并为它们定义安全关注点;分析初始的反目标,识别出具有反目标意图的攻击者;进一步分析攻击者的动机,尽量获得攻击者的真实意图,得到更多的反目标;精简步骤3)中获取的反目标,直到反目标可以被攻击者直接实施或者可具体化为软件的防御漏洞。根据反目标,建立攻击者与软件系统之间的“发模型”;消解反目标,主要采用反目标弱化、反目标消除等手段,这些手段可作为安全目标。3.1.3 安全需求安全需求实例该应用程序将存储敏感的用户信息,这些信息必
5、须得到与HIPAA兼容标准的保护。为达到该目标,无论在哪里存储,都必须使用强加密来保护所有敏感的用户数据。该应用程序支持具有不同权限等级的多用户使用,为用户分配了多种权限等级,并定义了每一权限等级所授权执行的操作。需要定义并测试各种不同的权限等级和绕过授权攻击的缓解措施。该应用程序接受用户的输入,并将使用SQL。需要定义SQL注入攻击的缓解措施。必须对用户输入进行长度和字符有效性验证(必须定义合法的字符数据元素)。该系统需要对各个用户及其身份鉴别保持跟踪。要求密码有关的涉密信息必须安全地存储。该应用程序使用C或C+编写。代码必须以这样的方式编写:始终跟踪并检查缓冲区长度;用户输入不能更改格式化
6、字符串;整数值不允许溢出。若编译器支持栈探测方法,那就用这种方法。3.1.3 安全需求安全团队及早介入的好处安全团队及早介入可防止形成不安全的体系结构和安全性欠缺的设计,同样也有助于消除项目生命周期后期可能出现的应用程序行为的混乱。此外,及早介入还可使安全专家能够了解应用程度的哪些方面最关键,而从安全角度来看哪些要素风险最高。3.1.4 架构、设计评审和威胁建模威胁建模威胁建模-就是用来排定安全测试优先级的一种技术。通过威胁建模,在对应用程序的设计加以理解的基础上,可假定潜在的安全风险并对其进行评价。然后,根据攻击难易程度和攻击的影响严重性,将这些威胁进行分级并依次消除。3.1.4 架构、设计
7、评审和威胁建模建模过程威胁建模的好处威胁建模的好处在于能发现的问题与代码评审及测试的不同,能发现较高层次的设计问题,而不是实现方面的错误。通过威胁建模能够在编码实现为产品之前,及早发现安全问题。这有助于判断出应用程序的“风险最高”部分,这些都需要在整个安全开发工作中进行非常详细的审查。威胁建模另一个非常有价值的方面就是能让人有一种完备的感觉。3.1.4 架构、设计评审和威胁建模设计漏洞设计漏洞是一种设计中的缺陷,它使得程序不能安全地运行,而无论代码编写者如何完美地实现了这个程序都无济于事。实现漏洞是在实际软件代码编写中导致的安全性错误。3.1.5 安全编码原则静态分析工具及第三方检测静态分析工
8、具可通过扫描源代码或二进制静态分析工具可通过扫描源代码或二进制的可执行文件检测出许多实现错误。这些的可执行文件检测出许多实现错误。这些工具对于找出类似缓冲区溢出这样的问题工具对于找出类似缓冲区溢出这样的问题是非常有用的,其输出能帮助开发人员学是非常有用的,其输出能帮助开发人员学习在开始的时候就对这些错误进行预防。习在开始的时候就对这些错误进行预防。还可以使用第三方提供的服务,将代码发还可以使用第三方提供的服务,将代码发送给他们,由他们来分析并找出其中的缺送给他们,由他们来分析并找出其中的缺点。使用第三方服务的好处是他们会从适点。使用第三方服务的好处是他们会从适应性因素或用户需求方面来验证代码的
9、安应性因素或用户需求方面来验证代码的安全性。全性。3.1.5 安全编码原则白盒测试白盒测试常用于质量保证领域。可以认为是一种内部攻击。测试人员能够访问源代码和设计文档,这使得测试人员能够高效地工作。他们可以进行威胁建模或逐行审查代码,查找信息来指导测试数据的选择。白盒测试是找出安全漏洞最有效的方法,更多的信息可使测试接口更快且完整地生成。3.1.6 白盒、灰盒与黑盒测试黑盒测试黑盒测试是指以局外人的身份对系统进行分析,使用工具来检测系统的攻击面,并探查系统的内部信息。在没有系统内部知识时,测试人员要获得系统的情况。这时,信息泄露对于黑盒测试人员来说尤为重要,这是因为,相对于操作那些没有信息泄露
10、的程序来说,这些泄露出来的信息有助于测试人员获得系统更多的情况。3.1.6 白盒、灰盒与黑盒测试灰盒测试将软件在调试器中运行而加以测试是一种理想方式,通过这种方式,可混合使用黑盒测试和源代码,从而使测试人员获得灰盒测试带来的好处。3.1.6 白盒、灰盒与黑盒测试灰盒测试的好处如果在代码开发期间发现了问题,就要立即修补潜在可利用性的代码。但是,出于对打补丁开销的考虑,许多开发团队并不喜欢修补那些已经发布的或者已经投入生产的代码的安全缺陷。用于发现漏洞的灰盒方法为开发团队提供了关键的可利用性信息,这可以帮助他们就是否修补代码中的潜在漏洞做出决定。3.1.6 白盒、灰盒与黑盒测试判定漏洞的可利用性的
11、权衡因素攻击者企图探测并利用这个漏洞所需的访问权限和定位技术成功利用此漏洞能获得的访问级别或权限探测并利用此漏洞的时间和工作量因素探测和利用潜在的可靠性探测和利用尝试行为的可重复性3.1.7 判定可利用性判定漏洞的可利用性的权衡因素(续)时间某些漏洞可能需要相当长的时间来探测并利用。可靠性和再现性漏洞的严重程度取决于漏洞可被攻击者利用的可靠性和再现性如何。可靠性和再现性与漏洞是低级别的还是高级别的有关。访问利用漏洞通常能为攻击者提供比之前更多的访问权。通过漏洞得到的这种访问授权,其形式可能是用户权限、网络访问或对其他保护资源的访问权。定位要利用一个漏洞,攻击者必须能与这个存在漏洞的应用程序进行
12、交互,并能访问到含有该漏洞的代码。是否可以通过Internet进行攻击由这个应用程序是不是网络软件以及使用哪种协议进行通信决定。3.1.7 判定可利用性定义计算机软件的部署指计算机软件投入使用过程中的所有相关环节,部署软件系统涉及从计算机软件源头(可以理解为服务器端)将软件组成部分传递或复制到客户端,一旦软件被部署,客户就能使用软件系统。3.1.8 软件的安全部署意义软件部署的结果对软件系统运行时的性能,如反馈时长、系统稳定性、输入输出的数据量、易用性、安全指标等,有很重要的影响,而且这种影响作用对分布式软件系统更加明显。近年来,如何实现软件系统的优化部署是软件部署和分布式系统研究的重要内容。
13、随着软件系统复杂性和软件运行环境复杂性的不断增加,软件部署在软件生命周期中变得越来越重要。3.1.8 软件的安全部署软件部署目前存在的问题软件规模庞大工作环境多样性自调整问题适应问题安全问题3.1.8 软件的安全部署角色和职责问题在安全的软件开发生命周期中,安全是许多人的职责。不能将安全仅依赖于网络小组安装入侵检测系统和防火墙,以及运行一些用于安全的网络工具。重要的是要对角色和职责进行定义,这样,每个人都知道由谁测试什么内容,举例来讲,这样就可以使得应用程序测试团队不再假定网络测试工具也会捕捉到应用程序的安全漏洞。项目经理或产品经理应该编写安全策略基于指定的相关标准来编写。架构师和开发人员负责
展开阅读全文