您好,欢迎访问三七文档
软件安全与测试软件安全概述程绍银sycheng@ustc.edu.cn软件安全与测试2大纲软件与软件安全软件安全的三个支柱软件安全与其他相关领域的关系软件安全工具简介软件安全与测试3大纲软件与软件安全软件安全的三个支柱软件安全与其他相关领域的关系软件安全工具简介软件安全与测试软件的定义Software:软件(大陆、香港),软体(台湾)1983年IEEE为软件下的定义是:计算机程序、方法、规则和相关的文档资料以及在计算机上运行时所需的数据国标中对软件的定义为:与计算机系统操作有关的计算机程序、规程、规则,以及可能有的文件、文档及数据通俗解释:软件=程序+数据+文档资料程序是完成特定功能和满足性能要求的指令序列数据是程序运行的基础和操作的对象文档与程序开发、维护和使用有关的图文资料4软件安全与测试5软件vs.硬件“硬件”是躯体,“软件”是灵魂“软件”安装的硬件平台主机(PC、笔记本、服务器等)网络设备(路由器、交换机、防火墙、UTM等)消费类电子(智能手机、iPad等)“软件”可以包括操作系统数据库系统(与系统中的数据有区分)业务相关的管理信息系统(MIS)应用程序商店(AppStore)联网软件:通信协议、通信加密、认证等软件安全与测试软件的特点软件不同于硬件,他是计算机系统中的逻辑实体而不是物理实体,具有抽象性软件的生产不同于硬件,它没有明显的制作过程,一旦开发成功,可以大量拷贝同一内容的副本软件在运行过程中不会因为使用时间过长而出现磨损、老化以及用坏问题由于软件漏洞不可避免,因此软件一般需要不断升级软件的开发、运行在很大程度上依赖于计算机系统,受计算机系统的限制,在客观上出现了软件移植问题软件开发复杂性高,开发周期长,成本较大软件开发还涉及诸多的社会因素6软件安全与测试软件的分类按软件的功能分类系统软件:计算机运行的必不可少的组成部分,它与计算机硬件紧密配合,控制并协调计算机系统各个部件、相关的软件和数据高效地工作。例如操作系统、设备驱动程序、通信处理程序等支撑软件:协助用户开发软件的工具性软件,其中包括帮助程序人员开发软件产品的工具,也包括帮助管理人员控制开发进程的工具。例如支持需求/设计/编码/测试的软件、IDE、SDE等应用软件:在特定领域内开发,为特定目的服务的软件。如MIS、OA等7软件安全与测试软件的分类按软件规模分类8软件安全与测试软件的分类按软件工作方式分类实时处理软件分时软件交互式软件批处理软件按软件服务对象的范围划分面向部分客户的项目软件(定制软件)面向市场的产品软件9软件安全与测试软件的分类按软件运行平台划分服务器端软件PC端软件手机应用软件嵌入式软件10软件安全与测试软件的分类按授权方式划分专属软件:此类授权通常不允许用户随意的复制、研究、修改或散布该软件。违反此类授权通常会有严重的法律责任。传统的商业软件公司会采用此类授权,例如微软的Windows和办公软件。专属软件的源码通常被公司视为私有财产而予以严密的保护自由软件:此类授权正好与专属软件相反,赋予用户复制、研究、修改和散布该软件的权利,并提供源码供用户自由使用,仅给予些许的其它限制。以Linux、Firefox和OpenOffice可做为此类软件的代表11软件安全与测试软件的分类按授权方式划分共享软件:通常可免费的取得并使用其试用版,但在功能或使用期间上受到限制。开发者会鼓励用户付费以取得功能完整的商业版本。根据共享软件作者的授权,用户可以从各种渠道免费得到它的拷贝,也可以自由传播它。免费软件:可免费取得和转载,但并不提供源码,也无法修改公共软件:原作者已放弃权利,著作权过期,或作者已经不可考究的软件。使用上无任何限制12软件安全与测试软件VS.服务软件即服务(SoftwareasaService,简称SaaS)是一种软件交付模式在这种交付模式中,云端集中式托管软件及其相关的数据,软件仅需透过互联网,而不须透过安装即可使用用户通常使用精简客户端经由一个网页浏览器来访问软件即服务通过将硬件和软件维护及支持外包给软件即服务的提供者,来降低信息技术成本13软件安全与测试开源软件的授权方式开源软件共同特点:源代码开放、免费修改、免费重新发布GPL:自由软件。允许免费修改、免费重发布,但要求修改代码必须也遵守GPL。在GPL下面还有LGPL,允许商业代码链接LGPL代码,这样商业软件在利用LGPL软件的同时能够很大程度上保留商业利益。如Linux/gcc/KDE/gnome等BSD:公共域软件,其中apache的授权叫APL,是比较典型的授权声明。虽然保留版权,但不但免费修改、免费重新发布,而且允许商业使用,允许商业修改后不公布修改的软件代码。如xWindows/freeBSD/apache/perl/python/ruby等MPL:商业公司的开源策略。允许免费重发布、免费修改,但要求修改后的代码版权归软件的发起者,这样发起者和组织者具有更优越的地位。MPL一般也是同时遵守LGPL的。如mozilla/openoffice/vim等14软件安全与测试15软件安全的概念软件安全就是使软件在受到恶意攻击的情形下依然能够继续正确运行的工程化软件思想GaryMcGraw,Cigital公司首席技术官和董事会成员《SoftwareSecurity:BuildingSecurityIn》/《软件安全:使安全成为软件开发必需的部分》采用系统化、规范化、和数量化的方法来指导构建安全的软件软件安全与测试16软件安全软件安全vs.安全的软件,不是一回事软件安全是一种系统级的问题,需要考虑安全机制(比如访问控制)和基于安全的设计(比如使攻击难以实施的健壮设计)软件安全必须成为完整的软件开发生命周期方法的一部分软件安全与测试17软件安全的特点软件安全是计算机安全的一个分支软件安全是计算机安全的关键软件安全问题的根源是软件存在弱点用工程化的方法来实施软件安全软件安全与测试18软件安全是计算机安全的一个分支现代社会中,我们生活所需的一切似乎都离不开计算机系统,我们的电力、供水、交通、通讯、金融等等,都依赖于计算机系统的安全运行。但是,计算机系统并不安全,它潜伏着严重的不安全性、脆弱性和危险性如何保障计算机系统的安全就成为我们这个时代的一个根本问题,计算机安全这门学科也因此应运而生,并成为近二十年来最热门的学科之一计算机安全的研究范畴包括硬件安全、软件安全、数据安全、运行安全和网络安全软件安全与测试19软件安全是计算机安全的关键由于病毒主要是通过网络传播,而黑客主要是通过网络来进行攻击,因此,多年来人们一直认为网络安全是计算机安全的主要问题。但是在网络安全上的巨大投入却没有从根本上解决计算机安全问题软件是计算机安全的大问题,危害计算机安全的绝大部分因素都与软件相关软件的不稳定导致系统崩溃和数据丢失病毒攻击的是软件的缺陷黑客利用的是软件的弱点机密和隐私的泄漏是因为软件存在漏洞计算机安全中的首要和关键问题是软件问题软件安全与测试20现有方法并不能解决软件安全问题反病毒程序和防火墙之类的保护程序密码学之类的信息加密技术假设有一个程序,其密码验证是用加密算法来实现的,它安装在一个被防火墙保护的系统中,系统中安装了反病毒程序这个程序是否健壮,可能存在溢出类弱点没有谁能保证防火墙和反病毒软件是完全可靠的,它们也可能存在缓冲区溢出之类的弱点软件安全问题的根源是软件存在弱点软件安全与测试21软件安全问题的根源是软件存在弱点软件安全问题的根源就是我们所依赖的软件存在太多的安全弱点,而不断增加的软件复杂性和可扩展性更是火上浇油般地助长了这种情形解决软件安全问题的根本方法就是改善我们建造软件的方式,以建造健壮的软件,使其在遭受恶意攻击时依然能够安全可靠和正确运行软件安全与测试任何软件都是不安全的测试只能减少软件安全问题的发生,但是不能完全解决安全问题业界公认一个事实:几乎所有的软件都是带着安全隐患投入运行从技术方面讲,软件的安全问题是普遍存在的。黑客总可以采取种种手段入侵,让用户防不胜防22软件安全与测试软件不安全性的表现软件在运行过程中不稳定,出现异常现象、得不到正常结果或者在特殊情况下由于一些原因造成系统崩溃由于异常处理不当,软件运行期间遇到突发问题,处理异常之后无法释放资源,导致这些资源被锁定无法使用由于线程处理不当,软件运行中得不到正常结果由于网络连接处理不当,网络软件运行过程中,内存消耗越来越大,系统越来越慢,最后崩溃由于编程没有进行优化,程序运行消耗资源过大23软件安全与测试软件不安全性的表现黑客利用各种方式达到窃取信息、破坏系统的目的黑客通过一些手段获取数据库中的明文密码黑客利用软件的缓冲区溢出,运行敏感的函数黑客利用软件对数据的校验不全面,给用户发送虚假信息黑客对用户进行拒绝服务攻击24软件安全与测试软件不安全的原因从软件开发者的角度软件生产没有严格遵守软件工程流程编程人员没有采用科学的编程方法测试不到位(不过有时是无法到位)从软件工程客观角度软件复杂性和工程进度的平衡安全问题的不可预见性由于软件需求的变动软件组件之间的交互的不可预见性25软件安全与测试26大纲软件与软件安全软件安全的三个支柱软件安全与其他相关领域的关系软件安全工具简介软件安全与测试27用工程化的方法来实施软件安全在整个软件开发生命周期中都要确保将安全作为软件的一个有机组成部分软件安全的三根支柱:应用风险管理、软件安全的接触点(切入点)和知识软件安全与测试28应用风险管理风险管理是一种战略性方法,即将追踪和减轻风险作为一种贯穿整个生命周期的指导方针成功的风险管理其实就是一种业务级中的决策支持工具;一种收集必需的数据并基于弱点、威胁、影响和概率的知识作出正确判断的方法软件安全与测试29软件安全的接触点接触点,即在软件开发生命周期中保障软件安全的一套最优方法,是一种战术性方法七个接触点:代码审核、体系结构风险分析、渗透测试、基于风险的安全测试、滥用案例、安全需求和安全操作“安全的”开发生命周期能够在每一个开发阶段上尽可能地避免和消除漏洞软件安全与测试30软件安全的接触点应用于不同的软件工件的软件安全最优方法(根据传统的瀑布模型来布局)软件安全与测试31软件安全的知识知识,包括收集、压缩和共享能用于为软件安全方法提供坚实基础的安全知识由于软件安全是一门新的学科,及时总结知识,并用知识来教育所有相关的人员,对确保软件安全是至关重要的在整个开发生命周期中综合应用这些方法,就能从设计、编码和测试等各个层面上消除软件中的安全弱点,从制度上、方法上最大限度地保障软件安全软件安全与测试32软件安全的知识知识是特定领域中相互关联的信息---能够通过一定的方法和过程得以运用的信息例如:C和C++中的一组潜在的安全缺陷是信息;在静态分析工具中的这样的信息就是知识软件安全知识可以归成为七种(原则、方针、规则、弱点、攻击程序、攻击模式和历史风险),并划分为三个知识类(说明性知识、诊断性知识和历史知识)软件安全与测试软件安全的知识描述性知识:包括原则、方针和规则原则和方针是从方法论的高度进行定义和描述规则是从代码级角度进行有针对性地抽象和统一描述性知识类提供了一些建议,旨在说明该做什么和在构建安全的软件时应该避免什么历史知识包括历史风险,在有些情形下也包括弱点的历史数据库这类知识还包括对在实际的软件开发中所发现的特定问题的详细描述,以及该问题产生的影响33软件安全与测试软件安全的知识诊断性知识:包括攻击模式、攻击程序和弱点攻击模式采用较抽象的形式来描述常见的攻击程序,这种形式能够应用于跨越多个系统的情形,即在多个系统中均存在的攻击模式,该知识可被安全分析人员所利用,如基于滥用案例的可靠性检测等。攻击程序描述了弱点实例如何被用来对特定系统造成特别的安全危害弱点知识是对真实系统中出现过并报告的软件弱点的描述诊断性知识不仅包括关于实践的描述性陈述,其更重要的目标是帮助操作人员识别和处理导致安全攻击的常见问题34软件安全与测试软件安全的知识描述性知识从战略
本文标题:软件安全概述
链接地址:https://www.777doc.com/doc-7237523 .html