今年中旬,微软针对旗下ie浏览器中大量出现的uaf漏洞,对ie浏览器的安全机制进行了一个大幅度的升级,其中主要体现为隔离堆及延迟释放两个机制,顿时又将uaf漏洞的利用向上提升了一个大坎,
但是类似的对抗uaf的机制在firefox以及chrome中已有类似的实现,本文就各个浏览器的该机制做一个小总结。

ie
Isolated Heap(隔离堆)
dom树对象以及supporting对象的对象空间在隔离的堆中被分配,该堆位于默认堆的低地址,该堆的句柄保存于一个全局变量中,对于该堆的内存分配涉及到两个函数
_MemIsolatedAlloc
_MemIsolatedAllocClear
其中分配时会通过对HeapAlloc函数中标记参数HEAP_ZEAR_MEMORY的设置,使的新分配的对象空间清零,但是该机制只是针对部分的对象使用(好在只是部分)。

delay free(延迟释放)
struct MemoryProtector{
void * BlockArray; //指向一个结构体数组,该结构体保存了所有被延迟释放元素的大小和地址
DWORD TotalSize; //此值就是所有被延迟释放的对象的总大小,即阀值。
DWORD NumberOfUsed;
bool Sorted; //标记暂时不知道具体含义
DWORD unknow;
DWORD unKnow;
DWORD StackHighAddress;
DWORD EnableReclaim;
}
具体的实现函数
MemoryProtection::CMemoryProtector::ProtectedFree
所谓的延迟释放就是指浏览器中释放的对象在释放时并不是真正意义上的释放,该函数会将这些无用对象(首先清零),并将这些无用的对象连接到st_ProtecFreeManageHeap对象中,直到所有延迟对象的
总大小到达一定阀值是在进行处理(此时依赖于TotalSize的值)。当所有的延迟对象到达阀值之后也并没有马上进行释放操作,而是调用了一下两个函数
MemoryProtection::CMemoryProtector::MarkBlocks
MemoryProtection::CMemoryProtector::ReclaimUnmarkeBlock
其中在函数MarkBlocks中会扫描栈中是否存在对这些延迟释放对象的引用,如果存在则对该元素进行标记。
在函数ReclaimUnmarkeBlock中完成释放(有标记的不释放)。

firefox
Frame Poisoning机制
目标:一些在页面渲染中常用框架型的对象
作用:该类对象在释放的时候其内存空间会被chosenpattern(该分配对象会被回收至freelist,并优先分配给类型相同的对象,提高了占位难度)
分配的时候支持三种类型的分配
By object ID
By frame ID
By size
对象A在空间分配的时候(此时会从freelist中优先获取一个空闲的内存空间)确保该分配的空间来自于一个与A对象的类型一致的对象,当freelist中没有类型一致的空间是才会创建自动创建一段空间返回。

chrome
PartitionAlloc机制
该机制管理堆的时候将对分成四个类型,依据申请对象的类型依次从中分配内存空间。
ObjectModelPartition:保存了所有node类的子类,也大致可以理解为就是DOM tree
RenderingPartion:保存了所有渲染树的对象
BufferPartition:保存了Web Template Framework的对象,同时也包含了一些js的类型,比如arraybuffer和stringlmpl
General Partition
在这四个分区中,又依据分配的对象的大小再次进行了分区,导致攻击者在站位时必须选择与可利用对象属于同一分类(并且在同一类型中又要满足同大小的分配)

其中每个分区又依照以下的规则进行划分,并在其中做了一些手脚。
从小到大,以此包含
bockets< superpages(0x200000)< extents < partition。
bockets 依照请求的大小分配出去
每个superpages的开始都有一个guard area的域用于检测攻击者的一系列连续读写操作,也就是说哪怕你费尽心思的构造了可全内存都写的数组,但是数组所在的内存空间中却插上了一堆检测域(guard area)。
superpages
  metadata
  dataarea(0x1f8000)
  guard area(reserves,inaccessible page)

转载于:https://www.cnblogs.com/goabout2/p/4197078.html

