CISP软件安全开发课件.ppt

上传人:牧羊曲112 文档编号:2166666 上传时间:2023-01-23 格式:PPT 页数:80 大小:1.91MB
返回 下载 相关 举报
CISP软件安全开发课件.ppt_第1页
第1页 / 共80页
CISP软件安全开发课件.ppt_第2页
第2页 / 共80页
CISP软件安全开发课件.ppt_第3页
第3页 / 共80页
CISP软件安全开发课件.ppt_第4页
第4页 / 共80页
CISP软件安全开发课件.ppt_第5页
第5页 / 共80页
点击查看更多>>
资源描述

《CISP软件安全开发课件.ppt》由会员分享,可在线阅读,更多相关《CISP软件安全开发课件.ppt(80页珍藏版)》请在三一办公上搜索。

1、,软件安全开发,课程内容,2,知识域:软件安全开发概况,知识子域:软件安全开发背景了解软件的发展和产生的安全问题了解软件安全问题产生的原因,3,软件安全的基本概念,软件的定义计算机程序、方法、规则和相关的文档资料以及在计算机上运行时所需的数据(IEEE)软件安全采用系统化、规范化、数量化的方法来指导构建安全的软件软件安全基本概念使安全成为软件开发的必须部分软件安全工程化三个支柱:风险管理、软件安全切入点、安全知识,4,软件安全问题广泛存在,软件应用广泛电脑游戏、火车票售票系统、多媒体教学手机、航天飞机、人造卫星软件安全问题广泛存在运行错误售票系统反应慢、连不上、崩溃多媒体教学系统死机黑客盗取泄

2、漏的银行密码安全问题日益增加,5,软件安全问题产生后果,软件安全问题的后果造成产品运行不稳定,得不到正确结果甚至崩溃可靠性、可用性被恶意攻击,导致信息泄漏/数据破坏等后果保密性、完整性一些因软件安全问题导致的严重后果售票系统瘫痪美国放射治疗仪超剂量辐射事件阿丽亚纳5号火箭首发失败事件Stuxnet病毒攻击伊朗布什尔核电站,6,软件产生安全问题的原因,内因软件开发安全意识淡薄软件开发缺乏安全知识软件趋向大型化和复杂化软件第三方扩展增多外因软件使用场景更具威胁,7,软件越来越复杂,8,eg.Windows 系列软件源代码行数,漏洞与软件安全,漏洞普遍存在平均每1000行程序存在20个缺陷(Dace

3、y 2003)采用严格的软件开发质量管理机制和多重测试环节,软件公司的缺陷率(千行代码):普通软件开发公司的缺陷密度为440个缺陷高水平的软件公司的缺陷密度为24个缺陷美国NASA的软件缺陷密度可达到0.1个缺陷漏洞已经成为危害软件安全的主要因素危及用户对软件的信任、业务运营,还会危及一系列关键基础设施和应用,9,传统的软件开发局限性,10,需要安全的软件开发!,需要安全的软件,理想的安全软件不存在安全漏洞能抵御各种攻击威胁按照预期的方式执行:do what is intended软件安全保障的思路通过在软件开发生命周期各阶段采取必要的、相适应的安全措施来避免绝大多数的安全漏洞。采取措施只能有

4、效减少,但并不能完全杜绝所有的安全漏洞。,11,软件安全保障,软件可以规避安全漏洞而按照预期的方式执行其功能目标:在软件开发生命周期中提升软件的安全性可信赖性:无论是恶意而为还是无意疏忽,软件都没有可利用的漏洞存在可预见性:对软件执行时其功能符合开发者的意图的信心。遵循性:将(软件开发)跨学科的活动计划并系统化,以确保软件过程和软件产品满足需求、遵循相关标准。,12,软件安全保障与风险管理,在软件安全保障中,需要贯彻风险管理的思想“安全就是风险管理”软件安全是以风险管理为基础安全不必是完美无缺的,但风险必须是能够管理的最适宜的软件安全策略就是最优的风险管理对策这是一个在有限资源前提下的最优选择

