堆溢出及其利用技术深入研究课件_第1页
堆溢出及其利用技术深入研究课件_第2页
堆溢出及其利用技术深入研究课件_第3页
堆溢出及其利用技术深入研究课件_第4页
堆溢出及其利用技术深入研究课件_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Windows2003堆溢出及其利用技术深入研究作者:FlashSky日期:2003-12-26Windows2003堆溢出及其利用技术深入研究作者:F1感谢

安全焦点所有的成员与启明星辰积极防御实验室的同事主讲目录

WINDOWS堆结构简介WINDOWS堆溢出利用WINDOWS2003堆溢出保护WINDOWS2003堆溢出保护的弱点思路的延续:弱点利用深入的讨论思路的突变:更广泛的另类有效利用的手段未来WINDOWS2003堆溢出利用研究的方向Copyright©FlashSky@2003感谢Copyright©FlashSky@xfocus2WINDOWS堆结构简介(1)前言 WINDOWS2003,系统低层的安全性改进 本文的目的当前关于WINDOWS堆的研究 WINDOWS堆管理结构与管理特性的研究 WINDOWS堆特性在堆溢出时的利用的研究 WINDOWS2003的堆特性的研究Copyright©FlashSky@2003WINDOWS堆结构简介(1)Copyright©Fl3WINDOWS堆结构简介(2)WINDOWS堆结构简介 堆与堆块 堆管理结构与堆块管理结构 堆的整体结构构架

Copyright©FlashSky@2003WINDOWS堆结构简介(2)Copyright©Fl4Copyright©FlashSky@2003堆管理结构块(SIZE:0X640/0XC50)堆段表块0(SIZE:0X40)小堆块分配管理表结构(SIZE:0X1818),可选用户堆块数据区堆的基地址一般紧接着堆管理结构块之后Copyright©FlashSky@xfocus.or5WINDOWS堆结构简介(3)WINDOWS堆块分配与释放的管理

大堆块对象与小堆块对象空闲堆块双向链表头 空闲大堆对象与空闲小堆对象入链算法

Copyright©FlashSky@2003WINDOWS堆结构简介(3)Copyright©Fl6WINDOWS堆溢出利用(1)基本原理常见的普通利用方式: 引起空闲堆组成的双向链表的脱链的操作

Copyright©FlashSky@2003WINDOWS堆溢出利用(1)Copyright©Fl7Copyright©FlashSky@2003NextP2PrevP0NextP3PrevP1NextP4PrevP2NextP3/PrevP3NextP2/PrevP2NextP1/PrevP1NextP3PrevP0NextP3PrevP1NextP4PrevP1一个正常的堆块脱链表过程Copyright©FlashSky@xfocus.or8WINDOWS堆溢出利用(2)双向链表的入链利用的可能性 可利用的原理 利用的要求

Copyright©FlashSky@2003WINDOWS堆溢出利用(2)Copyright©Fl9NextP3PrevP0NextP3PrevP1NextP4PrevP1NextP3/PrevP3NextP2/PrevP2NextP1/PrevP1NextP2PrevP0NextP4PrevP1UNKNUNKPNextP3PrevP1NextP2PrevP0NextP4PrevP2一个正常的大堆块插入入链表过程Copyright©FlashSky@2003NextP3PrevP0NextP3PrevP1NextP410WINDOWS堆溢出利用(3)覆盖空闲大堆可以达到的目的:

我们能将一个当前释放堆的地址填入到一个由我们指定的内存地址中

Copyright©FlashSky@2003WINDOWS堆溢出利用(3)Copyright©Fl11NextP3PrevP0NextP4PrevP1NextP3PrevP0JMPTSEHPTSEHNextP3PrevP0JMPNextP2NextP2NextP3SEHPTOPSEHTOPSEH一个利用大堆块插入入链表的过程NextP3/PrevP3NextP1/PrevP1NextP2/PrevP2Copyright©FlashSky@2003NextP3PrevP0NextP4PrevP1NextP312WINDOWS堆溢出利用(4)入链表利用的进一步

问题:当前释放堆块地址的前8字节内容是我们无法控制的指针价值。 解决方法:再次分配时候可以将我们可以控制的4字节写入

Copyright©FlashSky@2003WINDOWS堆溢出利用(4)Copyright©Fl13Copyright©FlashSky@2003NextP3PrevP0JMPNextP2NextP2JMPSEHPNextP3PrevP0JMPNextP2NextP2JMPSEHPTOPSEHJMPADDR触发异常利用分配再次写入JMP代码到头四字节Copyright©FlashSky@xfocus.or14WINDOWS堆溢出利用(5)WINDOWS堆溢出可以利用的途径