各浏览器抗uaf机制相关推荐

  1. 浏览器HTTP缓存机制

    介绍HTTP缓存之前先简单说一下Web缓存 Web缓存是一种保存Web资源副本并在下次请求时直接使用该副本的技术. Web缓存可以分为这几种:浏览器缓存.CDN缓存.服务器缓存.数据库数据缓存 .因为 ...

  2. (转载)彻底理解浏览器的缓存机制

    彻底理解浏览器的缓存机制 2018/04/16 概述 浏览器的缓存机制也就是我们说的HTTP缓存机制,其机制是根据HTTP报文的缓存标识进行的,所以在分析浏览器缓存机制之前,我们先使用图文简单介绍一下 ...

  3. jq动态渲染后获取不到元素高度_浏览器的渲染机制

    面试肯定会问到这个吧~ So:再一次的屡屡浏览器的渲染机制~ 在渲染一开始会先从网络层获取请求文档(HTML.XML)的内容,然后再进行以下基本流程 3.1 解析HTML => DOM树 从HT ...

  4. js一定要放在body的最底部么?聊聊浏览器的渲染机制

    今天看了一篇前段大全推送的"js一定要放在body的最底部么?聊聊浏览器的渲染机制".正好今天在<javascript Dom 编程艺术>上看到有说,<scrip ...

  5. 多个html页面拼接成一个页面_浏览器渲染页面机制以及如何减少DOM操作

    为了能更好.更快的为用户呈现出他们想要的页面,基于浏览器的渲染机制,我们在开发中应该了解浏览器,了解浏览器的运行机制,以及在开发中我们能更好的提高性能,虽然现在市面上流行的VUE和react,但也应该 ...

  6. serversocket 返回浏览器图片_深入理解浏览器的缓存机制

       戳蓝字「前端技术优选」关注我们哦! 一.前言 缓存可以说是性能优化中简单高效的一种优化方式了.一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟,并且由于缓存文件可以重复利用,还可以减少带宽 ...

  7. 浏览器事件循环机制与Vue nextTick的实现

    浏览器事件循环机制 先上一段简单的代码 console.log('aa'); setTimeout(() => { console.log('bb')}, 0); Promise.resolve ...

  8. 说一下浏览器垃圾回收机制?

    解题思路 得分点 栈垃圾回收.堆垃圾回收.新生区老生区.Scavenge算法.标记-清除算法.标记-整理算法.全停顿.增量标记 标准回答 浏览器垃圾回收机制根据数据的存储方式分为栈垃圾回收和堆垃圾回收 ...

  9. 浏览器页面渲染机制-前端原理剖析

    浏览器页面渲染机制 前言 浏览器的内核是指支持浏览器运行的最核心的程序,分为两个部分,一是渲染引擎,另一个是JS引擎.渲染引擎在不同的浏览器中也不是都相同的.目前市面上常见的浏览器内核可以分为这四种: ...

最新文章

  1. 项目需求|10~15万|自动上料系统—将物料通过机械手臂挂在挂钩上
  2. 线程的切入和切出(切入: 一个线程被系统选中占用处理器开始或继续运行)
  3. Inductive Robust Principal Component Analysis
  4. AsyncTask与多任务
  5. 桌面只计算机图标发白,win7电脑桌面图标突然变成了白色怎么办?
  6. ios中UIView和CALayer关系
  7. packagereference 里面的资产是怎么回事?
  8. Ubuntu18.04终端里,随意拖动或双击会出现ctrl+C的效果,解决
  9. set-cookie无法存入到浏览器cookie问题汇总
  10. 操作系统之三种进程通信方式
  11. python黑魔法指南_python黑魔法
  12. 【Neo4j】CQL基本语法
  13. 《求职》第四部分 - 操作系统篇 - Linux基础
  14. C语言实现 IFFT 运算
  15. 关于python语言概述
  16. 单片机汇编延时程序的理解
  17. orb-slam系列 LoopClosing线程 DetectLoop(十)
  18. 空间换时间--编程小绝招解决电话区号识别算法问题
  19. web网页设计期末课程大作业 HTML+CSS+JavaScript重庆火锅(代码质量好)
  20. Caused by: net.sf.jsqlparser.parser.ParseException: Encountered “ “LIKE“ “LIKE ““ at line 77。。。。

热门文章

  1. Hyperledger Fabric1.0架构概览
  2. ros安装-Ubuntu14.04
  3. 湘西州计算机等级考试内容,2020年3月湖南省湘西州市计算机等级考试注意事项...
  4. matlab cell转double_MATLAB处理数据,掌握这7个小技巧就够了
  5. [BZOJ 2243] 染色
  6. UOJ #455 [UER #8]雪灾与外卖 (贪心、模拟费用流)
  7. npm 安装yarn_问题解决记录-npm和yarn全局安装成功后命令无法执行的问题
  8. ps原始数据清理脚本_创建地形模型一步到位!PS最新2019全球首款3D地形生成插件送给你...
  9. 2021-03-12 控制三大顶会
  10. JavaScript原始类型转换和进制转换