5、问题防范不足会造成直接的损失;防范过多又会造成间接的损失,13,软件安全开发生命周期,软件安全开发采取措施防止由于设计、开发、提交、升级或维护中的缺陷而导致的系统脆弱性20世纪末/21世纪初开始展开研究安全软件开发生命周期思想:安全软件开发涵盖了软件开发整个生命周期通过软件开发的各个步骤来确保软件的安全性,其目标是确保安全的软件得以成功,安全软件开发生命周期,思想:将安全融入在设计/开发/测试等过程中融入安全在传统的过程中增加安全过程思想:安全提前介入NIST:在软件发布以后进行修复的代价是在软件设计和编码阶段即进行修复所花代价的30倍软件系统发布以后才进行漏洞修复代价是最高的,且常常伴随着软

6、件系统使用者的极大损失思想:软件安全开发标准化和规范化规范指南最佳实践,15,降低解决软件安全问题的代价,早期发现并改正错误有以下优点在软件开发生命周期中,后面的阶段改正错误开销比前面的阶段要高出数倍早期发现并改正错误可以减少时间和开销,16,知识域:软件安全开发概况,知识子域:软件安全开发模型及研究了解安全开发生命周期(SDL)的发展历程,理解SDL的主要内容了解使安全成为软件开发必须的部分(BSI)系列模型了解综合的轻量级应用安全过程(CLASP)的主要内容了解软件保障成熟度模型(SAMM)的框架了解各个模型的特点及适用性,17,可信计算安全开发生命周期,微软,2002.1,盖茨安全开发生

7、命周期SDL(The Trustworthy Computing Security Development Lifecycle)自 2004 起,SDL 作为全公司的计划和强制政策,在将安全和隐私植入软件和企业文化方面发挥了重要作用。通过将整体和实践方法相结合,SDL 致力于减少软件中漏洞的数量和严重性。SDL 在开发过程的所有阶段中均引入了安全和隐私。,18,SDL发展历史,2002.1今20 世纪 90 年代中期到后期(Melissa)和 21 世纪初期(Code Red、Nimda、UPnP 等)出现了一系列影响重大的恶意软件事件,促使微软重新考虑开发人员安全过程和策略,19,SDL的阶

8、段和安全活动,软件安全开发生命阶段5+2=7个阶段16项必需的安全活动,20,SDL每个阶段用到的工具,21,IE采用SDL后的效果,22,Source:Browser Vulnerability Analysis,Microsoft Security Blog 27-NOV-2007,采用SDL之前,采用SDL之后,漏洞总数降低了35%高危漏洞数降低了63%,正式发布后12个月内修复的漏洞总数,BSI系列模型,BSI使安全成为软件开发必须的部分Building Security IN,BSIGray McGraw,Cigital公司在整个软件开发生命周期中要确保将安全作为软件的一个有机组成部

9、分。无须改变你的软件开发方法适用各种软件开发生命周期合作NIST美国国土安全部大学(加州大学戴维斯分校、普林斯顿、莱斯),23,软件安全的三根支柱,三根支柱应用风险管理(战略)软件安全接触点(战术)知识,24,接触点模型,接触点,即在软件开发生命周期中保障软件安全一套最优方法、一种战术性方法在每一个开发阶段上尽可能地避免和消除漏洞“黑帽子”和“白帽子”,25,BSIMM,BSI成熟度模型Building Security In Maturity ModeGary McGraw、Brian Chess和Sammy Migues使用SSF对所有项目进行描述了解别人的安全项目过程,指导自己的安全项目

10、目标是对真实的软件安全项目所开展的活动进行量化构建和不断发展软件安全行动的指南BSIMM 3.02011年42个公司(Microsoft、Intel、Google、),26,BSIMM结果图,27,SSF,SSF(Software Security Framework)软件安全框架,28,SAMM,OWASP SAMMSoftware Assurance Maturity Mode软件保证成熟度模型OWASP(开放Web应用安全项目)一个开放的框架,用以帮助制定并实施针对软件安全特定风险的策略评估一个组织已有的软件安全实践;建立一个迭代的权衡的软件安全保证计划;证明安全保证计划带来的实质性改善

