




已阅读5页,还剩78页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件安全开发 培训机构名称讲师名字 版本 3 0发布日期 2014 12 1生效日期 2015 1 1 课程内容 2 知识域 软件安全开发概况 知识子域 软件安全开发背景了解软件的发展和产生的安全问题了解软件安全问题产生的原因 3 软件安全的基本概念 软件的定义计算机程序 方法 规则和相关的文档资料以及在计算机上运行时所需的数据 IEEE 软件安全采用系统化 规范化 数量化的方法来指导构建安全的软件软件安全基本概念使安全成为软件开发的必须部分软件安全工程化三个支柱 风险管理 软件安全切入点 安全知识 4 软件安全问题广泛存在 软件应用广泛电脑游戏 火车票售票系统 多媒体教学手机 航天飞机 人造卫星 软件安全问题广泛存在运行错误售票系统反应慢 连不上 崩溃多媒体教学系统死机黑客盗取泄漏的银行密码 安全问题日益增加 5 软件安全问题产生后果 软件安全问题的后果造成产品运行不稳定 得不到正确结果甚至崩溃可靠性 可用性被恶意攻击 导致信息泄漏 数据破坏等后果保密性 完整性一些因软件安全问题导致的严重后果售票系统瘫痪美国放射治疗仪超剂量辐射事件阿丽亚纳5号火箭首发失败事件Stuxnet病毒攻击伊朗布什尔核电站 6 漏洞情况统计 中国国家漏洞库最近七年漏洞数量情况统计 7 软件产生安全问题的原因 内因软件开发安全意识淡薄软件开发缺乏安全知识软件趋向大型化和复杂化软件第三方扩展增多外因软件使用场景更具威胁 8 软件越来越复杂 9 Windows系列软件源代码行数 漏洞与软件安全 漏洞普遍存在平均每1000行程序存在20个缺陷 Dacey2003 采用严格的软件开发质量管理机制和多重测试环节 软件公司的缺陷率 千行代码 普通软件开发公司的缺陷密度为4 40个缺陷高水平的软件公司的缺陷密度为2 4个缺陷美国NASA的软件缺陷密度可达到0 1个缺陷漏洞已经成为危害软件安全的主要因素危及用户对软件的信任 业务运营 还会危及一系列关键基础设施和应用 10 知识域 软件安全开发概况 知识子域 软件安全开发的必要性理解软件安全保障的含义 思路和目标了解传统软件开发的局限性理解软件安全开发生命周期的概念和必要性 11 需要安全的软件 理想的安全软件不存在安全漏洞能抵御各种攻击威胁按照预期的方式执行 dowhatisintended软件安全保障的思路通过在软件开发生命周期各阶段采取必要的 相适应的安全措施来避免绝大多数的安全漏洞 采取措施只能有效减少 但并不能完全杜绝所有的安全漏洞 12 软件安全保障 软件可以规避安全漏洞而按照预期的方式执行其功能目标 在软件开发生命周期中提升软件的安全性可信赖性 无论是恶意而为还是无意疏忽 软件都没有可利用的漏洞存在可预见性 对软件执行时其功能符合开发者的意图的信心 遵循性 将 软件开发 跨学科的活动计划并系统化 以确保软件过程和软件产品满足需求 遵循相关标准 13 软件安全保障与风险管理 在软件安全保障中 需要贯彻风险管理的思想 安全就是风险管理 软件安全是以风险管理为基础安全不必是完美无缺的 但风险必须是能够管理的最适宜的软件安全策略就是最优的风险管理对策这是一个在有限资源前提下的最优选择问题防范不足会造成直接的损失 防范过多又会造成间接的损失 14 传统的软件开发局限性 15 需要安全的软件开发 软件安全开发生命周期 软件安全开发采取措施防止由于设计 开发 提交 升级或维护中的缺陷而导致的系统脆弱性20世纪末 21世纪初开始展开研究安全软件开发生命周期安全软件开发涵盖了软件开发整个生命周期通过软件开发的各个步骤来确保软件的安全性 其目标是确保安全的软件得以成功 16 安全软件开发生命周期 将安全融入在设计 开发 测试等过程中融入安全在传统的过程中增加安全过程安全提前介入NIST 在软件发布以后进行修复的代价是在软件设计和编码阶段即进行修复所花代价的30倍软件系统发布以后才进行漏洞修复代价是最高的 且常常伴随着软件系统使用者的极大损失实施软件安全开发规范指南最佳实践 17 降低解决软件安全问题的代价 早期发现并改正错误有以下优点在软件开发生命周期中 后面的阶段改正错误开销比前面的阶段要高出数倍早期发现并改正错误可以减少时间和开销 18 知识域 软件安全开发概况 知识子域 软件安全开发模型及研究了解安全开发生命周期 SDL 的发展历程 理解SDL的主要内容了解使安全成为软件开发必须的部分 BSI 系列模型了解综合的轻量级应用安全过程 CLASP 的主要内容了解软件保障成熟度模型 SAMM 的框架了解各个模型的特点及适用性 19 可信计算安全开发生命周期 微软 2002 1 盖茨安全开发生命周期SDL TheTrustworthyComputingSecurityDevelopmentLifecycle 自2004起 SDL作为全公司的计划和强制政策 在将安全和隐私植入软件和企业文化方面发挥了重要作用 通过将整体和实践方法相结合 SDL致力于减少软件中漏洞的数量和严重性 SDL在开发过程的所有阶段中均引入了安全和隐私 20 SDL发展历史 2002 1 今20世纪90年代中期到后期 Melissa 和21世纪初期 CodeRed Nimda UPnP等 出现了一系列影响重大的恶意软件事件 促使微软重新考虑开发人员安全过程和策略 21 SDL的阶段和安全活动 软件安全开发生命阶段5 2个阶段16项必需的安全活动 22 SDL每个阶段用到的工具 23 IE采用SDL后的效果 24 Source BrowserVulnerabilityAnalysis MicrosoftSecurityBlog27 NOV 2007 采用SDL之前 采用SDL之后 漏洞总数降低了35 高危漏洞数降低了63 正式发布后12个月内修复的漏洞总数 BSI系列模型 BSI 使安全成为软件开发必须的部分BuildingSecurityIN BSIGrayMcGraw Cigital公司在整个软件开发生命周期中要确保将安全作为软件的一个有机组成部分 无须改变你的软件开发方法适用各种软件开发生命周期合作NIST美国国土安全部大学 加州大学戴维斯分校 普林斯顿 莱斯 25 软件安全的三根支柱 三根支柱应用风险管理软件安全的接触点知识 26 接触点模型 接触点 即在软件开发生命周期中保障软件安全一套最优方法 一种战术性方法在每一个开发阶段上尽可能地避免和消除漏洞 黑帽子 和 白帽子 27 SSF SSF SoftwareSecurityFramework 软件安全框架 28 BSIMM BSI成熟度模型BuildingSecurityInMaturityModeGaryMcGraw BrianChess和SammyMigues使用SSF对所有项目进行描述了解别人的安全项目过程 指导自己的安全项目目标是对真实的软件安全项目所开展的活动进行量化构建和不断发展软件安全行动的指南BSIMM3 02011年42个公司 Microsoft Intel Google 29 BSIMM结果图 30 CLASP 综合的轻量应用安全过程 Comprehensive LightweightApplicationSecurityProcess CLASP 选取了30个特定的基于角色的活动 activities 用于提升整个开发团队的安全意识 并针对这些活动给出了相应的指南 导则和检查列表 31 CLASP介绍 基于角色项目经理 需求分析师 软件架构师 设计者 实施人员 集成和编译人员 测试者和测试分析师 安全审计员对于每个活动 CLASP描述了以下内容安全活动应该在什么时间 应该如何实施如果不进行这项安全活动 将会带来的多大的风险如果实施这项安全活动 估计需要多少成本 32 SAMM OWASPSAMMSoftwareAssuranceMaturityMode软件保证成熟度模型OWASP 开放Web应用安全项目 一个开放的框架 用以帮助制定并实施针对软件安全特定风险的策略评估一个组织已有的软件安全实践 建立一个迭代的权衡的软件安全保证计划 证明安全保证计划带来的实质性改善 定义并衡量组织中与安全相关的措施 33 SAMM 规定了四个软件开发过程中的核心业务功能治理 组织管理其软件开发的过程和活动构造 组织在开发项目中确定目标并开发软件的过程与活动验证 组织测试和验证软件的过程与活动部署 组织软件发布的相关管理过程与活动4个成熟度级别0 3级 34 OWASPSAMM 35 各模型比较 36 知识域 软件安全开发关键工作 知识子域 软件安全需求和设计了解软件安全需求分析和安全设计的重要性理解软件安全设计基本原则理解影响系统安全性的6类威胁 以及威胁建模过程 37 软件安全需求及安全设计的重要性 安全编码 安全测试 传统方法 软件发布后测试 等待修复BugGaryMcGraw 50 的安全问题由设计瑕疵引起安全提前介入 效益高 成本低 38 设计缺陷 举例MicrosoftBob明文存储口令 甚至将口令拿到客户端对比验证 软件安全需求及安全设计的重要性 软件安全需求和设计是开发安全软件的基础软件安全需求分析以风险管理为基础 建立 威胁 分析计划建立软件安全需求定义 确保软件安全需求定义正确安全需求应文档化软件安全设计软件系统的每一项需求 都应该在软件安全设计阶段认真考虑 39 安全设计原则 最小特权权限分离最小共享完全中立心理可接受默认故障处理经济机制不信任纵深防御保护最薄弱的环节公开设计隐私保护攻击面最小化 40 受攻击面概念 什么是受攻击面对一个软件系统可以采取的攻击方法集合 软件的功能 API 接口 资源 数据存储等都是受攻击面为什么要降低受攻击面一个软件的攻击面越大安全风险就越大 41 降低受攻击面的方法 第一步 分析产品功能的重要性 是否必须 第二步 分析从哪里访问这些功能第三步 采取合理措施 降低特权 42 降低软件受攻击面策略 重要等级为低的功能 攻击面大 取消该功能重要等级为中的功能 攻击面大 设置为非默认开启 需要用户配置后才予以开启重要等级为高的功能 攻击面大 关闭或限制一些接口方式 增加一些安全的保证措施或技术 43 降低受攻击面对于提高软件源代码安全性至关重要 减少软件受攻击面 44 威胁建模 什么是威胁建模威胁建模是了解系统面临的安全威胁 确定威胁风险并通过适当的缓解措施以降低风险 提高系统安全性的过程 为什么要威胁建模帮助在设计阶段充分了解各种安全威胁 并指导选择适当的应对措施对可能的风险进行管理可以重新验证其架构和设计有助于软件的受攻击面降低 45 威胁建模流程 确定对象识别威胁评估威胁消减威胁 46 威胁 降低威胁 漏洞 攻击者 威胁建模流程 47 STRIDE建模方法 STRIDE建模微软SDL中提出发现或纠正设计级 design level 的安全问题 48 理解STRIDE威胁 49 消减威胁举例 50 消减威胁 知识域 软件安全开发关键工作 知识子域 软件安全编码理解通用安全编码准则 验证输入 避免缓冲区溢出 程序内部安全 安全调用组件 禁止使用不安全函数等理解使用安全编译技术对提高编码安全水平的作用 了解常用安全编译技术理解源代码审核的目的及方式 了解常见源代码静态审核工具 51 通用安全编码准则 验证输入避免缓冲区溢出程序内部安全安全调用组件禁止使用不安全函数 52 验证输入 安全程序第一道防线是检查每一个不可信的输入DirectXMIDI库 难以检查所有的输入 可能导致IE被恶意利用检查 验证或者过滤输入不让恶意数据进入程序后续处理类似网络中部署防火墙何处检查最初接收数据时 第一次 使用数据时 53 验证输入 常见输入源 命令行参数数量 数据格式 内容环境变量环境变量可能超出期望有的环境变量存储格式存在危险文件不信任可以被不可信用户控制的文件内容不信任临时文件网络来自网络的数据是 高度不可信的 其他来源 54 验证输入 常见数据类型 字符串确定合法范围 拒绝非法字符 串 0 NIL 行结束编码0 x0a unix 0 x0d0 x0a dos windows 0 x0d APPLEMacOS 0 x85 IBMOS 390 特定字符系统字符分割字符 55 验证输入 常见数据类型 数字数字检查 正则表达式 ASCII值 负数检查 大数溢出为负数 Sendamil攻击合法范围检查文件名最好不让用户设置文件名避免特殊字符 rf com1 56 验证输入 常见数据类型 电子邮件地址限制合法的电子邮件地址UTF 8变长编码URI URL非法地址在合法地址后面增加恶意内容 57 避免缓冲区溢出 缓冲区溢出缓冲区 包含相同数据类型的实例的一个连续计算机内存块溢出 数据被添加到分配给该缓冲区的内存块之外外部数据比目标空间大是一个非常普遍而且严重的问题 58 避免缓冲区溢出 溢出后果攻击者可以使远程服务程序或者本地程序崩溃攻击者可以设计溢出后执行的代码C C 语言语言特性决定大量的库函数存在溢出strcpy strcat gets等其他语言调用C语言库C 允许设置 不安全 例程 59 避免缓冲区溢出 解决办法 解决办法编码避免缓冲区溢出填充数据时计算边界 动态分配内存 控制输入使用替代的安全函数或函数库使用没有缓冲区溢出问题的函数 strncpy strncat C 中std string使用替代库 Libmib libsafe使用更新更安全的编译环境 打开具有安全防御机制的安全编译选项StackGuard ProPolice GS非执行的堆栈防御不可在堆栈上执行代码 60 程序内部安全 程序内部接口安全程序内部接口数据的检查assert异常安全处理检测异常 安全处理各种可能运行路径检测到某些错误行为 数据 必须以合适的方式处理 保证程序运行安全必要时立即拒绝服务 甚至不回送详细的错误代码 61 程序内部安全 最小化反馈避免给予不可靠用户过多的信息成功或失败作为跟踪检查的日志可以记录较为详细的信息认证程序在认证前尽量少给信息 版本 如果程序接受了密码 不要返回它避免拒绝服务攻击输入错误尽快返回设置超时延时服务 62 程序内部安全 避免竞争条件访问共享资源时 文件 变量 没有被适当地控制使用原子操作使用锁操作 避免死锁安全使用临时文件很多安全漏洞发生在访问已知文件名或可猜测的临时文件时 63 安全调用其他组件 应用程序实际上几乎都不会是自包含的 它们通常都会调用其他组件底层的操作系统数据库可重用的库网络服务 WEB DNS 64 安全调用其他组件 组件安全检查组件文档 搜索相关说明gets随机数使用经过认可的组件尽可能不调用外部命令 如果不得已要调用 必须严格检查参数system open exec 65 安全调用其他组件 返回值安全一定要检查返回值 调用是否成功成功时检查返回值 是否按照期望值处理数据中可能含有NUL字符 无效字符或其他可能产生问题的东西错误时检查错误码传递数据安全视安全需求和安全环境考虑传输加密 包括密码算法和安全协议 66 禁止使用不安全函数 编码中禁止使用的危险函数举例 67 安全编译 使用最新版本编译器与支持工具使用编译器内置防御特性gcc Wall Wpointer arith Wstrict prototypes O2 68 源代码审核 源代码审核就是检查源代码 检测并报告源代码中的可能导致安全弱点的薄弱之处 人工审核费时费力容易遗漏工具审核速度快 自动可升级知识库 69 源代码审核关注编码中的实现缺陷 通常通过静态分析工具进行 它们扫描源代码 能够发现大约50 的安全问题 代码审核工具 商业工具CoverityFortifyOunceLabsSecureSoftware免费 开源工具BOONCqualXg FindBugs 70 好 的源代码分析工具 安全性安全审核 不要以功能为主多层性软件的多层架构 多层平台 多种语言可扩展性扩展规则 扩展技术知识性主用于分析 开发者也能 学到 安全编程知识集成性支持与IDE集成 支持make ant等工具 71 知识域 软件安全开发关键工作 知识子域 软件安全编码理解通用安全编码准则 验证输入 避免缓冲区溢出 程序内部安全 安全调用组件 禁止使用不安全函数等理解使用安全编译技术对提高编码安全水平的作用 了解常用安全编译技术理解源代码审核的目的及方式 了解常见源代码静态审核工具 72 为什么要软件安全测试 软件测试按照特定规程 发现软件错误的过程 检查软件是否满足规定的要求 或是清楚地了解预期结果与实际结果之间的差异其目的在于发现软件中的错误软件安全测试有关验证软件安全等级和识别潜在安全缺陷的过程查找软件自身程序设计中存在的安全隐患 并检查应用程序对非法侵入的防范能力传统测试仅考虑软件出错时的处理 没有考虑对软件的故意攻击 73 安全测试 在应用投产前 应由独立的安全团队对应用的安全性进行综合评估功能性安全测试对抗性安全测试传统测试方法白盒测试黑
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高中化学课件flash
- 高中俄罗斯课件
- 高一哈姆雷特课文课件
- 大数据应用股权转移及数据安全保护合同范本
- 住宅租赁经营权及社区服务设施租赁及管理合同
- 离婚协议书范本(适用于名人隐私保护条款)
- 离职员工经济补偿金及原公司企业创新发展协议
- 果园中的病虫害识别与防治
- 盆栽养护误区解析与矫正
- 大学课件检验及评价规程
- 2025年计算机二级考试真题及答案分享
- 公寓开荒保洁方案(3篇)
- 小儿雾化护理说课
- 施工现场安全防护设施标准化指南
- 高温熔融金属事故应急演练
- 未成年人严重不良行为及矫治
- 2025年广西壮族自治区中考数学真题试卷及答案解析
- ktv少爷管理制度
- 2025年河南民航发展投资集团有限公司招聘笔试参考题库含答案解析
- 成人高考日语真题及答案
- JG/T 335-2011混凝土结构防护用成膜型涂料
评论
0/150
提交评论