脱链表时 入链表时Copyright©FlashSky@2003WINDOWS堆溢出利用(5)Copyright©Fl15WINDOWS2003堆溢出保护(1)基于堆溢出利用原理的检查 基于覆盖双向链表的地址导致可写入任一地址空间 检查上下链表的一致性可以检查和防止堆溢出的利用

Copyright©FlashSky@2003WINDOWS2003堆溢出保护(1)Copyright16Copyright©FlashSky@2003

leaecx,[esi+8] movedi,[ecx] mov[ebp-0D8h],edi moveax,[esi+0Ch] mov[ebp-94h],eax movedx,[eax]

cmpedx,[edi+4]

jnzloc_77F36DE1

cmpedx,ecx

jnzloc_77F36DE1 mov[eax],edi mov[edi+4],eaxWINDOWS2003的检查的代码Copyright©FlashSky@xfocus.or17WINDOWS2003堆溢出保护(2)简单而言,其要求就是 被处理的当前堆块的管理结构的双向链表的下一个堆块指针与上一堆块指针要满足如下条件: 1.当前堆块的下一个堆块指针指向的堆块的上一个堆块指针要等于当前堆块的地址 2.当前堆块的上一个堆块指针指向的堆块的下一个堆块指针要等于当前堆块的地址 Copyright©FlashSky@2003WINDOWS2003堆溢出保护(2)Copyright18WINDOWS2003堆溢出保护(3)普通饶过的困难 需要构造这样的条件需要准确的知道当前堆块的地址,然而往往当前堆块的地址我们不可知。

同时我们需要改写的有效的内存地址如SHE,RETADDR,TOPSHE,FUNCHANDLE等周围的内容我们不可控制

Copyright©FlashSky@2003WINDOWS2003堆溢出保护(3)Copyright19WINDOWS2003堆溢出保护的弱点与问题(1)保护的范围 跟踪所有的利用途径,发现: WINDOWS2003只对出链表的路径做了完善检查,缺乏对入链表路径利用的检查。 构造满足入链表攻击的条件就能成功修改一个特定内存的值为释放堆块的地址。MS遗漏检查的原因?

Copyright©FlashSky@2003WINDOWS2003堆溢出保护的弱点与问题(1)Cop20WINDOWS2003堆溢出保护的弱点与问题(2)检查的逻辑 逻辑上,并不能真正保证检查的正确性。 某种含义上,我们还是能欺骗这种保护,如果我们能找到一种有普遍意义的特殊的利用形式,我们也能饶过检查。

Copyright©FlashSky@2003WINDOWS2003堆溢出保护的弱点与问题(2)Cop21思路的延续:遗漏检查利用深入的讨论(1)新的困难 无法使用分配的过程再次写入JMPCODE,这样头8字节我们无法控制其内容,引起SHELLCODE执行的异常或失败。 因为分配路径做了完整的保护检查 。Copyright©FlashSky@2003思路的延续:遗漏检查利用深入的讨论(1)Copyright22Copyright©FlashSky@2003NextP3PrevP0JMPNextP2NextP2NextP3SEHPTOPSEH无法满足检查的条件Copyright©FlashSky@xfocus.or23思路的延续:遗漏检查利用深入的讨论(2)期待于运气?再次的推导:构造的欺骗 如果我们能知道堆块的准确地址,是否可以构造欺骗? 为什么这里能构造欺骗而前面不能?演示:一个构造欺骗写入JMP的实现Copyright©FlashSky@2003思路的延续:遗漏检查利用深入的讨论(2)Copyright24思路的延续:遗漏检查利用深入的讨论(3)新的发现与困境 一个可以满足检查的堆块的脱链操作将再次改写SEHCopyright©FlashSky@2003思路的延续:遗漏检查利用深入的讨论(3)Copyright25Copyright©FlashSky@2003NextP3PrevP0JMPNextP2NextP2NextP3SEHPTOPSEH如果我们能让这个堆块进行脱链表操作又如何?Copyright©FlashSky@xfocus.or26Copyright©FlashSky@2003NextP2PrevP0JMPSEHPNextP3NextP3SEHPTOPSEH这时异常会有什么结果?Copyright©FlashSky@xfocus.or27思路的延续:遗漏检查利用深入的讨论(4)双堆块释放的触发 一个可以满足检查的堆块的脱链操作将再次改写SHE指向我们原来的被覆盖的堆块(而不是当前释放的堆块),而这里的头4字节是我们可以控制的内容。演示:双堆块释放二次重写TOPSHE的实现利用Copyright©FlashSky@2003思路的延续:遗漏检查利用深入的讨论(4)Copyright28思路的延续:遗漏检查利用深入的讨论(5)更深入一步: 利用次序,在非双堆块释放环境下构造双堆块释放的环境演示:构造双堆块释放的实现限制条件汇总Copyright©FlashSky@2003思路的延续:遗漏检查利用深入的讨论(5)Copyright29思路的突变:更广泛的另类有效利用手段(1) 不能满足于覆盖空闲大堆块的苛刻条件,我们需要再求新的思路转换一下思路,构造欺骗用于新的利用形式:思路的来源

