各浏览器抗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)
轉載于:https://www.cnblogs.com/goabout2/p/4197078.html
總結
以上是生活随笔為你收集整理的各浏览器抗uaf机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言指针基础
- 下一篇: 转 性能分析工具汇总