软件安全03安全软件工程.ppt
软件安全技术,第3部分 安全软件工程,3.1 SSE-CMM3.1.1 SSE-CMM背景及发展3.1.2 SSE-CMM主要内容3.1.3 关于安全软件工程-基于SSE-CMM的实施3.1.4 关于SSAM3.2 SDL,3.1.1 SSE-CMM背景与发展,SSE-CMM背景知识开发SSE-CMM的目的:降低开发和维护系统的花费;提高工程进度和预算的一致性;选择合适的承包者。发起者国防部;国家安全局。,SSE-CMM项目发展,1993年4月开始酝酿;1996年10月出版了SSE-CMM模型的第一个版本;1997年4月出版了评定方法的第一个版本;1999年4月出版了第二版;正在申报国际标准ISO/IEC 21827。测评中心于1999年4月将第二版翻译成中文。,能力方面,3.1.2 SSE-CMM主要内容,能力级别,能力级别非正式执行公共特征执行基本实施能力级别计划与跟踪公共特征计划执行规范化执行验证执行跟踪执行,能力级别充分定义公共特征定义标准过程执行已定义的过程协调安全实施能力级别定量控制公共特征建立可测的质量目标客观地管理过程的执行能力级别连续改进公共特征改进组织能力改进过程的有效性,域方面,工程和安全实施是安全工程过程中必须存在的性质,指出特殊过程区的目的并属于该过程区,每个过程区(PA)是一组相关安全工程过程的性质,当这些性质全部实施后则能够达到过程区定义的目的。,一组过程区指出活动的同一通用区,SSE-CMM的22个过程区(PA),管理安全控制评估影响监视影响评估威胁评估脆弱性建立保证论据协调安全监视安全态势提供安全输入指定安全要求验证和证实安全,质量保证管理配置管理项目风险监控技术活动规划技术活动定义组织的系统工程过程改进组织的系统工程过程管理产品系列进化管理系统工程支持环境提供不断发展的技术和知识与供应商协调,3.1.3 关于安全工程与评估,安全工程分三个基本过程:风险、工程和保证风险过程是要确定产品或者系统的危险性,并对这些危险性进行优先级排序工程过程是针对面临的危险性,安全工程过程与相关工程过程一起来确定并实施解决方案保证过程是建立起对解决方案的信任,并把这种信任传达给顾客,风险,评估结果,SSAM(SSE-CMM评定方法),SSAM 为了进行评定,收集数据广泛、严格,每个数据有充分的证据。此方法在评定过程中最大程度地发挥了SSE-CMM模型的功效。此方法:决定实施安全工程过程的能力;为了评定定义了安全工程环境;在评定时巧妙地使用了SSE-CMM体系结构中的两个方面。,3.2 SDL-安全开发生命周期模型,3.2.1 关于SDL(Secure Development Lifecycle)3.2.2 SDL概览3.2.3 SDL各个阶段特征,3.2.1 关于SDL,什么是 SDL?Secure Development Lifecycle微软可信计算(TrustWorthy Computing)努力的一个组成部分基于并行理念的标准软件开发过程基于威胁建模和测试,设计安全:为了保护软件自身以及软件处理的信息,并抵御攻击,软件应该从架构,设计和实现上进行考虑,3.2.2 SDL概览,SDL从三个方面考虑软件安全的保障。,缺省安全:设计者应该假定安全缺陷将会出现。为了当攻击者对软件存在的缺陷进行攻击时使损害降到最小,软件的缺省状态应该保证安全。比如,最小特权原则。,提交安全:工具和指南应该随着软件提供以帮助最终用户或管理员安全使用。关于软件的更新应该容易提交。,SDL过程(SDL13阶段模型),第0阶段教育和意识,第1阶段项目启动,第2阶段定义并遵从最佳设计实践,第3阶段产品风险评估,第4阶段风险分析,第5阶段创建安全文档工具及客户最佳实践,第6阶段安全编码策略,第7阶段安全测试策略,第8阶段安全推进活动,第9阶段最终安全评审,第10阶段安全响应规划,第11阶段产品发布,第12阶段安全响应执行,第0阶段:教育和意识,第0阶段教育和意识,第1阶段项目启动,第2阶段定义并遵从最佳设计实践,第3阶段产品风险评估,第4阶段风险分析,第5阶段创建安全文档工具及客户最佳实践,第6阶段安全编码策略,第7阶段安全测试策略,第8阶段安全推进活动,第9阶段最终安全评审,第10阶段安全响应规划,第11阶段产品发布,第12阶段安全响应执行,安全教育的主要内容基础内容(1):,可信计算概述SDL简介安全设计基础:受攻击面分析深度防御最小特权安全默认配置,安全基础教育内容(2),威胁建模设计威胁建模编码威胁建模测试威胁建模安全编码实践缓冲区溢出,整型数值问题跨站脚本攻击SQL注入攻击弱加密机制微软.NET规范问题JAVA规范问题,安全教育持续教育内容(1):,安全的软件设计、开发与测试基础模糊测试精要威胁建模精要实施威胁消减措施安全设计与架构:久经考验的设计原则SDL介绍与最终评选过程安全工具概述实战安全代码评审安全编程实践安全BUG精要,持续教育内容(2),受攻击面分析漏洞开发打包过程需求安全响应加密范例客户隐私,成功的安全 教育与意识培训要素:,管理层明确支持富有经验的演讲者持续进行的改进,第1阶段:项目启动,第0阶段教育和意识,第1阶段项目启动,第2阶段定义并遵从最佳设计实践,第3阶段产品风险评估,第4阶段风险分析,第5阶段创建安全文档工具及客户最佳实践,第6阶段安全编码策略,第7阶段安全测试策略,第8阶段安全推进活动,第9阶段最终安全评审,第10阶段安全响应规划,第11阶段产品发布,第12阶段安全响应执行,项目启动阶段主要内容:,判断SDL是否覆盖应用任命安全顾问组建安全领导团队确保在BUG追踪管理过程中包含安全、隐私类BUG建立BUG标准,第2阶段:定义并遵从设计最佳实践,第0阶段教育和意识,第1阶段项目启动,第2阶段定义并遵从最佳设计实践,第3阶段产品风险评估,第4阶段风险分析,第5阶段创建安全文档工具及客户最佳实践,第6阶段安全编码策略,第7阶段安全测试策略,第8阶段安全推进活动,第9阶段最终安全评审,第10阶段安全响应规划,第11阶段产品发布,第12阶段安全响应执行,定义并遵从最佳设计阶段主要内容:,常见安全设计原则受攻击面分析与降低,包括两部分内容,常见安全设计原则:,经济机制:代码尽可能简单、紧凑。软件愈复杂,出现安全BUG的可能性愈高。默认失效保护:任何请求缺省应加以拒绝。安全中介:每个访问受保护对象的行为应当被检查。公开设计:与“不公开即安全”的原则相对应。设计自身不应具有神秘感。权限分离:切勿允许基于单一条件的操作过程。最小特权:只授予执行操作所必须的最小特权。最少公共机制:使公共资源尽可能少。心理可接受程度:安全产品与技术是否容易使用?用户能否接受?与UI的密切配合。,受攻击面分析:,受攻击面分析:枚举所有接口、协议以及可执行代码的过程。软件的受攻击面:代码接口服务协议其他,受攻击面降低:,核心观点:在所有代码中存在至少一个或多个漏洞的可能性一定不为零,一部分严重漏洞会导致用户不得不接受妥协。唯一解决上述问题的方法是将代码的利用率降至为零。受攻击面降低的方法:综合考虑尽善尽美的安全与无法规避的风险二者之间的关系,尽可能减少未经信任的用户可能接触到的代码比例,受攻击面降低具体方法可以概括为:,降低默认执行的代码量限制可访问到代码的人员范围限定可访问到代码的人员身份降低代码所需权限。,降低受攻击面的流程,降低受攻击面的流程(步骤),开始,多数用户使用该特性?,多数用户使用所有细节特性?,该特性可远程访问?,该特性匿名用户可用?,执行该特性使用低特权?,需要匿名访问该特性?,该特性需要远程访问?,结束,关闭或禁用该特性,访问限制为子网或本地机器,访问限制为可信用户,降低特权,Yes,No,Yes,No,Yes,Yes,Yes,No,No,No,Yes,No,第3阶段:产品风险评估,第0阶段教育和意识,第1阶段项目启动,第2阶段定义并遵从最佳设计实践,第3阶段产品风险评估,第4阶段风险分析,第5阶段创建安全文档工具及客户最佳实践,第6阶段安全编码策略,第7阶段安全测试策略,第8阶段安全推进活动,第9阶段最终安全评审,第10阶段安全响应规划,第11阶段产品发布,第12阶段安全响应执行,SDL第3阶段的主要内容:,安全风险评估隐私影响分级统一各种因素,安全风险评估:,安装问题受攻击问题移动代码问题安全特性相关问题常规问题,隐私影响分级:,和隐私问题相关的几个定义匿名数据不唯一且不必绑定到某个特定用户,也无法追溯到发起者的任何用户数据。个人身份信息(PII)任何可唯一识别用户的用户数据或与用户PII相混合或者关联的数据或者PII敏感数据敏感PII任何用于识别个人且容易导致身份被盗或欺诈行为的用户数据。如社会保险号码、信用卡号或与PII相混合或关联,如密码等授权类数据,生物学统计信息(如指纹)或与PII相混合或关联,可用于区分个人喜好、政治或宗教信仰、种族、工会等或与PII相混合或关联,包含疾病史、健康记录及财务信息等或包含未知内容,可能保留有敏感PII数据,如内容数据等,隐私分级(3级的分类方法),隐私分级1:满足以下任何一项,具有最高隐私分级该软件储存PII或传输PII该软件目标是针对儿童或对儿童产生吸引力,或包含任何可以了解年龄的用户体验(按美国法案要求,收集PII需要成人权限,必须保护13岁以下儿童)该软件不间断监控用户行为该软件安装新的软件或改变用户文件类型的关联(如改变JPEG解码程序),隐私分级,隐私分级2:该软件传输匿名数据给开发人员或第三方隐私分级3:如果软件不包含隐私分级1、2中任何一种行为,则被划分为隐私分级3,统一各种因素(Pulling It All Together),一旦确定应用程序的安全与隐私风险,即必须在日程表中排出响应时间,以确保应用必要的技能以减少客户所面对的全面风险。,第4阶段:风险分析,第0阶段教育和意识,第1阶段项目启动,第2阶段定义并遵从最佳设计实践,第3阶段产品风险评估,第4阶段风险分析,第5阶段创建安全文档工具及客户最佳实践,第6阶段安全编码策略,第7阶段安全测试策略,第8阶段安全推进活动,第9阶段最终安全评审,第10阶段安全响应规划,第11阶段产品发布,第12阶段安全响应执行,风险分析或威胁建模的益处:,有助于整个风险管理过程在系统进入编码阶段前发现系统威胁开发团队通过威胁建模可以重新验证其架构与设计有助于进一步明确针对应用以及环境采取相应的解决对策有助于指导整个代码审核过程指导整个渗透测试过程,威胁建模过程:,定义应用场景收集外部依赖列表定义安全假设创建外部安全备注绘制待建模应用的一个或多个数据流图确定威胁类型识别系统威胁判断风险规划消减措施,第5阶段:创建安全文档、工具以及客户最佳实践,第0阶段教育和意识,第1阶段项目启动,第2阶段定义并遵从最佳设计实践,第3阶段产品风险评估,第4阶段风险分析,第5阶段创建安全文档工具及客户最佳实践,第6阶段安全编码策略,第7阶段安全测试策略,第8阶段安全推进活动,第9阶段最终安全评审,第10阶段安全响应规划,第11阶段产品发布,第12阶段安全响应执行,SDL中涉及安全的文档:,安装文档主线产品使用文档帮助文档开发人员文档,安全工具:,检查系统/软件安全状况阻止安全漏洞禁止不必要的服务禁止端口定义必要的安全策略。,第6阶段:安全编码策略,第0阶段教育和意识,第1阶段项目启动,第2阶段定义并遵从最佳设计实践,第3阶段产品风险评估,第4阶段风险分析,第5阶段创建安全文档工具及客户最佳实践,第6阶段安全编码策略,第7阶段安全测试策略,第8阶段安全推进活动,第9阶段最终安全评审,第10阶段安全响应规划,第11阶段产品发布,第12阶段安全响应执行,安全编码策略的最佳实践:,使用最新版本编译器与支持工具使用编译器内置防御特性使用源代码分析工具切勿使用违禁函数减少潜在可被利用的编码结构或设计使用安全编码检查清单。,第7阶段:安全测试策略,第0阶段教育和意识,第1阶段项目启动,第2阶段定义并遵从最佳设计实践,第3阶段产品风险评估,第4阶段风险分析,第5阶段创建安全文档工具及客户最佳实践,第6阶段安全编码策略,第7阶段安全测试策略,第8阶段安全推进活动,第9阶段最终安全评审,第10阶段安全响应规划,第11阶段产品发布,第12阶段安全响应执行,安全测试内容:,模糊测试渗透测试运行时测试重审威胁模型重估受攻击模型,第8阶段:安全推进活动,第0阶段教育和意识,第1阶段项目启动,第2阶段定义并遵从最佳设计实践,第3阶段产品风险评估,第4阶段风险分析,第5阶段创建安全文档工具及客户最佳实践,第6阶段安全编码策略,第7阶段安全测试策略,第8阶段安全推进活动,第9阶段最终安全评审,第10阶段安全响应规划,第11阶段产品发布,第12阶段安全响应执行,安全推进活动的主要任务:,培训代码评审威胁模型更新安全测试文档,第9阶段:最终安全评审,第0阶段教育和意识,第1阶段项目启动,第2阶段定义并遵从最佳设计实践,第3阶段产品风险评估,第4阶段风险分析,第5阶段创建安全文档工具及客户最佳实践,第6阶段安全编码策略,第7阶段安全测试策略,第8阶段安全推进活动,第9阶段最终安全评审,第10阶段安全响应规划,第11阶段产品发布,第12阶段安全响应执行,完整的安全评审步骤:,产品团队协调威胁模型评审未修复安全BUG评审工具使用有效性验证,第10阶段:安全响应规划,第0阶段教育和意识,第1阶段项目启动,第2阶段定义并遵从最佳设计实践,第3阶段产品风险评估,第4阶段风险分析,第5阶段创建安全文档工具及客户最佳实践,第6阶段安全编码策略,第7阶段安全测试策略,第8阶段安全推进活动,第9阶段最终安全评审,第10阶段安全响应规划,第11阶段产品发布,第12阶段安全响应执行,对SDL的认识:,使用SDL不能保证生产绝对安全的软件:开发团队一定会出错新漏洞一定会变化规则一定会变化,第10阶段的任务:建立安全的响应过程!,安全响应过程模型:,漏洞报告,分流,管理安全研究人员关系,创建内容,发布,创建修复,测试,教训,第0阶段教育和意识,第1阶段项目启动,第2阶段定义并遵从最佳设计实践,第3阶段产品风险评估,第4阶段风险分析,第5阶段创建安全文档工具及客户最佳实践,第6阶段安全编码策略,第7阶段安全测试策略,第8阶段安全推进活动,第9阶段最终安全评审,第10阶段安全响应规划,第11阶段产品发布,第11阶段:产品发布,第12阶段安全响应执行,第11阶段的任务:,软件签字通过,用户验收必须认可以下事实:SDL过程被正确无误地执行,遵从计划尽可能补救理解取舍之道,第12阶段:,