信息安全产品开发实践bpwg.docx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《信息安全产品开发实践bpwg.docx》由会员分享,可在线阅读,更多相关《信息安全产品开发实践bpwg.docx(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、信息安全产品开发实践课程设计报告 缓冲区溢出的保护Evaluation Warning: The document was created with Spire.Doc for .NET.*大学*学院信息安全产产品开发发实践课课程设计计报告题 目 缓冲冲区溢出出的保护护 学生姓名 学 号_ _ 年 级 指导老师 指导老师评评阅意见见: 指导老师评评分: 提交时间: 20007年年12月 缓冲区溢出出的保护护(软件件工程专专业)学生 学学号 指导导教师 摘要:19999 年 BBugttraqq(一个个讨论安安全缺陷陷的邮件件列表)进进行的一一次非正正式调查查发现,三三分之二二的参与与者认为为第
2、一号号的缺陷陷就是缓缓冲区溢溢出。从从 19997 年到 20007 年 3 月月,CEERT/CC 发出的的半数安安全警报报都基于于缓冲区区缺陷。 面对如如此大的的威胁,我我们需要要知道什什么是缓缓冲区溢溢出,如如何防止止它们,可可以采用用哪些最最新的自自动化工工具来防防止它们们以及为为什么这这些工具具还不足足够,还还有如何何在编写写程序的的程序中中防止它它们。关键字:缓缓冲区溢溢出;溢出保保护;溢出防御御 Detecctioon OOf BBufffer Overrfloow Absttracct: Froom aan iinfoormaal iinveestiigattionn onn
3、Buugtrraq (a maiil llistt whhichh diiscuuss a llimiitattionn onn seecurrityy) iin 119999, wwe ccan finnd tthatt twwo-ppartts parrticcipaantss thhougght thaat tthe No.1 llimiitattionn iss buuffeer ooverrfloow. Froom 119977 too Maay, 20007, almmostt haalf thee seecurre wwarnninggs ssentt byy CEERT/CC
4、werre bbaseed oon tthe limmitaatioon oof bbufffer. Faacinng ssuchh a hugge mmenaace, wee neeed to leaarn whaat iis tthe buffferr ovverffloww, hhow to deffendd thhem, whhichh kiindss off thhe llateest auttomaatizzatiion toools we cann ussed forr avvoidd thhem , wwhy theese toools stiill nott ennouggh
5、, andd hoow tto pprevventt thhem in proograammiing.Keywoordss: BBufffer Oveerfllow,Oveerfllow Dettecttionn, Oveerfllow Deefennse 正文1 绪论1.1 立立题背景景缓冲区溢出出是当前前一些软软件存在在的最常常见的安安全隐患患之一,通通过提供供一个恶恶意的输输入黑客客可以改改变进程程的执行行流程,缓缓冲区溢溢出能够够威胁到到整个进进程,机机器,甚甚至相关关的系统统领域。如如果运行行的进程程是在权权限比较较高的用用户下面面,比如如admminiistrratoor或者者本地
6、的的系统帐帐户(LLocaal SSysttem Acccounnt),那么黑黑客破坏坏所导致致的损失失将会很很严重而而且将会会面临更更广泛的的潜在危危胁。最最近时期期爆发的的一些众众所周知知的病毒毒像,红红色代码码病毒和和震荡波波蠕虫病病毒,都都是C/C+代码里里存在着着缓冲区区溢出的的结果。1.2 研研究内容容在几乎所有有计算机机语言中中,不管管是新的的语言还还是旧的的语言,使使缓冲区区溢出的的任何尝尝试通常常都会被被该语言言本身自自动检测测并阻止止(比如如通过引引发一个个异常或或根据需需要给缓缓冲区添添加更多多空间)。但但是有两两种语言言不是这这样:CC 和 C+ 语言言。C 和 CC+
7、 语言通通常只是是让额外外的数据据乱写到到其余内内存的任任何位置置,而这这种情况况可能被被利用从从而导致致恐怖的的结果。更更糟糕的的是,用用 C 和 CC+ 编写正正确的代代码来始始终如一一地处理理缓冲区区溢出则则更为困困难;很很容易就就会意外外地导致致缓冲区区溢出。除除了 CC 和 C+ 使用用得 非非常广泛泛外,上上述这些些可能都都是不相相关的事事实;例例如,RRed Hatt Liinuxx 7.1 中中 866% 的的代码行行都是用用 C 或 CC + 编写写的。因因此,大大量的代代码对这这个问题题都是脆脆弱的,因因为实现现语言无无法保护护代码避避免这个个问题。 在 C 和和 C+ 语
8、语言本身身中,这这个问题题是不容容易解决决的。该该问题基基于 CC 语言言的根本本设计决决定(特特别是 C 语语言中指指针和数数组的处处理方式式)。由由于 CC+ 是最兼兼容的 C 语语言超集集,它也也具有相相同的问问题。存存在一些些能防止止这个问问题的 C/CC+ 兼容版版本,但但是它们们存在极极其严重重的性能能问题。而而且一旦旦改变 C 语语言来防防止这个个问题,它它就不再再是 CC 语言言了。许许多语言言(比如如 Jaava 和 CC#)在在语法上上类似 C,但但它们实实际上是是不同的的语言,将将现有 C 或或 C+ 程程序改为为使用那那些语言言是一项项艰巨的的任务。有些语言存存在允许许
9、缓冲区区溢出发发生的&ldqquo;转义&rdqquo;子句。AAda 一般会会检测和和防止缓缓冲区溢溢出(即即针对这这样的尝尝试引发发一个异异常),但但是不同同的程序序可能会会禁用这这个特性性。C# 一般般会检测测和防止止缓冲区区溢出,但但是它允允许程序序员将某某些例程程定义为为“不安全全的”,而这这样的代代码 可可能 会会导致缓缓冲区溢溢出。因因此如果果您使用用那些转转义机制制,就需需要使用用 C/C+ 程序序所必须须使用的的相同种种类的保保护机制制。许多多语言都都是用 C 语语言来实实现的(至至少部分分是用 C 语语言来实实现的 ),并并且用任任何语言言编写的的所有程程序本质质上都依依赖
10、用 C 或或 C+ 编编写的库库。因此此,所有有程序都都会继承承那些问问题,所所以了解解这些问问题是很很重要的的。 2缓冲区区溢出的的概述 2.1 缓缓冲区溢溢出的起起源内存溢出已已经是软软件开发发历史上上存在了了近400年的“老大难难”问题2.2缓冲冲区溢出出如何工工作计算机还有有由程序序共享, 随机访访问内存存 (RRAM)。 为为了简化化, 内内存管理理 Wiindoows XP SP 2 有有功能控控制当前前正在使使用哪段段的 RRAM。 如果启启动程序序, 释释放内存存分配给给程序。 该内存被分分为三段段: 代码段段此处存储程程序特定定执行命命令。 数据段段此处程序特特定数据据存储。
11、 堆栈是是数据段段 (一一部分)此处存储所所有与程程序函数数。 这这包括参参数、 缓冲区区存储本本地变量量以及, 最重重要、 返回地地址。 返回地地址指定定执行函函数后, 程序将将继续从从。作为是由用用户输入入该信息息也注册册作为变变量, 一切, 发送到到堆栈用用户类型型。 不不通常, 此行行为不提提出问题题。 但但是, 如果因因编程错错误, 超过缓缓冲区限限制堆栈栈成为容容易控制制。 整整个段被被指定为为本地变变量例如如, 如如果攻击击者选择择适当项项对于攻攻击, 可能会会覆盖用用指令。 此外, 后续续返回地地址可更更改为指指向恶意意代码。 因此, 程序序不再正正常, 但盲目目执行攻攻击者的
12、的命令。内存的底部部 内内存的顶顶部 bufffer11 ssfp reet a b c - 增长 - . 堆栈的顶部部 堆堆栈的底底部 许多计算机机处理器器,包括括所有 x866 处理理器,都都支持从从高位地地址向低低位地址址“倒”增长堆堆栈。因因此,每每当一个个函数调调用另一一个函数数,更多多的数据据将被添添加到左左边(低低位地址址),直直至系统统的堆栈栈空间耗耗尽。在在这个例例子中,当当 maain() 调调用 ffuncctioon1() 时时,它将将 c 的值压压入堆栈栈,然后后压入 b 的的值,最最后压入入 a 的值。之之后它压压入 rretuurn (reet) 值,这这个值在在
13、 fuuncttionn1() 完成成时告诉诉 fuuncttionn1() 返回回到 mmainn() 中的何何处。它它还把所所谓的“已保存存的帧指指针(ssaveed fframme ppoinnterr,sffp)”记录到到堆栈上上;这并并不是必必须保存存的内容容,此处处我们不不需要理理解它。在在任何情情况下, funnctiion11() 在启动动以后,它它会为 buffferr1() 预留留空间,这这在图 1 中中显示为为具有一一个低地地址位置置。 现在假设攻攻击者发发送了超超过 bbufffer11() 所能处处理的数数据。接接下来会会发生什什么情况况呢?当当然,CC 和 C+ 程
14、序序员不会会自动检检查这个个问题,因因此除非非程序员员明确地地阻止它它,否则则下一个个值将进进入内存存中的“下一个个”位置。那那意味着着攻击者者能够改改写 ssfp (即已已保存的的帧指针针),然然后改写写 reet (返返回地址址)。之之后,当当 fuuncttionn1() 完成成时,它它将“返回” 不不过不是是返回到到 maain() ,而而是返回回到攻击击者想要要运行的的任何代代码。 通常攻击者者会使用用它想要要运行的的恶意代代码来使使缓冲区区溢出,然然后攻击击者会更更改返回回值以指指向它们们已发送送的恶意意代码。这这意味着着攻击者者本质上上能够在在一个操操作中完完成整个个攻击!Ale
15、eph On 的文章章(请参参阅 参参考资料料)详细细介绍了了这样的的攻击代代码是如如何创建建的。例例如,将将一个 ASCCII 0 字字符压入入缓冲区区通常是是很困难难的,而而该文介介绍了攻攻击者一一般如何何能够解解决这个个问题。 除了 smmashhingg-sttackk 和更更改返回回地址外外,还存存在利用用缓冲区区溢出缺缺陷的其其他途径径。与改改写返回回地址不不同,攻攻击者可可以 ssmasshinng-sstacck(使使堆栈上上的缓冲冲区溢出出),然然后改写写局部变变量以利利用缓冲冲区溢出出缺陷。缓缓冲区根根本就不不必在堆堆栈上 它它可以是是堆中动动态分配配的内存存(也称称为“m
16、alllocc”或“neww”区域),或或者在某某些静态态分配的的内存中中(比如如“glooball”或“staaticc”内存)。基基本上,如如果攻击击者能够够溢出缓缓冲区的的边界,麻麻烦或许许就会找找上你了了。 然然而,最最危险的的缓冲区区溢出攻攻击就是是 sttackk-smmashhingg 攻击击,因为为如果程程序对攻攻击者很很脆弱,攻攻击者获获得整个个机器的的控制权权就特别别容易 2.3缓缓冲区溢溢出分类类 22.3.1在程序序的地址址空间里里安排适适当的代代码 2.3.11.1殖入入法 攻击者用被被攻击程程序的缓缓冲区来来存放攻攻击代码码。 攻攻击者向向被攻击击的程序序输入一一个
17、字符符串,程程序会把把这个字字符串放放到缓冲冲区里。这这个字符符串包含含的数据据是可以以在这个个被攻击击的硬件件平台上上运行的的指令序序列。 2.3.11.2利利用已经经存在的的代码 有时候,攻攻击者想想要的代代码已经经在被攻攻击的程程序中了了,攻击击者所要要做的只只是对代代码传递递一些参参数,然然后使程程序跳转转到指定定目标。比比如,在在C语言言中,攻攻击代码码要求执执行“exeec(/biin/ssh)”,而在在libbc库中中的代码码执行“exeec(aarg)”,其中中argg是指向向一个字字符串的的指针参参数,那那么攻击击者只要要把传入入的参数数指针指指向/binn/shh,就就可以
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信息 安全产品 开发 实践 bpwg
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内