11、;定义并衡量组织中与安全相关的措施。,29,SAMM,规定了四个软件开发过程中的核心业务功能治理:组织管理其软件开发的过程和活动构造:组织在开发项目中确定目标并开发软件的过程与活动验证:组织测试和验证软件的过程与活动部署:组织软件发布的相关管理过程与活动4个成熟度级别0-3级,30,OWASP SAMM,31,CLASP,综合的轻量应用安全过程(Comprehensive,Lightweight Application Security Process(CLASP))选取了30个特定的基于角色的活动(activities),用于提升整个开发团队的安全意识,并针对这些活动给出了相应的指南、导则和

12、检查列表,32,CLASP介绍,基于角色项目经理、需求分析师、软件架构师、设计者、实施人员、集成和编译人员、测试者和测试分析师、安全审计员对于每个活动,CLASP描述了以下内容安全活动应该在什么时间、应该如何实施如果不进行这项安全活动,将会带来的多大的风险如果实施这项安全活动,估计需要多少成本,33,各模型比较,34,知识域:软件安全开发关键工作,知识子域:软件安全需求和设计了解软件安全需求分析和安全设计的重要性理解软件安全设计基本原则理解影响系统安全性的6类威胁,以及威胁建模过程,35,软件安全需求及安全设计的重要性,安全编码?安全测试?传统方法:软件发布后测试、等待修复BugGary Mc

13、Graw:50%的安全问题由设计瑕疵引起安全提前介入,效益高,成本低,36,设计缺陷举例Microsoft Bob明文存储口令,甚至将口令拿到客户端对比验证,软件安全需求及安全设计的重要性,软件安全需求和设计是开发安全软件的基础软件安全需求分析以风险管理为基础,建立“威胁”分析计划建立软件安全需求定义,确保软件安全需求定义正确安全需求应文档化软件安全设计软件系统的每一项需求,都应该在软件安全设计阶段认真考虑,37,安全设计原则,最小特权权限分离最小共享完全中立心理可接受默认故障处理经济机制不信任纵深防御保护最薄弱的环节公开设计隐私保护攻击面最小化,受攻击面概念,什么是受攻击面对一个软件系统可以

14、采取的攻击方法集合,软件的功能、API、接口、资源、数据存储等都是受攻击面为什么要降低受攻击面一个软件的攻击面越大安全风险就越大,39,降低受攻击面的方法,第一步:分析产品功能第二步:分析访问功能第三步:采取合理措施降低特权,40,降低软件受攻击面策略,重要等级为低的功能:攻击面大,取消该功能重要等级为中的功能:攻击面大,设置为非默认开启,需要用户配置后才予以开启重要等级为高的功能:攻击面大,关闭或限制一些接口方式,增加一些安全的保证措施或技术,41,降低受攻击面对于提高软件源代码安全性至关重要!,减少软件受攻击面,42,威胁建模,什么是威胁建模威胁建模是了解系统面临的安全威胁,确定威胁风险并

15、通过适当的缓解措施以降低风险,提高系统安全性的过程。为什么要威胁建模帮助在设计阶段充分了解各种安全威胁,并指导选择适当的应对措施对可能的风险进行管理可以重新验证其架构和设计有助于软件的受攻击面降低,43,威胁建模流程,确定对象识别威胁评估威胁消减威胁,44,威胁,降低威胁,漏洞,攻击者,威胁建模流程,45,STRIDE建模方法,STRIDE建模微软SDL中提出发现或纠正设计级(design-level)的安全问题,46,理解STRIDE威胁,47,消减威胁举例,48,消减威胁,知识域:软件安全开发关键工作,知识子域:软件安全编码理解通用安全编码准则:验证输入、避免缓冲区溢出、程序内部安全、安全

