日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

各浏览器抗uaf机制

發(fā)布時間:2025/3/13 HTML 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 各浏览器抗uaf机制 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

? ? ?今年中旬,微軟針對旗下ie瀏覽器中大量出現(xiàn)的uaf漏洞,對ie瀏覽器的安全機(jī)制進(jìn)行了一個大幅度的升級,其中主要體現(xiàn)為隔離堆及延遲釋放兩個機(jī)制,頓時又將uaf漏洞的利用向上提升了一個大坎,
但是類似的對抗uaf的機(jī)制在firefox以及chrome中已有類似的實(shí)現(xiàn),本文就各個瀏覽器的該機(jī)制做一個小總結(jié)。

ie
Isolated Heap(隔離堆)
dom樹對象以及supporting對象的對象空間在隔離的堆中被分配,該堆位于默認(rèn)堆的低地址,該堆的句柄保存于一個全局變量中,對于該堆的內(nèi)存分配涉及到兩個函數(shù)
_MemIsolatedAlloc
_MemIsolatedAllocClear
其中分配時會通過對HeapAlloc函數(shù)中標(biāo)記參數(shù)HEAP_ZEAR_MEMORY的設(shè)置,使的新分配的對象空間清零,但是該機(jī)制只是針對部分的對象使用(好在只是部分)。

delay free(延遲釋放)
struct MemoryProtector{
void * BlockArray; //指向一個結(jié)構(gòu)體數(shù)組,該結(jié)構(gòu)體保存了所有被延遲釋放元素的大小和地址
DWORD TotalSize; //此值就是所有被延遲釋放的對象的總大小,即閥值。
DWORD NumberOfUsed;
bool Sorted; //標(biāo)記暫時不知道具體含義
DWORD unknow;
DWORD unKnow;
DWORD StackHighAddress;
DWORD EnableReclaim;
}
具體的實(shí)現(xiàn)函數(shù)
MemoryProtection::CMemoryProtector::ProtectedFree
所謂的延遲釋放就是指瀏覽器中釋放的對象在釋放時并不是真正意義上的釋放,該函數(shù)會將這些無用對象(首先清零),并將這些無用的對象連接到st_ProtecFreeManageHeap對象中,直到所有延遲對象的
總大小到達(dá)一定閥值是在進(jìn)行處理(此時依賴于TotalSize的值)。當(dāng)所有的延遲對象到達(dá)閥值之后也并沒有馬上進(jìn)行釋放操作,而是調(diào)用了一下兩個函數(shù)
MemoryProtection::CMemoryProtector::MarkBlocks
MemoryProtection::CMemoryProtector::ReclaimUnmarkeBlock
其中在函數(shù)MarkBlocks中會掃描棧中是否存在對這些延遲釋放對象的引用,如果存在則對該元素進(jìn)行標(biāo)記。
在函數(shù)ReclaimUnmarkeBlock中完成釋放(有標(biāo)記的不釋放)。

firefox
Frame Poisoning機(jī)制
目標(biāo):一些在頁面渲染中常用框架型的對象
作用:該類對象在釋放的時候其內(nèi)存空間會被chosenpattern(該分配對象會被回收至freelist,并優(yōu)先分配給類型相同的對象,提高了占位難度)
分配的時候支持三種類型的分配
By object ID
By frame ID
By size
對象A在空間分配的時候(此時會從freelist中優(yōu)先獲取一個空閑的內(nèi)存空間)確保該分配的空間來自于一個與A對象的類型一致的對象,當(dāng)freelist中沒有類型一致的空間是才會創(chuàng)建自動創(chuàng)建一段空間返回。

chrome
PartitionAlloc機(jī)制
該機(jī)制管理堆的時候?qū)Ψ殖伤膫€類型,依據(jù)申請對象的類型依次從中分配內(nèi)存空間。
ObjectModelPartition:保存了所有node類的子類,也大致可以理解為就是DOM tree
RenderingPartion:保存了所有渲染樹的對象
BufferPartition:保存了Web Template Framework的對象,同時也包含了一些js的類型,比如arraybuffer和stringlmpl
General Partition
在這四個分區(qū)中,又依據(jù)分配的對象的大小再次進(jìn)行了分區(qū),導(dǎo)致攻擊者在站位時必須選擇與可利用對象屬于同一分類(并且在同一類型中又要滿足同大小的分配)

其中每個分區(qū)又依照以下的規(guī)則進(jìn)行劃分,并在其中做了一些手腳。
從小到大,以此包含
bockets< superpages(0x200000)< extents < partition。
bockets 依照請求的大小分配出去
每個superpages的開始都有一個guard area的域用于檢測攻擊者的一系列連續(xù)讀寫操作,也就是說哪怕你費(fèi)盡心思的構(gòu)造了可全內(nèi)存都寫的數(shù)組,但是數(shù)組所在的內(nèi)存空間中卻插上了一堆檢測域(guard area)。
superpages
  metadata
  dataarea(0x1f8000)
  guard area(reserves,inaccessible page)

轉(zhuǎn)載于:https://www.cnblogs.com/goabout2/p/4197078.html

總結(jié)

以上是生活随笔為你收集整理的各浏览器抗uaf机制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。