Copyright©FlashSky@2003思路的突变:更广泛的另类有效利用手段(1)Copyright30思路的突变:更广泛的另类有效利用手段(2)

一种利用的转换 与堆栈/数据区的结合 甚至可以用于制造空闲大堆块覆盖的条件

Copyright©FlashSky@2003思路的突变:更广泛的另类有效利用手段(2)Copyright31思路的突变:更广泛的另类有效利用手段(3)

演示:一个将堆溢出转化为数据区溢出利用的实现限制条件汇总

Copyright©FlashSky@2003思路的突变:更广泛的另类有效利用手段(3)Copyright32未来WINDOWS2003堆溢出研究的方向

Copyright©FlashSky@2003未来WINDOWS2003堆溢出研究的方向Copyrigh33Thanks!Q/AThanks!Q/A34Windows2003堆溢出及其利用技术深入研究作者:FlashSky日期:2003-12-26Windows2003堆溢出及其利用技术深入研究作者:F35感谢

安全焦点所有的成员与启明星辰积极防御实验室的同事主讲目录

WINDOWS堆结构简介WINDOWS堆溢出利用WINDOWS2003堆溢出保护WINDOWS2003堆溢出保护的弱点思路的延续:弱点利用深入的讨论思路的突变:更广泛的另类有效利用的手段未来WINDOWS2003堆溢出利用研究的方向Copyright©FlashSky@2003感谢Copyright©FlashSky@xfocus36WINDOWS堆结构简介(1)前言 WINDOWS2003,系统低层的安全性改进 本文的目的当前关于WINDOWS堆的研究 WINDOWS堆管理结构与管理特性的研究 WINDOWS堆特性在堆溢出时的利用的研究 WINDOWS2003的堆特性的研究Copyright©FlashSky@2003WINDOWS堆结构简介(1)Copyright©Fl37WINDOWS堆结构简介(2)WINDOWS堆结构简介 堆与堆块 堆管理结构与堆块管理结构 堆的整体结构构架

Copyright©FlashSky@2003WINDOWS堆结构简介(2)Copyright©Fl38Copyright©FlashSky@2003堆管理结构块(SIZE:0X640/0XC50)堆段表块0(SIZE:0X40)小堆块分配管理表结构(SIZE:0X1818),可选用户堆块数据区堆的基地址一般紧接着堆管理结构块之后Copyright©FlashSky@xfocus.or39WINDOWS堆结构简介(3)WINDOWS堆块分配与释放的管理

大堆块对象与小堆块对象空闲堆块双向链表头 空闲大堆对象与空闲小堆对象入链算法

Copyright©FlashSky@2003WINDOWS堆结构简介(3)Copyright©Fl40WINDOWS堆溢出利用(1)基本原理常见的普通利用方式: 引起空闲堆组成的双向链表的脱链的操作

Copyright©FlashSky@2003WINDOWS堆溢出利用(1)Copyright©Fl41Copyright©FlashSky@2003NextP2PrevP0NextP3PrevP1NextP4PrevP2NextP3/PrevP3NextP2/PrevP2NextP1/PrevP1NextP3PrevP0NextP3PrevP1NextP4PrevP1一个正常的堆块脱链表过程Copyright©FlashSky@xfocus.or42WINDOWS堆溢出利用(2)双向链表的入链利用的可能性 可利用的原理 利用的要求

Copyright©FlashSky@2003WINDOWS堆溢出利用(2)Copyright©Fl43NextP3PrevP0NextP3PrevP1NextP4PrevP1NextP3/PrevP3NextP2/PrevP2NextP1/PrevP1NextP2PrevP0NextP4PrevP1UNKNUNKPNextP3PrevP1NextP2PrevP0NextP4PrevP2一个正常的大堆块插入入链表过程Copyright©FlashSky@2003NextP3PrevP0NextP3PrevP1NextP444WINDOWS堆溢出利用(3)覆盖空闲大堆可以达到的目的:

我们能将一个当前释放堆的地址填入到一个由我们指定的内存地址中

Copyright©FlashSky@2003WINDOWS堆溢出利用(3)Copyright©Fl45NextP3PrevP0NextP4PrevP1NextP3PrevP0JMPTSEHPTSEHNextP3PrevP0JMPNextP2NextP2NextP3SEHPTOPSEHTOPSEH一个利用大堆块插入入链表的过程NextP3/PrevP3NextP1/PrevP1NextP2/PrevP2Copyright©FlashSky@2003NextP3PrevP0NextP4PrevP1NextP346WINDOWS堆溢出利用(4)入链表利用的进一步

