各浏览器抗uaf机制
今年中旬,微软针对旗下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)
各浏览器抗uaf机制的更多相关文章
- HTTP请求中浏览器的缓存机制
摘要:在Web开发过程中,我们可能会经常遇到浏览器缓存的问题.本文作者详细解释了浏览器缓存的机制,帮助读者更深层次的认识浏览器的缓存. 流程 当资源第一次被访问的时候,HTTP头部如下 (Reques ...
- 彻底理解浏览器的缓存机制(http缓存机制)
一.概述 浏览器的缓存机制也就是我们说的HTTP缓存机制,其机制是根据HTTP报文的缓存标识进行的,所以在分析浏览器缓存机制之前,我们先使用图文简单介绍一下HTTP报文,HTTP报文分为两种: 同步s ...
- JS学习笔记:(一)浏览器页面渲染机制
浏览器的内核主要分为渲染引擎和JS引擎.目前市面上常见的浏览器内核可以分为这四种:Trident(IE).Gecko(火狐).Blink(Chrome.Opera).Webkit(Safari).这里 ...
- 转---JS 一定要放在 Body 的最底部么?聊聊浏览器的渲染机制
作者:德来 segmentfault.com/a/1190000004292479 如有好文章投稿,请点击 → 这里了解详情 一.从一个面试题说起 面试前端的时候我喜欢问一些看上去是常识的问题.比如: ...
- ASP.NET 表单验证方法与客户端(浏览器)服务器交互机制的故事
想到这个问题完全是一个意外吧,是在寻找另外一个问题答案的过程中,才对验证方法与浏览器服务器交互机制的关系有了清晰的认识. 先说下验证方法,验证方法分为前台验证和后台验证. 前台验证就是类似jQuery ...
- Web浏览器的缓存机制
Web缓存的工作原理 所有的缓存都是基于一套规则来帮助他们决定什么时候使用缓存中的副本提供服务(假设有副本可用的情况下,未被销毁回收或者未被删除修改).这些规则有的在协议中有定义(如HTTP协议1.0 ...
- 从php到浏览器的缓存机制,不得不看!
所有的php程序员都知道在php脚本里面执行 echo "1";访客的浏览器里面就会显示"1". 但是我们执行下面的代码的时候,并不是显示"1&quo ...
- 从Chrome源码看浏览器的事件机制
.aligncenter { clear: both; display: block; margin-left: auto; margin-right: auto } .crayon-line spa ...
- 【Web缓存机制系列】2 – Web浏览器的缓存机制
Web缓存的工作原理 所有的缓存都是基于一套规则来帮助他们决定什么时候使用缓存中的副本提供服务(假设有副本可用的情况下,未被销毁回收或者未被删除修改).这些规则有的在协议中有定义(如HTTP协议1.0 ...
随机推荐
- VC++ 之常见内存异常值
0 VC++ 常见的内存异常值 * 0xcccccccc : Used by Microsoft's C++ Debugging runtime library to mark uninitialis ...
- 【C语言】指针
错误一: 一种错误的写法: * sizeof(int)); * sizeof(int)); y = x; 没有必要为y开辟内存,因为y在开辟内存时 y内存储的地址时开辟的内存的位置, 但是后面又把x的 ...
- IOS开发中与设计沟通之字体大小转换
px:相对长度单位.像素(Pixel).pt:绝对长度单位.点(Point).1in = 2.54cm = 25.4 mm = 72pt = 6pc 具体换算是: Points Pixels Ems ...
- 关于 UICollectionViewCell 的一些陷阱
如果直接使用 UICollectionViewCell 的自带属性 selected 来自定义一些样式,如: - (void)setSelected:(BOOL)selected { [super s ...
- iOS - 开发类库
开发类库 UI 项目名称 项目信息 1.MJRefresh 仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能.可以自定义上下拉刷新的文字说明. ...
- Page Object Model (Selenium, Python)
时间 2015-06-15 00:11:56 Qxf2 blog 原文 http://qxf2.com/blog/page-object-model-selenium-python/ 主题 Sel ...
- 移除IIS默认的响应头(转载)
转载地址:http://www.cnblogs.com/dudu/p/iis-remove-response-readers.html 在IIS+ASP.NET的运行环境,默认情况下会输出以下的响应头 ...
- CXF学习(2) helloworld
0.新建一个项目取名wsserver. pom.xml 文件如下 <project xmlns="http://maven.apache.org/POM/4.0.0" xml ...
- NPOI 通用导出数据到Excel 分类: C# Helper 2014-11-04 16:06 246人阅读 评论(0) 收藏
应用场景: 在项目中,经常遇到将数据库数据导出到Excel,针对这种情况做了个程序封装.工作原理:利用NPOI将SQL语句查询出的DataTable数据导出到Excel,所见即所得. 程序界面: ...
- hdu 1404 找sg ***
HDU 1404 Digital Deletions 一串由0~9组成的数字,可以进行两个操作:1.把其中一个数变为比它小的数:2.把其中一个数字0及其右边的所以数字删除. 两人轮流进行操作,最后把 ...