微软Win8 SafeLink安全机制.pdf

上传人:椰子壳 文档编号:3333459 上传时间:2019-08-13 格式:PDF 页数:37 大小:2.42MB
返回 下载 相关 举报
微软Win8 SafeLink安全机制.pdf_第1页
第1页 / 共37页
微软Win8 SafeLink安全机制.pdf_第2页
第2页 / 共37页
微软Win8 SafeLink安全机制.pdf_第3页
第3页 / 共37页
微软Win8 SafeLink安全机制.pdf_第4页
第4页 / 共37页
微软Win8 SafeLink安全机制.pdf_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《微软Win8 SafeLink安全机制.pdf》由会员分享,可在线阅读,更多相关《微软Win8 SafeLink安全机制.pdf(37页珍藏版)》请在三一文库上搜索。

1、攻破微软Win8 SafeLink安全机制 传统利用手段 vs 新的防护方法 Peter Hlavat ESET软件工程师 兴趣: 漏洞研究 漏洞防护 内核开发 bootkit研究 恶意代码检测和移除算法 zer0mem 博客 : http:/zer0mem.sk/ 我是谁 正如Nico在他的演讲中提到的,碰巧的持续的威胁,传统的堆利 用正在消失 windows版本+ 攻击难度+ 弱实现= 机理利用之处 Introduction Windows 内存管理 我们来看一下算法 快速看一下 RtlpAllocateHeap FreeLists Link搜索算法 确实,在算法中很明显有一些安全加强之处

2、 头部进行了验证和编码 RtlpAnalyzeHeapFailure 安全上链 code1 = _Heap.EncodeFlagsMask ? code1 _Heap.Encoding.Code1 : code1 valid = code1.Flags (BYTE)code1.Size (code1.Size 8) = code1.SmallTagIndex size = code1.Size _Heap.EncodeFlagsMask 初始设置为 0x100000 _Heap.Encoding.Code1 设置为随机值 头部的验证和编码 cs:RtlpDiSableBreakOnFailur

3、eCookie x64系统默认使用,但x86不是 常用的是x86的Windows程序 第三方程序又怎么样呢? RtlpGetModifiedProcessCookie 调用 NtQueryInformationProcess I. RtlpAnalyzeHeapFailure heap_entry.flink.blink != heap_entry.blink.flink | heap_entry.flink.blink != heap_entry 非常简单的检测是吧? II.安全上链 RtlpHeapAlloc如何检索释放列表 FreeListsSearch 漏掉了验证检查 RtlpAnal

4、yzeHeapFailure 结果是:是否结束掉程序?第三方程序如何处理? SafeLink检查 实现是否足够智能? 问题 ? 利用1 给我看看你的功夫: 技术方案 构建自己的堆 思路 在编码逻辑下做文章在编码逻辑下做文章 HEAP_ENTRY.Size 的下边界: 有意思的测试: _Heap.EncodeFlagsMask & HEAP_ENTRY.Code1 如果没有匹配,那么就不是异或! 大小为 0 如何? Implementation shortcut 在编码逻辑下做文章在编码逻辑下做文章 HEAP_ENTRY.Size 的上边界: 有意思的异或值 : _Heap.Encoding.C

5、ode1 设置为随机值 这个案例下:越多的随机化=越可能被猜测 if (HEAP_ENTRY.Size set to 0101010101010101b) then (_Heap.Encoding.Code1 HEAP_ENTRY.Size) 很可能生成很大的数值 实现简要 在编码逻辑下做文章在编码逻辑下做文章 HEAP_ENTRY.Size的上边界(2) : 基于异或 在释放列表中有两个heap_entry的数据块 第一个设置HEAP_ENTRY.Size为0x8000 第二个设置HEAP_ENTRY.Size为0x0 在异或之后,其中一个HEAP_ENTRY.Size肯定将会等于 0x80

6、00这样大的数值 Implementation shortcut 构建自己的堆 实现 看 看- SafeLink 检查 ? 攻击! SafeLink 检测 堆喷射伪造链满足条件 RtlpAnalyzeHeapFailure? 我是第三方程序 问题: 只能工作在x86程序上 在Win7sp1上已经修复 结果 ? 足够好足够好? 不是不是. 能改善吗? 看上去相似? 头部进行了验证和编码 RtlpAnalyzeHeapFailure 安全上链 快速看一下 RtlpFreeHeap FreeLists Link搜索算法 heap_entry.Blink.Flink != heap_entry 安全链

7、接, 改变了 !? 再一次,这里不需要验证 性能 vs 安全? RtlpFreeHeap 在 FreeLists 寻找 Previous IDEA imporving What do you think happen with valid chunk, with size is bigger than size of already overwritten HEAP_ENTRY, when it is attempted to be freed ? 你认为,当一个大小大于已经被覆盖的HEAP_ENTRY的有效数据块被 释放时会发生什么? 以前的想法-改进中 利用 2 -表演时间 改进, 改进,

8、 成功 和第一个攻击相同: 堆喷射攻击 sizeof(HEAP_ENTRY) + sizeof(LIST_ENTRYFlink) 溢出, 导致 FreeList中_heap_entry被覆盖 第二个攻击的特点: 强制应用程序释放已经使用的“大小正确的”内存内存泄露 读写我们堆喷射过的内存重新链接 前提 攻击! 利用的图示- 初始 利用的图示- 堆喷射 利用的图示- 覆盖 利用的图示 free(*) 成功率 100% 结果 现场演示 Win7 SP1 总结: 防御机制的好坏取决于最弱的那一点! 实现最优雅的方法,同时覆盖到所有需要的代码中 安全的环境高于速度和性能的需求 结束 2年前报告给微软

9、但是仍然存在于win7 sp1,甚至win8CP中仍然可用! 在win8的最终发布版中补上了! FreeList搜索算法现在验证了每一个HEAP_ENTRY 其他技术信息 现场演示 win8 CP, ie10 参考 Brett Moore : Exploiting Freelist0 On XP Service Pack 2 http:/ %20Pack%202.pdf Chris Valasek : Understanding the Low Fragmentation Heap http:/ Brett Moore : Heaps About Heaps http:/seclists.org/vuln-dev/2008/Jul/0 Alexander Sotirov : Heap Feng Shui in JavaScript http:/ Nico Waisman : Aleatory Persistent Threat http:/ and many others usefull exploit techniques related materials

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/环境 > 装饰装潢


经营许可证编号:宁ICP备18001539号-1