压在透明的玻璃上c-国产精品国产一级A片精品免费-国产精品视频网-成人黄网站18秘 免费看|www.tcsft.com

IE漏洞利用之信息泄漏技術

為了對抗漏洞利用攻擊,從window7開始,微軟在IE等程序中應用了ALSR、DEP、GS等保護機制。隨著ROP等Bypass技術的出現,微軟在Windows8系統使用了更嚴格的保護機制:HiASLR、anti-ROP、vt_guard以及各種anti-heapspray技術。

本文主要研究IE漏洞利用中的信息泄漏技術,通過泄漏模塊地址信息或shellcode地址,繞過ALSR等防御機制。信息泄漏的主體思路是選定某個特殊對象,通過漏洞觸發修改該對象的某個字段,增加內存讀寫范圍,從而獲取所需信息。

1 修改BSTR對象

IE8下,最簡單有效的方法是修改BSTR對象。這種技術是Peter Vreugdenhil在 2010 ?Pwn2Own IE 8 上提出的。

BSTR結構起始4字節為size字段,末尾為兩字節的NULL結束符,中間為wide char字符串。修改BSTR的size字段或NULL結束符,即可利用jscript腳本越界讀取BSTR相鄰內存區域的內容。具體實現過程如下:

step1:內存中噴射BSTR和object。選擇合適長度的BSTR,使其占用的內存大小和object相同。

IE漏洞利用之信息泄漏技術1.0

噴射后的內存布局為[s1][s2][b]…[s1][s2][b][s1][s2][b],[s1]和[s2]表示BSTR字符串,[b]表示object對象。

IE漏洞利用之信息泄漏技術1.1圖1.1 初始內存布局

step2:釋放[s1]。

IE漏洞利用之信息泄漏技術1.2圖1.2 釋放[s1]后內存布局

step3:觸發漏洞,覆蓋BSTR結構的size字段或NULL結束符,即可越界讀取相鄰object對象的虛表指針vtptr,繼而獲得模塊的地址信息。根據模塊地址信息構造動態ROP鏈即可繞過DEP。為了精確寫入到BSTR 的Size字段或NULL結束符位置,有時需要放置多個BSTR位于Vulnerable Buffer和object對象之間。

IE漏洞利用之信息泄漏技術1.3

圖1.3 溢出后內存布局

能否成功泄漏vtptr,關鍵是選擇大小與Vulnerable Buffer相等的object,形成連續分配的內存布局。如果Vulnerable Buffer Size較大,找不到與之相等的object對象,可以選擇讀取屬性數組AttrArray中的地址信息進行泄漏。

AttrArray屬性數組中每個元素大小為0x10字節,結構如下:

IE漏洞利用之信息泄漏技術1.30

假設定義如下select元素,初始化8個屬性。調用selob對象的cloneNode方法時,程序創建對應AttrArray數組。

IE漏洞利用之信息泄漏技術1.31

基于AttrArray的泄漏過程如下所示。可以看出,修改size字段后不僅能夠獲取對象指針objptr以及其虛表指針。還可以獲得字符串指針strptr。如果該字符串為shellcode,即可獲得shellcode的地址信息。

IE漏洞利用之信息泄漏技術1.4圖1.4 基于AttrArray的信息泄漏

2 修改屬性數組

從IE9以后,引入了Nozzle技術,禁止噴射BSTR,而且即使繞過Nozzle,分配的BSTR不在同一個堆塊中。此時可以選擇噴射屬性數組AttrArray,通過修改AttrArray中的BSTR指針完成信息泄漏。具體步驟如下:

Step1:創建對象A,將其0x7ffe個屬性值初始化為NULL。循環調用該對象的cloneNode方法,在內存中噴射屬性數組,其中每個屬性數組占用的內存大小為0x80000(0x7ffe*0x10+0x20)。這些屬性數組在內存中是連續分布的。

IE漏洞利用之信息泄漏技術2.1圖2.1 AttrArrayA內存分布

Step2:遍歷所有的AttrArrayA,對每個AttrArrayA:

(1)每間隔0x1000個屬性,調用setAttribute方法將屬性值設置為字符串“AA…AA”,此時AttrArrayA將獲得一個指向該字符串的BSTR指針(如圖2.3箭頭a所示);

(2)創建一個body元素對象B,對應元素數組AttrArrayB。

IE漏洞利用之信息泄漏技術2.0

選擇合適的BSTR長度以及對象B的元素個數,使其占用的內存大小相等,BSTR和AttrArrayB將在內存連續分布,內存布局為[s][a][s][a]…[s][a]。其中[s]表示BSTR,[a]表示數組AttrArrayB。

IE漏洞利用之信息泄漏技術2.2

圖2.2? AttrArrayB和BSTR內存分布

Step3:觸發漏洞,修改某個AttrArrayA中元素值strptr,使其指向相鄰AttrArrayB區域(如圖2.3箭頭b所示),此時即可成功讀取AttrArrayB中的地址信息。

IE漏洞利用之信息泄漏技術2.3

圖2.3 溢出前后的內存布局

注:這種泄漏技術適用于IE9、IE10以及IE11。

3 修改Javascript Array對象

Ivan? Fratric在《Exploiting Internet Explorer11 64-bit on Windows 8.1 Preview》中提出通過噴射Javascript Array對象,修改Capacity字段,完成信息泄漏。這種技術同樣適用于32位系統下IE11漏洞。

在32位系統中,Javascript Array對象結構如下。

IE漏洞利用之信息泄漏技術3.0

其中?,Array對象Header長度為0x28。數組塊ArrayBlock結構如下:

IE漏洞利用之信息泄漏技術3.01

Array對象在內存中的布局由數組長度決定:

(1)當數組長度<=0x40,Array Header和ArrayBlock在內存中是連續分布;

(2)當數組長度>0x40,Array Header和ArrayBlock在內存中分布不連續。

修改Capacity字段,增加Array數組的內存讀寫范圍,即可獲得相鄰內存區域的地址信息。具體步驟如下:

Step1:在內存中噴射大量的Javascript Array對象(length<=40)。

IE漏洞利用之信息泄漏技術3.1

圖3.1: 初始內存布局

Step2:觸發漏洞,覆蓋某個Array對象的capacity字段。遍歷所有Array對象,通過Array.length定位被覆蓋的數組ArrayA。越界讀取ArrayA,獲得ArrayB的虛表地址VtptrB;越界寫入ArrayA將ArrayB的capacity設置為0x7fffffff,使得ArrayB獲得最大范圍的讀寫權限。

IE漏洞利用之信息泄漏技術3.2

圖3.2:capacityA被修改后的越界讀寫

Step3:在內存中寫入shellcode,繞過保護機制,執行任意代碼。

(1)選定某個值n,從ArrayB[n]位置所在內存地址開始,將shellcode依次寫入。

(2)選定某個值m,從ArrayB[m]位置所在的內存地址開始,將虛表指針指VtptrB指向的虛表函數依次寫入,并修改其中兩個虛函數的地址為VirtualProtect地址和Shellcode地址。

(3)覆蓋VtptrB為fakeVtptr。當程序調用虛函數時,調用VirtualProct函數關閉DEP并成功執行shellcode。

IE漏洞利用之信息泄漏技術3.3

圖3.3 :exploit內存布局

(文章來源:啟明星辰ADLab)

上一篇:Flash Vector漏洞利用的蛻變

下一篇:基于MSEM的工業網絡安全防護系統研究