VBScript引擎中的漏洞會影響Internet Explorer運行Shellcode區塊鏈

                  曲速未來安全區 2018-08-30 20:01
                  分享到:
                  導讀

                  7月11日的時候發現了一個高風險的InternetExplorer(IE)漏洞,就在微軟7月補丁周二的第二天。

                  在7月11日的時候發現了一個高風險的Internet Explorer(IE)漏洞,就在微軟7月補丁周二的第二天。雖然此漏洞(現在指定為CVE-2018-8373)會影響最新版Windows中的VBScript引擎,但Internet Explorer 11并不容易受到攻擊,因為默認情況下Windows 10 Redstone 3(RS3)中的VBScript已被有效禁用。

                  然后發現了惡意網絡流量中的漏洞。URL如下所示:

                  圖1.使用的惡意URL

                  發現了這種漏洞之后,從而進行了更深入的分析。有趣的是,發現此漏洞利用示例使用與CVE-2018-8174相同的混淆技術,CVE-2018-8174是5月份修補的VBScript引擎遠程執行代碼漏洞。

                  圖2. CVE-2018-8373(左側)和CVE-2018-8174(右側)的比較

                  此外,這是用于運行shellcode的示例exploit的方法:

                  圖3. CVE-2018-8373(左側)和CVE-2018-8174(右側)如何運行shellcode的比較

                  經過調查懷疑這個漏洞利用樣本來自同一個創建者。因為經過分析顯示它在vbscript.dll中使用了一個新的use-after-free(UAF)漏洞。

                  漏洞根本原因分析

                  現在詳細介紹對此漏洞的分析,該漏洞已在微軟周二的八月補丁中得到解決。由于原始漏洞被嚴重混淆,就進行演示了一個概念驗證(PoC)來解釋如何利用此漏洞:

                  圖4. IE漏洞PoC

                  這個PoC定義了一個名為MyClass的類,它有一個名為array的成員變量和兩個名為Class_Initialize和Default Property Get P的成員函數。Class_Initialize是一個不推薦使用的方法,現在由New過程替換。首次實例化對象時會自動調用它。在該PoC中,Class_Initialize函數被重載,以及何時呼叫VBScriptClass::InitializeClass后,它會被分派到重載函數。

                  默認屬性是一個類屬性,可以在不指定的情況下訪問它。在此PoC中,Default Property Get函數重載MyClass的默認屬性。當調用訪問cls時,它將被調度到重載函數。

                  漏洞的觸發流程可以簡化為以下三個步驟:

                  1.設置cls = New MyClass

                  這將調用重載函數Class_Initialize。在Class_Initialize中,ReDim數組(2)將調用vbscript!RedimPreserveArray來創建一個元素的計數為3的數組:

                  圖5.內存中的ReDim數組

                  2. cls.array(2)

                  它將調用vbscript!AccessArray來獲取數組元素的地址。在vbscript!AccessArray中,它將首先檢查數組元素的索引是否超出邊界:

                  圖6.在vbscript中檢查元素索引!AccessArray

                  然后計算元素的地址,將其保存在堆棧中,并返回以下內容:

                  圖7.在堆棧上保存元素地址

                  3. cls.array(2)= cls

                  這將調用vbscript!AssignVar將MyClass默認屬性值設置為cls.array(2)。獲取MyClass默認屬性值時,調用公共默認屬性Get P并在公共默認屬性Get P中執行腳本ReDim數組(1),這將導致原始array.pvData被釋放:

                  圖8.釋放原始pvData

                  但是,如第二步所述,數組(2)的地址仍保存在堆棧中。公共默認屬性Get P的返回值將訪問釋放的內存,從而觸發vbscript中的use-after-free(UAF)漏洞!AssignVar:

                  圖9. vbscript中的崩潰!AssignVar

                  如前所述,vbscript!AccessArray檢查數組元素的索引是否超出邊界。但是當獲取類的默認屬性值時,它將觸發腳本回調函數Default Property獲取修改數組的長度,而不是在vbscript!AssignVar中訪問時再次檢查數組的元素。

                  剝削分析

                  可以通過以下三個步驟簡化利用:

                  1. 使用此漏洞將二維數組的長度修改為0x0FFFFFFF。

                  2. 實現讀/寫原語。

                  3. 偽造CONTEXT結構并執行shellcode。

                  讓我們詳細談談利用:

                  1.修改二維數組的長度

                  首先,漏洞定義了兩個數組,在下圖中將其標記為array1和array2的數組1是先前在PoC中描述的陣列,且數組2是一個二維陣列,其中每個元素的值是3。

                  圖10. array2的定義

                  然后它使用腳本回調函數Default Property Get釋放原始array1.pvData并將array2設置為new array1.pvData。因為原來的大小array1.pvData,這是的0x30字節在存儲器中,相同array2.SAFEARRAY結構,一些的array2.SAFEARRAY結構將重用在原釋放的內存array1.pvData。同時,Default Property Get的返回值0x0FFFFFFFF將覆蓋array2.SAFEARRAY的SAFEARRAYBOUND結構,并將二維數組的長度修改為0x0FFFFFFF。

                  圖11.默認屬性Get的定義

                  圖12.修改數組長度的步驟

                  2. RW原語

                  這里得到一個數組,array1(index_vuln)(0x0FFFFFFE,2),其長度由UAF調節。通過搜索array1的元素,可以在以下腳本中找到index_vuln:

                  圖13.搜索array1(index_vuln)(0x0FFFFFFE,2)

                  然后它使用array1(index_vuln)(0x0FFFFFFE,2)來實現越界(OOB)并找到兩個數組元素混淆的元素。

                  圖14.搜索第一個數組的元素

                  圖15.搜索第二個數組的元素

                  這里漏洞獲取兩個數組的元素:array1(index_B)(0,0)和array1(index_vuln)(index_A,0),它們在內存中的距離為8字節。在內存中搜索的充分利用如下所示:

                  圖16.在內存中搜索方式的演示

                  最后,它使用兩個數組的元素來實現類型混淆的讀寫原語:

                  圖17. RW基元的實現

                  3.運行shellcode

                  它使用read原語來泄漏模塊的地址:

                  圖18.泄漏模塊的地址

                  通過將一些VARIANT的VarType修改為0x4d并將值修改為0,將調用vbscript!VAR :: Clear,然后將調用堆棧返回地址修改為NtContinue的地址并偽造CONTEXT結構以運行shellcode:

                  圖19.修改VARIANT

                  圖20.運行shellcode

                  經過一系列的分析,可以穩定地利用此漏洞。此外,由于它是今年在野外發現的第二個VB引擎漏洞利用,因此預計未來VB引擎中的其他漏洞發現并非遙不可及。

                  總結

                  作為第一道防線,區塊鏈安全公司WF曲速未來建議在可用時應用最新的安全補丁以防止漏洞利用。用戶還可以使用可以抵御可能漏洞攻擊的解決方案。主動,多層次的安全方法是利用漏洞(來自網關,端點,網絡和服務器)的威脅的關鍵。

                  漏洞 數組 array 使用 利用
                  分享到:

                  1.TMT觀察網遵循行業規范,任何轉載的稿件都會明確標注作者和來源;
                  2.TMT觀察網的原創文章,請轉載時務必注明文章作者和"來源:TMT觀察網",不尊重原創的行為TMT觀察網或將追究責任;
                  3.作者投稿可能會經TMT觀察網編輯修改或補充。


                  專題報道