软件安全的理解Word文档格式.docx
《软件安全的理解Word文档格式.docx》由会员分享,可在线阅读,更多相关《软件安全的理解Word文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
即采用系统化、规范化、数量化的方法来指导构建安全的软件。
4软件安全工程化
3大支柱——风险管理、软件安全切入点、安全知识5软件安全的知识体系——描述性知识(原则、方针、规则)、诊断性知识(弱点、攻击程序、攻击模式)、历史知识(历史风险);
这3类包含了7种知识:
原则、方针、规则、弱点、攻击程序、攻击模式、历史风险。
6软件工程——是一门研究如何使用系统化、规范化、数量化等工程原则和方法进行软件的开发和维护的学科
6.1软件工程层次工具层方法层过程层(基础)质量保证层
6.2软件工程三要素:
方法、工具、过程
6.3软件工程研究内容
7软件保证——是计划的和系统的行动集合来确保软件过程和产品符合需求、标准和规程。
7.1软件保证的两个目标
7.1.1可信性——即没有可利用的弱点存在,无论是来自敌意的还是无意的企图。
7.1.2执行可预见——可证明信任软件在执行的时候是依照所希望的那样运行和工作。
这些行为包括需求分析、测试、验证、以及报告。
7.2软件保证的内容——质量保证、质量工程、验证、正确性证明、不合规范报告、纠错行为、安全保证、数据隐私性保证、以及在软件生命周期中的应用情况。
7.3软件保证关系到软件的两个属性——质量、可靠性
8软件质量——系统、部件或过程满足明确要求(IEEE定义)。
——满足或超出认定的一组需求,并使用经过认可的评测方法和标准来评估,还是用认定的流程来生产。
9软件质量保证(SQA)的原则——①确保SQA要自始至终有计划进行②审查软件产品是否遵守适用的标准、规程和要求,并得到客观验证③SQA和结果要保证全员参与,沟通顺畅④逐级解决不符合问题
10软件质量的体现可靠性:
产品在规定的条件下和规定的时间内,完成规定功能的能力,其效力度量为可靠度。
软件可靠性:
在规定环节下及时间内,软件不引起系统失效的概率。
可维护性:
产品在规定的条件下和时间内,按规定的程序和方法进行维修,保持或恢复到规定的状态的能力。
安全性:
将伤害或损坏的风险限制在可接受水平内的能力。
可用性:
产品在任一随机时刻需要和开始执行任务时,处于可工作和可使用状态的程度。
机密性:
避免未经许可泄露信息的能力。
完整性:
避免不适当地更改的能力。
经济型:
通常用寿命周期费用表示软件开发过程中的成本和开销。
11软件质量量度模型——①高层:
软件质量需求评价准则(SQRC)②中层:
软件质量设计评价准侧(SQDC)③低层:
软件质量度量评价标准(SQMC)
12软件可靠性工程——预计、测量和管理以软件为基础的系统的可靠性,最大限度的满足用户要求的应用科学。
12.1软件可靠性工程的内容——①关于软件可靠性的规格说明②SR的分析测量技术③一整套保证软件开发的方法和技术。
12.2软件可靠性工程的研究范围——软件可靠性定量评测、设计与管理、保证技术。
13软件容错性——软件运行时,能对非正常因素引起的错误给出适当的处理货信息提示,是软件运行正常结束。
13.1容错技术包含下面几个方面故障检测技术:
在软件中的故障暴露时,能对由此而引起的故障产生响应的过程。
故障恢复技术:
在软件中预先设定一个恢复点,在运行过程中可恢复到预设点的状态破坏估计:
对故障引起的破坏做出正确的估计,隔离故障。
故障隔离技术:
主动采取措施,防止故障破坏性蔓延的技术。
继续服务:
从故障中恢复到,可用的状态。
14应用安全——关注应用系统的安全性,或网络应用层的安全性。
15专有名称及定义
16软件安全工具
16.1反汇编工具——将2进制代码为输入,生成整个或部分程序的汇编语言代码的文本文件的程序;
例子:
IDAProv、W32Dasm
17调试器——让软件开发人员在程序运行的同时观察程序的运行过程和状态。
基本功能:
设置断点、代码跟踪。
18反编译器——输入2进制文件,生成可读性好的高级语言代码。
19系统监控工具——显示操作系统收集到的有关应用程序及其环境的信息。
例子:
FileMon(文件系统监控:
所有文件系统级的监控)、RegMon(注册表活动监控)、ProcessExplorer、TCPView(TCP和UDP网络连接监控)、Portmon(物理端口监控)、WinObj(系统中的命名对象)、RootkitRevealer(列出注册表和文件系统API的差异)、Autoruns(显示开机启动的项目)。
20修补和转储工具——可以修改2进制可执行代码以改变其行为的过程,常与软件破解有关。
例子:
HexWorkshop、UltraEdit、WinHex、Dumpbin、PEview.
第一章课后习题:
1恶意代码的趋势是什么?
答:
①攻击方式会从WEB转移到文件共享网络。
2什么是软件安全?
采取工程的方法使得软件在敌对攻击的情况下仍能够继续正常工作。
即采用系统化、规范化、数量化的方法来指导构建安全的软件。
3简述软件安全与软件工程、软件质量、软件保证、软件质量保证之间的联系。
第三章缺陷和漏洞简介
1软件缺陷——从产品内部看,软件缺陷是软件产品开发或者维护过程中所存在的错误、毛病等各种问题;
从外部看软件缺陷是系统所需要实现的某种功能的失效和违背。
2漏洞——系统设计、实现和操作管理中存在的缺陷和弱点,能被利用而违背系统的安全策略。
3软件缺陷存在的原因
4软件缺陷的严重性级别——①致命的:
造成系统和应用程序崩溃、死机、系统悬挂,数据丢失、主要功能完全丧失等②严重的:
功能或特性没有实现,主要功能丧失,导致严重的问题,或致命的错误声明③一般的:
不影响系统的使用,但没有很好的实现功能④轻微的:
对功能几乎没有影响,产品及属性仍可使用。
5软件缺陷状态——①激活状态:
问题还没有解决,新发现的缺陷验证后仍存在缺陷②已经修正状态:
针对存在的缺陷已经修正好了③非激活状态:
验证测试后缺陷不存在的状态。
6漏洞存在的原因——①设计漏洞:
包括密码设置不当;
安全需求不明确②实现漏洞:
即编码的时候产生的漏洞。
7堆栈——被应用程序所使用的保留的虚拟内存区域,是操作系统分配内存的方法。
8栈溢出——输入数据时,由于没有进行边界检查,导致输入的数据的数据量超过堆栈预留的存储空间,最终覆盖了堆栈中的返回地址。
如果覆盖返回地址的是一个攻击程序的地址,则这个攻击程序就可以运行了。
9修改邻接变量的栈溢出——栈溢出的主要危害是能够修改邻接变量和修改返回地址。
当输入变量没有进行边界检查,长度超出预先设想的长度,则会覆盖其他邻接变量甚至是返回地址。
10植入代码——如果用注入代码的起始地址覆盖原来的返回地址,就成了代码注入。
11栈溢出的防御方法——①避免或正确使用可能产生栈溢出的函数,如gets()、fgets()等②进行堆栈检查:
在堆栈最后一个局部变量和函数的返回地址之间另外再压入一个cookie,在函数返回到主调用函数之前检查cookie是否被修改了。
修改了说明返回地址呗重写了立即停止程序。
12堆——类似于堆栈,堆也是应用程序所使用的虚拟内存的一个区域。
和堆栈不同,堆可以建立私有堆空间,也可以释放堆空间:
分配对空间代码
13堆与栈的区别
14堆结构
15堆块——包括块首和块身,块首是一个堆块头部的几个字节,用来标识这个堆块自身的信息:
大小、是否空闲等。
块身是数据区。
16堆表——一般位于堆区的起始位置,用于索引堆区中所有堆块的重要信息,包括堆块的大小,位置,是否被占用等。
占用的堆块被使用它的程序索引,堆表只索引所有空闲堆块。
17堆块分配类型①Lookaside分配:
寻找到大小匹配的空闲块,将其状态修改为占用,去掉堆表指针,返回一个指向块的指针给程序。
②Freelist分配:
首先寻找最优的空闲块,如果失败则寻找次优的空闲块,即最小的能满足的空闲块③Free[0]分配:
由于按照大小升序链着大小不同的空闲块,分配时先从Freelist[0]反向查找最后一个块(即表中最大的块),看是否满足要求,若能则正向搜索最小能满足要求的空闲块进行分配。
18Windows分配策略19堆溢出原理——和栈溢出是一样的,即堆的空间无法容纳用户输入的数据,导致数据重写了堆块后的地址空间。
20格式化串——C/C++中有一些函数(如printf())没有固定的参数列表.计算机程序通常需要能够在运行时创建字符串。
这些字符串可能包含多种类型的变量。
——是C、C++等程序设计语言printf类函数中用于指定输出参数的格式与相对位置的字符串参数。
其中的转换说明(conversionspecification)用于把随后对应的0个或多个函数参数转换为相应的格式输出;
格式化字符串中转换说明以外的其它字符原样输出。
21格式化串漏洞机理——实际上是输入输出确认缺陷,产生源头在外部提供的、不给信任的数据被包含在格式化字符串的参数中。
22格式化串漏洞防治——在所需要格式化字符串参数的程序中不使用非常量作为格式化字符串参数。
Windows比linux更容易预防:
原因是攻击者操作字符串输入进行利用,低位堆栈使得在堆栈中存放shellcode和在字符串本身插入该代码的起始地址非常困难。
Linux堆栈地址位于高位内存,windows位于低位内存。
23.SQL注入漏洞——是Web系统特有的一类漏洞,源于PHP、ASP等脚本语言对用户输入数据的错误解析。
(网站程序员在编写代码时,没有对用户输入数据的合法性进行判断使应用程序存在安全隐患,用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想要得到的数据这就是所谓的SQL注入)
24.SQL注入攻击的防范——①使用SQL注入攻击自动化的工具进行渗透测试②在Web服务器运行时进行实时的入侵检测,处理问题的位置位于脚本程序与数据库之间③借鉴静态代码分析技术查找程序高级逻辑错误的方法来对脚本代码进行漏洞挖掘④Web应用要对用户输入的数据进行限制,过滤掉可能引起攻击的字符。
25漏洞5种分类第三章课后习题1windows环境下进程的内存如何布局?
答:
2简述堆栈溢出的机理答:
输入数据时,由于没有进行边界检查,导致输入的数据的数据量超过堆栈预留的存储空间,最终覆盖了堆栈中的返回地址。
如果覆盖返回地址的是一个攻击程序的地址,则这个攻击程序就可以运行了。
3简述堆溢出机理答:
和栈溢出是一样的,即堆的空间无法容纳用户输入的数据,导致数据重写了堆块后的地址空间。
4简述SQL注入