排行榜 -

您的位置:首页 > ppt下载 > PPT课件 > 课件PPT > 软件安全ppt

软件安全ppt下载

素材大小:
2.66 MB
素材授权:
免费下载
素材格式:
.ppt
素材上传:
lipeier
上传时间:
2019-09-08 16:53:08
素材编号:
240562
素材类别:
课件PPT
网友评分:

素材预览

软件安全ppt

这是软件安全ppt,包括了软件安全开发生命周期,软件安全需求及设计,软件安全实现,软件安全测试,软件安全开发重要管理过程等内容,欢迎点击下载。

软件安全ppt是由红软PPT免费下载网推荐的一款课件PPT类型的PowerPoint.

软件安全开发 讲师姓名 机构名称 课程内容 知识子域:软件安全开发生命周期 软件开发概念及特点 了解软件相关的基本概念及软件的特点; 理解软件开发的特点; 软件危机 解三次软件危机产生的原因以及每次软件危机的特点和解决之道等; 软件工程方法学 了解软件工程方法学的概念,要素; 理解传统方法学和面向对象方法学之间的区别,面向对象方法学的特点; 软件的概念和特点 软件的基本概念 软件是与计算机系统操作有关的计算机程序、规程、规则,以及可能有的文件、文档及数据。 软件的特点 软件是一种逻辑实体,具有抽象性 软件是开发出来的,不是制造出来的 没有硬件那样的机械磨损、老化问题 对计算机系统存在依赖 大部分软件产品是定制的 软件是复杂的 软件开发的特点 软件开发具有以下几个特点: 脑力密集型 实现不具有唯一性 隐性成本高 细节很容易被放大 质量评估很需要专业的高水平 软件安全重要性 – 软件危机 第一次“软件危机”- 20世纪60年代 根源:日益庞大和复杂的程序对开发管理的要求越来越高 解决:软件工程 第二次“软件危机”- 20世纪80年代 根源:软件规模继续扩大,程序数百万行,数百人同时开发,可维护性难 解决:面向对象语言-C++/java/c# 第三次“软件危机”- 21世纪头十年 根源:软件安全 解决:软件安全开发生命周期管理 软件工程方法学 什么是软件工程方法学 软件工程是技术和管理紧密结合所形成的工程学科,通过计划、组织和控制等一系列的活动,合理地配置和使用各种资源,以达到既定目标的过程 软件工程方法学三要素 软件工程方法学类型 传统方法学 面向对象的方法学 软件工程方法学 传统方法学 传统方法学也称为生命周期方法学或结构化泛型。它采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用。 面向对象方法学 与传统的方法相反,面向对象方法把数据和行为看成是同等重要的,他是以数据为主线,把数据和对数据的操作紧密地结合起来的方法。 面向对象方法学的特点及优点 特点 软件构件:把对象作为融合了数据及在数据上的操作行为的统一的软件构件 类:把所有对象都划分成类 继承:按照父类与子类的关系,组成一个层次结构的系统。下层派生类自动拥有上层基类中定义的数据和操作 封装性:对象彼此间仅能通过发送消息相互联系 优点 降低软件产品的复杂、提高软件的可理解性、简化了软件的开发和维护工作、促进了软件可重用性、为开发高内聚、低耦合的软件提供了极大的便利 知识子域:软件安全开发生命周期 软件生命周期模型 了解典型的软件开发生命周期模型的特点,包括瀑布模型、迭代模型、增量模型、快速原型模型、螺旋模型、净室模型; 软件安全保障 了解软件安全和软件安全保障的基本概念; 理解软件安全开发的必要性; 理解软件安全问题增加的原因; 了解软件安全问题相关的几个术语的概念。 软件生命周期模型-瀑布模型 软件生命周期模型-迭代模型 软件生命周期模型-增量模型 软件生命周期模型-螺旋模型 其他软件开发方法 快速原型模型 快速原型模型又称原型模型,它是增量模型的另一种形式;它是在开发真实系统之前,构造一个原型,在该原型的基础上,逐渐完成整个系统的开发工作。 净室模型 净室是一种应用数学与统计学理论以经济的方式生产高质量软件的工程技术。力图通过严格的工程化的软件过程达到开发中的零缺陷或接近零缺陷。 软件缺陷普遍存在 千行代码缺陷数量 普通软件公司:4~40 高管理软件公司:2~4 美国NASA软件:0.1 漏洞数量 国家漏洞库统计数据,最近5年最高一年入库漏洞7000+ 软件安全问题产生-内因 内因 软件规模增大,功能越来越多,越来越复杂 软件模块复用,导致安全漏洞延续 软件扩展模块带来的安全问题 软件安全问题产生-外因 互联网发展对软件安全的挑战 开发环境和开发人员对软件安全的挑战 开发者缺乏安全开发的动机 市场和业务要求将交付期和软件功能做主要因素 用户方没有提供安全方面的压力 开发者缺乏相关知识 软件复杂性加大,开发者需要学习更多东西 传统软件开发不进行安全教育 缺乏安全开发工具 缺乏安全开发配套管理、测试等工具 软件安全保障的含义及思路 软件安全保障的概念 确保软件能够按照开发者预期、正常地执行任务,提供与威胁相适应的安全能力,从而避免存在可以被利用的安全漏洞,并且能从被入侵和失败的状态中恢复。 软件安全保障的思路 通过在软件开发生命周期各阶段采取必要的、相适应的安全措施来避免绝大多数的安全漏洞 软件安全保障的目标 软件可以规避安全漏洞而按照预期的方式执行其功能 在软件开发生命周期中提升软件的安全性 可信赖性:无论是恶意而为还是无意疏忽,软件都没有可利用的漏洞存在 可预见性:对软件执行时其功能符合开发者的意图的信心。 遵循性:将(软件开发)跨学科的活动计划并系统化,以确保软件过程和软件产 软件安全保障与风险管理 在软件安全保障中,需要贯彻风险管理的思想 “安全就是风险管理” 软件安全是以风险管理为基础 安全不必是完美无缺的,但风险必须是能够管理的 最适宜的软件安全策略就是最优的风险管理对策 这是一个在有限资源前提下的最优选择问题 防范不足会造成直接的损失;防范过多又会造成间接的损失 传统软件开发中安全局限性 传统的软件生命周期的局限性: 软件生命周期包括需求分析、架构设计、代码编写、测试和运行维护五个阶段,缺乏安全相关阶段 传统的软件开发教育局限性 软件教育包括软件工程、数据结构、编译原理、系统结构、程序语言缺乏安全开发教育 开发人员局限性 对安全问题没有的足够理解 不了解安全设计的基本原理 不知道安全漏洞的常见类型 不知道如何设计针对安全的测试数据 软件安全开发生命周期 软件安全开发覆盖软件整个生命周期 需求分析阶段考虑软件的安全需求 在设计阶段设计符合安全准则的功能 编码阶段保证开发的代码符合安全编码规范 安全测试和运行维护确保安全需求、安全设计、安全编码各个环节得以正确有效的实施 软件安全问题越早解决成本越低 在软件开发生命周期中,后面的阶段改正错误开销比前面的阶段要高出数倍 NIST:在软件发布以后进行修复的代价是在软件设计和编码阶段即进行修复所花代价的30倍 知识子域:软件安全开发生命周期 软件安全开发生命周期模型 理解典型的软件安全开发生命周期模型的特点,包括SDL、CLASP、CMMI、SAMM、BSIMM; 了解这些软件安全开发生命周期模型的区别和联系。 相关模型和研究 安全软件开发生命周期 安全设计原则 安全开发方法 最佳实践 安全专家经验 多种模型被提出和研究 可信计算安全开发生命周期(微软) CLASP(OWASP)综合的轻量应用安全过程 BSI系列模型(Gary McGraw等) SAMM(OWASP)软件保证成熟度模型 SDL 什么是SDL SDL(Security Development Lifecycle,安全开发生命周期) SDL发展 SDL的阶段和安全活动 软件安全开发生命阶段 5+2个阶段 16项必需的安全活动 SDL实施效果 正式发布软件后12个月内的漏洞对比 IE :漏洞总数下降35%,高危漏洞数下降63% 操作系统:漏洞总数降低45% CLASP 什么是 CLSAP 综合的轻量应用安全过程(Comprehensive, Lightweight Application Security Process ,CLASP) 用于构建安全软件的轻量级过程 包括由30个特定的活动(activities)和和辅助资源构成的集合 针对这些活动给出了相应的指南、导则和检查列表 特点 基于角色的安排 CMMI 什么是CMMI 软件能力成熟度集成模型(Capability Maturity Model Integration) 五级 过程区域 SAMM 什么是SAMM 软件保证成熟度模型(Software Assurance Maturity Mode,SAMM) 提供了一个开放的框架,用以帮助软件公司制定并实施所面临来自软件安全的特定风险的策略, BSI系列模型 BSI(Building Security IN) 使安全成为软件开发必须的部分 强调应该使用工程化的方法来保证软件安全 软件安全的三根支柱 风险管理:策略性方法 接触点:一套轻量级最优工程化方法,攻击与防御综合考虑 安全知识:强调对安全经验和专业技术进行收集汇总,对软件开发人员进行培训,并通过安全接触点实际运用 BSIMM BSI成熟度模型 对真实的软件安全项目所开展的活动进行量化 构建和不断发展软件安全行动的指南 各模型比较 知识子域:软件安全需求及设计 软件安全需求分析 理解安全需求在软件安全开发过程中的重要性; 理解安全需求的分类及分析的方法和过程; 软件安全设计 理解软件安全设计的重要性; 理解软件安全设计的内容、主要活动; 理解安全设计的重要原则; 理解安全设计的方法-威胁建模,掌握威胁建模的方法和过程。 软件安全需求及安全设计的重要性 软件安全需求和设计是开发安全软件的基础 软件安全需求分析 以风险管理为基础,建立“威胁”分析计划 建立软件安全需求定义,确保软件安全需求定义正确 安全需求应文档化 软件安全设计 软件系统的每一项需求,都应该在软件安全设计阶段认真考虑 安全需求分析 安全需求分类 安全功能需求 安全保障需求 需求分析的要点 安全需求进行有效定义 不仅考虑系统功能,还要考虑系统不应该做什么 功能需求、安全需求、安全目标要达到平衡 需求分析过程 系统调查 定性分析系统的脆弱点和可能遭受的安全威胁 脆弱点和安全威胁的定量分析 需求的确定 安全设计的重要性 安全编码?安全测试? 传统方法:软件发布后测试、等待修复Bug Gary McGraw :50%的安全问题由设计瑕疵引起 安全提前介入,效益高,成本低 软件安全设计 安全概要设计阶段 包括但不限于:安全体系结构设计、各功能块间的处理流程、与其他功能的关系、安全协议设计、安全接口设计等。 安全详细设计阶段 详细设计阶段作为安全功能的程序设计阶段,应当直接指导安全功能的编码工作。包括但不限于:模块设计、内部处理流程、数据结构、输入/输出项、算法、逻辑流程图等 安全设计的主要活动 详细风险评估 控制措施选择 安全技术实现 安全设计评审 安全设计原则 降低攻击面 作用 攻击面越小,安全风险越小 实现 取消不需要的功能 增加对功能的安全防护 示例 SQL Server2005默认关闭xp_cmdshell存储过程 分析软件攻击面 分析产品功能的重要性(是否必须) 分析从哪里访问这些功能(本地&远程) 分析访问权限(匿名&经过认证) 降低攻击面策略 重要等级为低的功能:攻击面大,取消该功能 重要等级为中的功能:攻击面大,设置为非默认开启,需要用户配置后才予以开启 重要等级为高的功能:攻击面大,关闭或限制一些接口方式,增加一些安全的保证措施或技术 降低软件攻击面通常做法 威胁建模 什么是威胁建模 威胁建模是了解系统面临的安全威胁,确定威胁风险并通过适当的缓解措施以降低风险,提高系统安全性的过程。 为什么要威胁建模 帮助在设计阶段充分了解各种安全威胁,并指导选择适当的应对措施 对可能的风险进行管理 可以重新验证其架构和设计 有助于软件的受攻击面降低 威胁建模流程 确定对象 识别威胁 评估威胁 消减威胁 威胁建模-确定对象 确定要保护和评估的目标(资产) 在使用实例和应用场景中分析 明确应用或系统的关键威胁场景 部署方式、配置信息、用户使用方式等 典型场景 移动或小型设备物理失窃场景 Web应用匿名用户场景 威胁建模-识别威胁 识别每一个可能面临的威胁 理解软件可能面临的威胁是安全开发的前提 威胁不等于漏洞 威胁永远存在 理解STRIDE六类威胁 威胁建模-评估威胁 评估威胁风险值 评估被利用和攻击发生的概率 评估攻击后资产的受损后果,并计算风险 威胁建模-消减威胁 重新设计并排除这个威胁 使用标准的威胁消减技术 发明新的消减方法 根据安全Bug标准来确定是否可接受风险 把威胁作为漏洞记录下来,以后再想办法消减 知识子域:软件安全实现 安全编码原则 了解验证输入、避免缓冲区溢出、程序内部安全、安全调用组件、禁用有风险的函数等通用安全编程准则; 了解相关的安全编码标准及建议; 理解常见的代码安全问题及处置办法; 代码安全编译 了解代码编译需要关注的安全因素; 代码安全审核 理解代码审查的目的; 了解常见源代码静态分析工具及方法 通用安全编码原则-验证输入 对所有输入数据进行检查、验证及过滤 应用软件的“数据防火墙”,避免恶意数据进入 什么时候验证 最初接收数据时 (第一次)使用数据时 验证输入-常见输入源 命令行 参数数量、数据格式、内容 环境变量 环境变量可能超出期望 有的环境变量存储格式存在危险 文件 不信任可以被不可信用户控制的文件内容 不信任临时文件 网络 来自网络的数据是“高度不可信的” 其他来源 通用安全编码原则-避免缓冲区溢出 缓冲区溢出 缓冲区:包含相同数据类型的实例的一个连续计算机内存块 溢出:数据被添加到分配给该缓冲区的内存块之外 外部数据比目标空间大 是一个非常普遍而且严重的问题 通用编码原则-避免缓冲区溢出 溢出后果 攻击者可以使远程服务程序或者本地程序崩溃 攻击者可以设计溢出后执行的代码 C/C++语言 语言特性决定 大量的库函数存在溢出 strcpy、strcat、gets等 其他语言 调用C语言库 C#允许设置“不安全”例程 通用编码原则-避免缓冲区溢出 解决办法 填充数据时计算边界 动态分配内存 控制输入 使用没有缓冲区溢出问题的函数 strncpy、strncat、C++中std:string 使用替代库 Libmib、libsafe 基于探测方法的防御 StackGuard、ProPolice、/GS 将一个“探测”值插入到返回地址的前面 非执行的堆栈防御 不可在堆栈上执行代码 通用编码原则-程序内部安全 程序内部接口安全 程序内部接口数据的检查 异常的安全处理 检测异常,安全处理各种可能运行路径 检测到某些错误行为/数据,必须以合适的方式处理,保证程序运行安全 必要时立即拒绝服务,甚至不回送详细的错误代码 通用编码原则-程序内部安全 最小化反馈 避免给予不可靠用户过多的信息 成功或失败 作为跟踪检查的日志可以记录较为详细的信息 认证程序在认证前尽量少给信息 如果程序接受了密码,不要返回它 避免竞争条件 访问共享资源时(文件/变量)没有被适当地控制 使用原子操作 使用锁操作——避免死锁 安全使用临时文件 通用编码原则-安全调用组件 应用程序实际上几乎都不会是自包含的,它们通常都会调用其他组件 底层的操作系统 数据库 可重用的库 网络服务(WEB、DNS) 通用编码原则-安全调用组件 使用安全组件,并且只采用安全的方式 检查组件文档,搜索相关说明 gets 随机数 使用经过认可的组件 尽可能不调用外部命令,如果不得已要调用,必须严格检查参数 system、open、exec、 通用编码原则-安全调用组件 正确处理返回值 一定要检查返回值,调用是否成功 成功时检查 返回值,是否按照期望值处理 数据中可能含有 NUL 字符、无效字符或其他可能产生问题的东西 错误时检查 错误码 保护应用程序和组件之间传递的数据 视安全需求和安全环境 考虑传输加密,包括密码算法和安全协议 通用编码原则-禁用不安全函数 编码中禁止使用的危险函数举例 软件安全编译 确保编译环境的安全 使用最新版本编译器与支持工具 可靠的编译工具 使用编译器内置防御特性 确保运行环境的安全 将软件运行环境基于较新版本的系统 源代码审核 什么是源代码审核 通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性,报告源代码中可能隐藏的错误和缺陷 源代码审核方式 人工审核 费时费力 容易遗漏 工具审核 速度快,自动 可升级知识库 “好”的源代码分析工具 安全性 安全审核,不要以功能为主 多层性 软件的多层架构、多层平台、多种语言 可扩展性 扩展规则、扩展技术 知识性 主用于分析,开发者也能“学到” 安全编程知识 集成性 支持与IDE集成,支持make、ant等工具 知识子域:软件安全测试 软件测试 了解软件测试的基本概念; 了解常见的软件测试方法及不同测试方法之间的区别和优缺点; 软件安全测试 了解软件安全测试的基本概念; 理解模糊测试、渗透测试等软件安全测试方法的的原理、相互的区别以及各自的优势; 掌握安全测试的思路和方法。 软件测试 什么是软件测试 使用人工和自动化的手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差异 基本概念 测试用例 测试覆盖率度量指标 软件测试的基本概念 测试的信条 预期测试的测试结果是预先确定的 好的测试用例发现错误的概率高 成功的测试就是发现了错误的测试 测试独立于编码 需要具备应用(用户)及软件(编程)两方面的专业知识 测试人员使用不同于开发人员的工具 只检查常见的测试用例是不够的 测试文档要能够再利用 软件测试方法 单元测试、集成测试、系统测试 黑盒测试、白盒测试、灰盒测试 静态测试、动态测试 代码走查、代码审查、代码评审 回归测试 验收测试 软件安全测试 什么是软件安全测试 确定软件的安全特性实现是否与预期设计一致的过程 有关验证软件安全等级和识别潜在安全缺陷的过程 查找软件自身程序设计中存在的安全隐患,并检查应用程序对非法侵入的防范能力 为什么需要软件安全测试 传统测试仅考虑软件出错时的处理,没有考虑对软件的故意攻击 软件安全测试方法 在应用投产前,应由独立的安全团队对应用的安全性进行综合评估 功能性安全测试 对抗性安全测试 安全测试方法 模糊测试 渗透测试 静态源代码审核 模糊测试(Fuzz) 什么是模糊测试 也称Fuzz测试,一种通过提供非预期的输入并监视异常结果来发现软件故障的方法 黑盒测试,不关心被测试目标的内部实现,而是利用构造畸形的输入数据引发被测试目标产生异常,从而发现相应的安全漏洞 模糊测试 强制软件程序使用恶意/破坏性的数据并进行观察结果的一种测试方法 不够强壮的程序会崩溃 编码良好的程序正常运行 特性 方法学 随机值 大量测试用例 查找漏洞或可靠性错误 模糊测试 模糊测试过程 生成大量的畸形数据作为测试用例; 将这些测试用例作为输入应用于被测对象; 监测和记录由输入导致的任何崩溃或异常现象; 查看测试日志,深入分析产生崩溃或异常的原因 影响模糊测试效果的关键因素 测试点 数据通道入口、可信边界点 样本选择 选择覆盖面广、便于测试的多个样本 数据关联性 智能模糊测试 自动化框架 异常监控与异常恢复 分析评估 渗透测试 渗透测试 通过模拟恶意攻击者进行攻击,来评估系统安全的一种评估方法 从攻击的角度测试软件系统是否安全 使用自动化工具或者人工的方法模拟攻击者的输入,找出运行时刻目标系统所存在的安全漏洞 优点 找出来的问题都是真实的,也是较为严重的 缺点 只能到达有限的测试点,覆盖率较低 渗透测试流程 渗透测试要点 测试目的 是进行安全性的评估,不是摧毁或破坏 测试人员 技术、知识和经验很重要 像“坏人”一样思考问题 安全问题 系统备份和恢复措施 风险规避 灵活安排自己的“组合” 代码审核 + 体系结构风险评估 基于风险的安全测试 + 渗透测试 安全需求分析 + 滥用案例开发 代码审核 + 渗透测试 体系结构风险分析 + 基于风险的测试 … 软件安全测试思路 充分了解软件安全漏洞 评估软件安全风险 拥有高效的软件安全测试技术和工具 知识子域:软件安全开发重要管理过程 变更管理 理解变更管理的重要性及工作内容; 掌握变更管理的工作流程; 配置管理 理解配置管理的重要性及工作内容; 掌握配置管理的工作流程; 安全培训 理解安全培训的重要性及工作内容; 安全监理 理解安全监理的重要性及工作内容; 项目安全需求分析和安全设计 编写安全的软件的需要从一开始就关注安全性 很多系统是后来才添加了安全性功能部件 开发和划分安全性需求 充分理解和完全文档化的需求 分析安全场景和安全风险 注重安全设计 应用软件结构选择 系统平台确定 编程/开发软件选择 软件安全开发角色 项目高管 关心安全问题 安全群组/安全顾问(SSG) BSIMM3:42个项目中,都有一个相当规模的SSG 开发团队 项目经理、架构师、开发人员 测试团队 独立测试团队 变更管理过程 变更发生的原因 需求变更 调试、测试 风险评估 避免任何未经授权的变更发生,变更必须遵循一个正式的变更管理过程,变更管理过程包含五个核心步骤。 配置管理过程 配置管理是通过技术和行政手段对软件产品及其开发过程和生命周期进行控制、规范的一系列措施。 配置管理的目标是记录软件产品的演化过程,确保软件开发者在软件生命周期中各个阶段都能得到精确的产品配置。配置管理一般遵循以下流程: 安全培训过程 在软件开发整个过程中,都要对开发人员进行安全培训。 培训内容包括: 对环境、网络、代码、文档等方面的管理培训 对配置管理的培训 对安全设计的培训 对安全编程的培训 对安全测试的培训 对知识产权意识的培训 安全监理过程 安全监理的主要作用 检查和控制开发流程,确保开发流程中各项安全措施的遵守。 安全监理应该由第三方担任,可以外包,也可以由公司的其他部门承担,不应由开发者担任这个角色。 安全监理工作的内容 开发环境的安全性 开发流程的安全性检查和评估 开发各个环节的安全性措施是否被实施 开发各个环节的安全性要求是否被遵守 对出现的安全问题提出响应策略 安全监理的工作流程 软件项目的监理工作一般按照如下流程进行: 成立项目监理机构 收集项目相关资料 编写监理规划、监理细则 审核项目开工条件、审核合同 检查和评估开发环境安全性、开发流程安全性 项目开工实施 测试、初验、整改、验收 移交监理资料 监理后续服务 总结 软件安全开发生命周期模型 软件安全需求与设计 软件安全实现 软件安全测试 软件安全开发重要管理过程 谢谢,请提问题!

软件设计ppt模板:这是软件设计ppt模板,包括了面向对象软件的开发过程,基于UML的面向对象软件开发,软件文件的编写等内容,欢迎点击下载。

办公软件ppt官方:这是办公软件ppt官方,包括了金山公司及WPS简介,金山公司简介,金山公司发展历程,WPS与Office兼容性,文件格式的兼容性,回到上次编辑的位置等内容,欢迎点击下载。

做动画ppt的软件:这是做动画ppt的软件,包括了教学目标,教学重点、难点,教学内容,本章小结,Flash平面动画的基本概念,Flash平面动画的基本制作方法,平面动画的设计技巧等内容,欢迎点击下载。

下载地址

推荐PPT

PPT分类Classification

Copyright:2009-2015 rsdown.cn Corporation,All Rights Reserved 红软PPT免费下载网版权所有

粤ICP备14102101号