问题:当前释放堆块地址的前8字节内容是我们无法控制的指针价值。 解决方法:再次分配时候可以将我们可以控制的4字节写入

Copyright©FlashSky@2003WINDOWS堆溢出利用(4)Copyright©Fl47Copyright©FlashSky@2003NextP3PrevP0JMPNextP2NextP2JMPSEHPNextP3PrevP0JMPNextP2NextP2JMPSEHPTOPSEHJMPADDR触发异常利用分配再次写入JMP代码到头四字节Copyright©FlashSky@xfocus.or48WINDOWS堆溢出利用(5)WINDOWS堆溢出可以利用的途径

脱链表时 入链表时Copyright©FlashSky@2003WINDOWS堆溢出利用(5)Copyright©Fl49WINDOWS2003堆溢出保护(1)基于堆溢出利用原理的检查 基于覆盖双向链表的地址导致可写入任一地址空间 检查上下链表的一致性可以检查和防止堆溢出的利用

Copyright©FlashSky@2003WINDOWS2003堆溢出保护(1)Copyright50Copyright©FlashSky@2003

leaecx,[esi+8] movedi,[ecx] mov[ebp-0D8h],edi moveax,[esi+0Ch] mov[ebp-94h],eax movedx,[eax]

cmpedx,[edi+4]

jnzloc_77F36DE1

cmpedx,ecx

jnzloc_77F36DE1 mov[eax],edi mov[edi+4],eaxWINDOWS2003的检查的代码Copyright©FlashSky@xfocus.or51WINDOWS2003堆溢出保护(2)简单而言,其要求就是 被处理的当前堆块的管理结构的双向链表的下一个堆块指针与上一堆块指针要满足如下条件: 1.当前堆块的下一个堆块指针指向的堆块的上一个堆块指针要等于当前堆块的地址 2.当前堆块的上一个堆块指针指向的堆块的下一个堆块指针要等于当前堆块的地址 Copyright©FlashSky@2003WINDOWS2003堆溢出保护(2)Copyright52WINDOWS2003堆溢出保护(3)普通饶过的困难 需要构造这样的条件需要准确的知道当前堆块的地址,然而往往当前堆块的地址我们不可知。

同时我们需要改写的有效的内存地址如SHE,RETADDR,TOPSHE,FUNCHANDLE等周围的内容我们不可控制

Copyright©FlashSky@2003WINDOWS2003堆溢出保护(3)Copyright53WINDOWS2003堆溢出保护的弱点与问题(1)保护的范围 跟踪所有的利用途径,发现: WINDOWS2003只对出链表的路径做了完善检查,缺乏对入链表路径利用的检查。 构造满足入链表攻击的条件就能成功修改一个特定内存的值为释放堆块的地址。MS遗漏检查的原因?

Copyright©FlashSky@2003WINDOWS2003堆溢出保护的弱点与问题(1)Cop54WINDOWS2003堆溢出保护的弱点与问题(2)检查的逻辑 逻辑上,并不能真正保证检查的正确性。 某种含义上,我们还是能欺骗这种保护,如果我们能找到一种有普遍意义的特殊的利用形式,我们也能饶过检查。

Copyright©FlashSky@2003WINDOWS2003堆溢出保护的弱点与问题(2)Cop55思路的延续:遗漏检查利用深入的讨论(1)新的困难 无法使用分配的过程再次写入JMPCODE,这样头8字节我们无法控制其内容,引起SHELLCODE执行的异常或失败。 因为分配路径做了完整的保护检查 。Copyright©FlashSky@2003思路的延续:遗漏检查利用深入的讨论(1)Copyright56Copyright©FlashSky@2003NextP3PrevP0JMPNextP2NextP2NextP3SEHPTOPSEH无法满足检查的条件Copyright©FlashSky@xfocus.or57思路的延续:遗漏检查利用深入的讨论(2)期待于运气?再次的推导:构造的欺骗 如果我们能知道堆块的准确地址,是否可以构造欺骗? 为什么这里能构造欺骗而前面不能?演示:一个构造欺骗写入JMP的实现Copyright©FlashSky@2003思路的延续:遗漏检查利用深入的讨论(2)Copyright58思路的延续:遗漏检查利用深入的讨论(3)新的发现与困境 一个可以满足检查的堆块的脱链操作将再次改写SEHCopyright©FlashSky@2003思路的延续:遗漏检查利用深入的讨论(3)Copyright59Copyri

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论