1.41k likes | 2.17k Views
软件安全开发. 培训机构名称 讲师名字. 软件安全设计. 软件安全编码. 软件安全测试. 软件安全开发项目管理. 课程内容. 软件安全开发背景. 软件安全 开发概况. 软件安全开发简介. 软件安全开发. 软件安全开发 的关键工作. 知识体. 知识域. 知识子域. 知识域 :软件安全开发概述. 知识子域:软件安全开发必要性 了解软件安全问题及其原因 了解传统 软件开发的 局限性和软件安全开发必要性. 软件安全重要性 – 软件危机. 第一次“软件危机” - 20 世纪 60 年代 根源:汇编语言不能处理日益庞大和复杂的程序
E N D
软件安全开发 培训机构名称 讲师名字
软件安全设计 软件安全编码 软件安全测试 软件安全开发项目管理 课程内容 软件安全开发背景 软件安全 开发概况 软件安全开发简介 软件安全开发 软件安全开发 的关键工作 知识体 知识域 知识子域
知识域:软件安全开发概述 • 知识子域:软件安全开发必要性 • 了解软件安全问题及其原因 • 了解传统软件开发的局限性和软件安全开发必要性
软件安全重要性 – 软件危机 • 第一次“软件危机”- 20世纪60年代 • 根源:汇编语言不能处理日益庞大和复杂的程序 • 解决:高级语言的诞生- FORTRAN和C • 第二次“软件危机”- 20世纪80年代 • 根源:大型程序:数百万行,数百人同时开发 • 解决 • 面向对象语言-C++/java/c# • 软件工程 • 第三次“软件危机”- 21世纪头十年 • 根源:软件安全?
软件安全问题广泛存在 • 软件应用广泛 • 电脑游戏、火车票售票系统、多媒体教学 • 手机、航天飞机、人造卫星 • … • 软件安全问题广泛存在 • 运行错误 • 售票系统反应慢、连不上、崩溃 • 多媒体教学系统死机 • 黑客盗取泄漏的银行密码 • … • 安全问题日益增加…
软件安全问题产生后果 • 软件安全问题的后果 • 造成产品运行不稳定,得不到正确结果甚至崩溃 • 可靠性、可用性 • 被恶意攻击,导致信息泄漏/数据破坏等后果 • 保密性、完整性 • 一些因软件安全问题导致的严重后果 • 售票系统瘫痪 • 美国放射治疗仪超剂量辐射事件 • 阿丽亚纳5号火箭首发失败事件 • Stuxnet病毒攻击伊朗布什尔核电站
漏洞情况统计 • 中国国家漏洞库最近七年漏洞数量情况统计
软件安全问题原因 • 存在诸多安全问题的原因 • 软件开发周期短,工作量大,无暇顾及安全 • 软件设计时缺乏安全设计 • 软件开发人员缺乏安全编程经验 • 功能越来越多,软件越来越复杂 • 软件模块复用,可扩展性/灵活性要求高 • 互联网环境下的安全挑战 • 根本原因 • 存在漏洞 • 存在威胁
软件越来越复杂 • Windows 系列软件源代码行数
漏洞与软件安全 • 漏洞已经成为危害软件安全的主要因素 • 危及用户对软件的信任、业务运营,还会危及一系列关键基础设施和应用 • 漏洞普遍存在 • 普通软件工程师,每千行代码(KLOC) • 存在20个缺陷 • 由于采用严格的软件开发质量管理机制和多重测试环节,软件公司的缺陷率(每千行代码) • 普通软件开发公司的缺陷密度为4~40个缺陷 • 高水平的软件公司的缺陷密度为2~4个缺陷 • 美国NASA的软件缺陷密度可达到0.1个缺陷
美国重视安全开发和源代码安全 • 2007年美国空军成立了“Application Software Assurance Center of Excellence”开始对所用应用软件进行源代码缺陷检测 • 2008年加州大选软件因为没有通过源代码安全审查而被取消 • 2008年美国 FDA 器械和辐射健康中心开始使用源代码缺陷检测工具对发生问题和事故的医疗设备进行检测 • 2008年美国电力联盟也启动系统安全检测评估
需要安全的软件 • 安全的软件 • 不存在安全漏洞 • 能抵御各种攻击威胁 • 按照预期的方式执行:do what is intended • 保证程序可以正常执行任务 • 通过在软件开发生命周期各阶段采取必要的、相适应的安全措施来避免绝大多数的安全漏洞。 • 采取措施只能有效减少,但并不能完全杜绝所有的安全漏洞。
软件安全保障 • 软件安全保障的概念 • 软件安全保障是对“软件可以规避安全漏洞而按照预期的方式执行其功能”的信心 。这些安全漏洞或者故意设计在软件之中,或者在其生命周期被偶然插入到软件中。
软件安全保障目标 • 软件安全保障目标是在软件开发生命周期中提升软件的安全性,主要目的是 • 可信赖性:无论是恶意而为还是无意疏忽,软件都没有可利用的漏洞存在 • 可预见性:对软件执行时其功能符合开发者的意图的信心。 • 遵循性:将(软件开发)跨学科的活动计划并系统化,以确保软件过程和软件产品满足需求、遵循相关标准。 - DHS,2006
软件安全保障与风险管理 • 在软件安全保障中,需要贯彻风险管理的思想 • “安全就是风险管理” • 软件安全是以风险管理为基础 • 安全不必是完美无缺的,但风险必须是能够管理的 • 最适宜的软件安全策略就是最优的风险管理对策 • 这是一个在有限资源前提下的最优选择问题 • 防范不足会造成直接的损失;防范过多又会造成间接的损失
传统的软件开发局限性 • 需要安全的软件开发!
知识域:软件安全开发概述 • 知识子域:软件安全开发简介 • 理解安全开发有关概念,包括软件安全、安全软件开发生命周期等 • 了解安全软件开发生命周期有关模型研究及应用情况,包括微软SDL、BSI系列模型、CLASP和SAMM等
软件安全开发基本概念 • 软件安全开发 • 采取措施防止由于设计、开发、提交、升级或维护中的缺陷而导致的系统脆弱性 • 20世纪末/21世纪初开始展开研究 • 安全软件开发生命周期 • 安全软件开发涵盖了软件开发整个生命周期 • Secure Software Development Lifecycle • 通过软件开发的各个步骤来确保软件的安全性,其目标是确保安全的软件得以成功
安全软件开发生命周期 • 将安全融入 • 在设计/开发/测试等过程中融入安全 • 在传统的过程中增加安全过程 • 安全提前介入 • NIST:在软件发布以后进行修复的代价是在软件设计和编码阶段即进行修复所花代价的30倍 • 软件系统发布以后才进行漏洞修复代价是最高的,且常常伴随着软件系统使用者的极大损失 • 实施软件安全开发 • 规范指南 • 最佳实践
不同阶段修复漏洞的代价 Barry Boehm
相关模型和研究 • 安全软件开发生命周期 • 安全设计原则 • 安全开发方法 • 最佳实践 • 安全专家经验 • 多种模型被提出和研究 • 可信计算安全开发生命周期(微软) • BSI系列模型(Gary McGraw等) • SAMM(OWASP) • CLASP(OWASP)
可信计算安全开发生命周期 • 微软,2002.1,盖茨 • 安全开发生命周期 • SDL(The Trustworthy Computing Security Development Lifecycle) • 强调开发安全的软件对于微软未来的重要性,并为此计划花费了3亿美元和2000多个工作日 • 自 2004 起,SDL 作为全公司的计划和强制政策,在将安全和隐私植入软件和企业文化方面发挥了重要作用。 • 通过将整体和实践方法相结合,SDL 致力于减少软件中漏洞的数量和严重性。SDL 在开发过程的所有阶段中均引入了安全和隐私。
SDL使用 • SDL是一个安全保证过程,其在开发过程的所有阶段中引入了安全和隐私原则。 • Microsoft 将 SDL与软件行业和客户开发组织自由共享,供他们用来开发更为安全的软件。 • 如何使用SDL? • 为了实现所需安全和隐私目标,项目团队或安全顾问可以自行决定添加可选的安全活动 • 开发团队应以SDL指南为指导,实施SDL的时候结合考虑组织的时间、资源和业务运营方式 • Cisco、EMC、Symantec等安全公司均借鉴微软SDL中的做法——CSDL
SDL发展历史 • 2002.1~今 • 20 世纪 90 年代中期到后期 (Melissa) 和 21 世纪初期(Code Red、Nimda、UPnP 等)出现了一系列影响重大的恶意软件事件,促使微软重新考虑开发人员安全过程和策略
SDL的阶段和安全活动 • 软件安全开发生命阶段 • 5+2个阶段 • 16项必需的安全活动
IE采用SDL后的效果 正式发布后12个月内修复的漏洞总数 采用SDL之前 采用SDL之后 漏洞总数降低了35% 高危漏洞数降低了63% Source: Browser Vulnerability Analysis, Microsoft Security Blog 27-NOV-2007
BSI系列模型 • BSI——使安全成为软件开发必须的部分 • Building Security IN,BSI • Gray McGraw,Cigital公司 • 在整个软件开发生命周期中要确保将安全作为软件的一个有机组成部分。 • 无须改变你的软件开发方法 • 适用各种软件开发生命周期 • 合作 • NIST • 美国国土安全部 • 大学(加州大学戴维斯分校、普林斯顿、莱斯…)
软件安全的三根支柱 • 三根支柱 • 应用风险管理 • 软件安全的接触点 • 知识
接触点模型 • 接触点,即在软件开发生命周期中保障软件安全 • 一套最优方法、一种战术性方法 • 在每一个开发阶段上尽可能地避免和消除漏洞 • “黑帽子”和“白帽子”
SSF • SSF(Software Security Framework) • 软件安全框架
BSIMM • BSI成熟度模型 • Building Security In Maturity Mode • Gary McGraw、Brian Chess和Sammy Migues • 使用SSF对所有项目进行描述 • 了解别人的安全项目过程,指导自己的安全项目 • 目标 • 是对真实的软件安全项目所开展的活动进行量化 • 构建和不断发展软件安全行动的指南 • BSIMM3.0 • 2011年 • 42个公司(Microsoft、Intel、Google、…)
SAMM • OWASPSAMM • Software Assurance Maturity Mode • 软件保证成熟度模型 • OWASP(开放Web应用安全项目) • 一个开放的框架,用以帮助制定并实施针对软件安全特定风险的策略 • 评估一个组织已有的软件安全实践; • 建立一个迭代的权衡的软件安全保证计划; • 证明安全保证计划带来的实质性改善; • 定义并衡量组织中与安全相关的措施。
SAMM • 规定了四个软件开发过程中的核心业务功能 • 治理:组织管理其软件开发的过程和活动 • 构造:组织在开发项目中确定目标并开发软件的过程与活动 • 验证:组织测试和验证软件的过程与活动 • 部署:组织软件发布的相关管理过程与活动 • 4个成熟度级别 • 0-3级
CLASP • 综合的轻量应用安全过程(Comprehensive, Lightweight Application Security Process (CLASP) ) • 选取了30个特定的基于角色的活动(activities),用于提升整个开发团队的安全意识,并针对这些活动给出了相应的指南、导则和检查列表
CLASP介绍 • 基于角色 • 项目经理 、需求分析师 、软件架构师 、设计者 、实施人员 、集成和编译人员 、测试者和测试分析师 、安全审计员 • 对于每个活动,CLASP描述了以下内容 • 安全活动应该在什么时间、应该如何实施 • 如果不进行这项安全活动,将会带来的多大的风险 • 如果实施这项安全活动,估计需要多少成本
知识域:软件安全开发的关键阶段 • 知识子域:软件安全设计 • 了解软件安全设计的重要性 • 理解软件安全设计基本原则 • 理解受攻击面概念和常用减少受攻击面的保护措施 • 了解威胁建模的概念和目的 • 理解威胁建模的关键因素及作用
安全设计的重要性 • 安全编码?安全测试? • 传统方法:软件发布后测试、等待修复Bug • Gary McGraw :50%的安全问题由设计瑕疵引起 • 安全提前介入,效益高,成本低 • 设计缺陷——举例 • Microsoft Bob • 明文存储口令,甚至将口令拿到客户端对比验证
安全设计目标 • 安全设计工作目标: • 制定项目计划来定义安全行为 • 制定安全检查点来保证安全控制措施的质量 • 识别配置过程和变更控制过程 • 主要设计内容 • 确定访问控制机制,定义主体角色和权限 • 选择加密方法和算法 • 解决敏感数据处理问题 • 评估内部通信机制 • 确定完整性机制 • …
安全设计原则 • 保护最薄弱的环节 • 纵深防御 • 最小特权 • 最小共享 • 权限分离
安全设计原则 • 经济性原则 • 保护隐私 • 正确理解“秘密” • 安全的错误处理 • 心理接受能力
受攻击面 • 受攻击面 • 对一个软件系统可以采取的攻击方法集合 • Attack Surface Reduction,ASR • 功能、API、接口、资源、数据存储等 • 一个软件的攻击面越大安全风险就越大 降低受攻击面 对于提高软件安全性 至关重要!
降低受攻击面的方法 • 第一步:分析产品功能的重要性 • 是否必须 • 第二步:分析从哪里访问这些功能 • 第三步:采取合理措施(降低特权) 远程访问 受攻击面增加 受限访问 本地访问 用户访问 匿名访问 仅管理员访问
威胁建模 • 威胁建模是以结构化的方式,识别、评估应用系统面临的威胁 • 目的 • 帮助在设计阶段充分了解各种安全威胁,并指导选择适当的应对措施 • 对可能的风险进行管理 • 可以重新验证其架构和设计 • 有助于软件的受攻击面降低