16、调用组件、禁止使用不安全函数等理解使用安全编译技术对提高编码安全水平的作用,了解常用安全编译技术理解源代码审核的目的及方式,了解常见源代码静态审核工具,49,通用安全编码准则,验证输入避免缓冲区溢出程序内部安全安全调用组件禁止使用不安全函数,50,验证输入,安全程序第一道防线是检查每一个不可信的输入DirectXMIDI 库,难以检查所有的输入,可能导致IE被恶意利用检查、验证或者过滤输入不让恶意数据进入程序后续处理类似网络中部署防火墙何处检查最初接收数据时(第一次)使用数据时,51,验证输入常见输入源,命令行参数数量、数据格式、内容环境变量环境变量可能超出期望有的环境变量存储格式存在危险文件

17、不信任可以被不可信用户控制的文件内容不信任临时文件网络来自网络的数据是“高度不可信的”其他来源,52,验证输入常见数据类型,字符串确定合法范围,拒绝非法字符(串)0(NIL)行结束编码0 x0a(unix)0 x0d 0 x0a(dos,windows)0 x0d(APPLE MacOS)0 x85(IBM OS/390)特定字符系统字符分割字符,53,验证输入常见数据类型,数字数字检查(正则表达式/ASCII值)负数检查(大数溢出为负数)Sendamil 攻击合法范围检查文件名最好不让用户设置文件名避免特殊字符./-rf./com1,54,验证输入常见数据类型,电子邮件地址限制合法的电子邮件

18、地址UTF-8变长编码URI/URL非法地址在合法地址后面增加恶意内容,55,避免缓冲区溢出,缓冲区溢出缓冲区:包含相同数据类型的实例的一个连续计算机内存块溢出:数据被添加到分配给该缓冲区的内存块之外外部数据比目标空间大是一个非常普遍而且严重的问题,56,避免缓冲区溢出,溢出后果攻击者可以使远程服务程序或者本地程序崩溃攻击者可以设计溢出后执行的代码C/C+语言语言特性决定大量的库函数存在溢出strcpy、strcat、gets等其他语言调用C语言库C#允许设置“不安全”例程,57,避免缓冲区溢出解决办法,解决办法编码避免缓冲区溢出填充数据时计算边界、动态分配内存、控制输入使用替代的安全函数或函

19、数库使用没有缓冲区溢出问题的函数:strncpy、strncat、C+中std:string使用替代库:Libmib、libsafe使用更新更安全的编译环境,打开具有安全防御机制的安全编译选项StackGuard、ProPolice、/GS非执行的堆栈防御不可在堆栈上执行代码,58,程序内部安全,程序内部接口安全程序内部接口数据的检查assert异常安全处理检测异常,安全处理各种可能运行路径检测到某些错误行为/数据,必须以合适的方式处理,保证程序运行安全必要时立即拒绝服务,甚至不回送详细的错误代码,59,程序内部安全,最小化反馈避免给予不可靠用户过多的信息成功或失败作为跟踪检查的日志可以记录较

20、为详细的信息认证程序在认证前尽量少给信息(版本)如果程序接受了密码,不要返回它避免拒绝服务攻击输入错误尽快返回设置超时延时服务,60,程序内部安全,避免竞争条件访问共享资源时(文件/变量)没有被适当地控制使用原子操作使用锁操作避免死锁安全使用临时文件很多安全漏洞发生在访问已知文件名或可猜测的临时文件时,61,安全调用其他组件,应用程序实际上几乎都不会是自包含的,它们通常都会调用其他组件底层的操作系统数据库可重用的库网络服务(WEB、DNS),62,安全调用其他组件,组件安全检查组件文档,搜索相关说明gets随机数使用经过认可的组件尽可能不调用外部命令,如果不得已要调用,必须严格检查参数syst

21、em、open、exec、,63,安全调用其他组件,返回值安全一定要检查返回值,调用是否成功成功时检查返回值,是否按照期望值处理数据中可能含有 NUL 字符、无效字符或其他可能产生问题的东西错误时检查错误码传递数据安全视安全需求和安全环境考虑传输加密,包括密码算法和安全协议,64,禁止使用不安全函数,编码中禁止使用的危险函数举例,65,安全编译,使用最新版本编译器与支持工具使用编译器内置防御特性gcc-Wall-Wpointer-arith-Wstrict-prototypes-O2,66,源代码审核,源代码审核就是检查源代码,检测并报告源代码中的可能导致安全弱点的薄弱之处。人工审核费时费力容

22、易遗漏工具审核速度快,自动可升级知识库,67,源代码审核关注编码中的实现缺陷,通常通过静态分析工具进行,它们扫描源代码,能够发现大约50%的安全问题。,代码审核工具,商业工具 CoverityFortifyOunce LabsSecureSoftware免费/开源工具BOONCqualXg+FindBugs,68,“好”的源代码分析工具,安全性安全审核,不要以功能为主多层性软件的多层架构、多层平台、多种语言可扩展性扩展规则、扩展技术知识性主用于分析,开发者也能“学到”安全编程知识集成性支持与IDE集成,支持make、ant等工具,69,为什么要软件安全测试?,软件测试按照特定规程,发现软件错误

23、的过程。检查软件是否满足规定的要求,或是清楚地了解预期结果与实际结果之间的差异其目的在于发现软件中的错误软件安全测试有关验证软件安全等级和识别潜在安全缺陷的过程查找软件自身程序设计中存在的安全隐患,并检查应用程序对非法侵入的防范能力传统测试仅考虑软件出错时的处理,没有考虑对软件的故意攻击,70,安全测试,在应用投产前,应由独立的安全团队对应用的安全性进行综合评估功能性安全测试对抗性安全测试传统测试方法白盒测试黑盒测试灰盒测试特定的安全测试手段模糊测试渗透测试,71,模糊测试,模糊测试(Fuzz测试)Baron Miller、Lars Fredriksen、Bryan So首次提出是一种通过提供

24、非预期的输入并监视异常结果来发现软件故障的方法模糊测试可以基于黑盒、灰盒、白盒而实现。不关心被测试目标的内部实现设计输入,检测结果,发现安全漏洞微软SDL包含了Fuzz测试,72,非常有效的漏洞挖掘技术,已知漏洞大部分都是通过这种技术发现的。,Fuzz测试,强制软件程序使用恶意/破坏性的数据并进行观察结果的一种测试方法不够强壮的程序会崩溃编码良好的程序正常运行特性方法学 基于应用场景涉及的随机值大量测试用例查找漏洞或可靠性错误,73,Fuzz测试步骤,生成大量的畸形数据作为测试用例将这些测试用例作为输入应用于被测对象监测和记录由输入导致的任何崩溃或异常现象查看测试日志,深入分析产生崩溃或异常的

25、原因,74,影响模糊测试效果的关键因素,测试点数据通道入口、可信边界点样本选择选择覆盖面广、便于测试的多个样本数据关联性智能模糊测试自动化框架异常监控与异常恢复分析评估,75,渗透测试,渗透测试通过模拟恶意黑客的攻击方法,来评估系统安全的一种评估方法从攻击的角度测试软件系统是否安全使用自动化工具或者人工的方法模拟黑客的输入,找出运行时刻目标系统所存在的安全漏洞优点找出来的问题都是真实的,也是较为严重的缺点只能到达有限的测试点,覆盖率较低,76,渗透测试流程,77,渗透测试要点,测试目的是进行安全性的评估,不是摧毁或破坏测试人员技术、知识和经验很重要像“坏人”一样思考问题安全问题系统备份和恢复措施测试风险控制,78,灵活安排自己的“组合”,代码审核+体系结构风险评估基于风险的安全测试+渗透测试安全需求分析+滥用案例开发代码审核+渗透测试体系结构风险分析+基于风险的测试,79,必须完整的遵循“安全开发”过程吗?,谢谢,请提问题!,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号