CVE-2018-8174:IE最新漏洞分析

CVE-2018-8174:IE最新漏洞分析

來自專欄安全客4 人贊了文章

一、前言

2018年4月下旬,我們利用沙箱環境發現了Internet Explorer(IE)的一個最新0day漏洞,而這距離IE漏洞上一次在野外被利用(CVE-2016-0189)已經過去了2年時間。這個漏洞以及相關利用技術在某些方面較為有趣,本文詳細分析了這個漏洞(CVE-2018-8174)的根本原因。

二、捕獲0day漏洞

故事開始於2018年4月18日,當時有人往VirusTotal(VT)上傳了一個有趣的漏洞利用程序。包括卡巴斯基在內的多個AV廠商成功檢測到了這個利用程序,我們將該程序標記為針對老版本Microsoft Word漏洞的通用啟發式邏輯類別。

圖1. Virustotal上對CVE-2018-8174的掃描結果

使用我們的沙箱系統處理這款惡意樣本後,我們注意到即便打上完整補丁的Microsoft Word也會被成功利用。根據這個信息,我們開始深入分析這個利用程序。我們先來看一下完整的感染鏈:

圖2. 感染鏈

這條感染鏈包含如下幾個環節:

1、受害者收到一個惡意Microsoft Word文檔。

2、打開這個惡意文檔後,樣本會下載第二階段的利用程序,即包含VBScript代碼的HTML頁面。

3、VBScript代碼會觸發UAF(Use After Free,釋放後重用)漏洞並執行shellcode。

三、初步分析

我們針對RTF(Rich Text Format)文檔開始研究,攻擊者利用該文檔來投遞針對IE的利用程序。該文檔只包含一個對象,其內容經過混淆處理,這是一種已知的混淆技術,我們稱之為「nibble drop(半位元組)」混淆技術。

圖3. RTF文檔中經過混淆處理的對象

去除混淆並解密16進位數據後,我們發現這是一個OLE對象,其中包含一個URL Moniker.aspx) CLSID。因此,漏洞利用程序最開始的處理方式與之前的一個漏洞(CVE-2017-0199)類似,該漏洞用到了Microsoft HTA處理程序。

圖4&5. 使用URL Moniker來載入IE漏洞利用載荷

在CVE-2017-0199漏洞中,Word會嘗試根據文件的屬性,使用默認的文件處理程序來執行文件,比如伺服器響應報文中的Content-Type HTTP頭部欄位就是其中一個屬性。由於application/hta這個Content-Type所對應的默認處理程序為mshta.exe,因此Word會選擇其作為OLE伺服器,不受限制地運行腳本。這樣攻擊者就可以直接調用ShellExecute,啟動所選擇的攻擊載荷。

然而,如果我們檢查最新利用程序中嵌入的URL時,我們發現伺服器響應中的Content-Type並非application/hta(CVE-2017-0199漏洞需要滿足這個條件),而是text/html。與text/html對應的默認OLE伺服器為mshtml.dll,這是包含IE後端引擎的一個程序庫。

圖6. WINWORD.exe查詢註冊表確定正確的OLE伺服器

此外,該頁面包含一個VBScript,載入該腳本時會使用一個安全模式標誌(默認值0xE)。這樣一來攻擊者無法直接執行攻擊載荷,這與HTA處理程序的情況一樣,需要使用一個IE漏洞才能突破這個限制。

微軟在針對Moniker相關漏洞(CVE-2017-0199、CVE-2017-8570以及CVE-2017-8759)的補丁中引入了激活過濾器,利用該過濾器,應用程序可以限制在運行時實例化的COM對象,因此攻擊者有可能可以使用URL moniker來載入遠程web頁面。

圖7. 被過濾的某些COM對象,限制使用MSO.dll中的IActivationFilter來創建這些對象

在分析樣本時,過濾後的CLSID列表包含16個表項。MSHTML CLSID({{25336920-03F9-11CF-8FD0-00AA00686F13}})不在該列表中,因此攻擊者可以在Word上下文環境中成功創建MSHTML COM伺服器。

現在起事情開始變得有趣起來。儘管Word文檔是攻擊者使用的最初攻擊媒介,但漏洞實際上位於VBScript中,而非Microsoft Word中。這是我們第一次看到有攻擊者使用URL Moniker來載入IE漏洞利用載荷,我們相信惡意軟體開發者會在未來大量應用這種技術。利用這種技術,攻擊者可以使用IE引擎載入並渲染web頁面,即便受害者主機上的默認瀏覽器並非IE瀏覽器。

下載的HTML頁面中的VBScript包含一些函數名及整數值,這些信息都經過混淆處理。

圖8. 經過混淆處理的IE漏洞利用載荷

四、漏洞原理分析

為了分析漏洞原理,我們只需查看去混淆後腳本中的第一個函數(即TriggerVuln),程序在調用RandomizeValues以及CookieCheck函數後就會調用該函數。

圖9&圖10. 去混淆腳本中的漏洞觸發過程

為了獲得所需的堆布局,確保已被釋放的類對象內存會被ClassToReuse對象再次復用,漏洞利用程序會分配一些類對象。觸發漏洞的代碼可以精簡為如下PoC代碼:

圖11. CVE-2018-8174漏洞PoC代碼

當我們使用啟用了頁堆的IE瀏覽器運行這個PoC時,我們可以觀察到OLEAUT32!VariantClear函數會發生崩潰:

圖12. 調用被釋放的內存時出現訪問衝突(Access Violation)異常

圖13. 當銷毀第二個數組(ArrB)時會復用被釋放的內存指針

利用這個PoC代碼我們成功觸發了一個UAF漏洞,ArrA(1)以及ArrA(2)都會引用內存中的同一個ClassVuln對象。這種情況有可能會出現,因為當Erase ArrA被調用時,vbscript!VbsErase函數會確定待刪除的對象類型為SafeArray,然後再調用OLEAUT32!SafeArrayDestroy

然後函數會檢查指向tagSafeArray.aspx)結構的指針不為NULL,同時檢查指針的引用計數(存儲在cLocks欄位中)是否為0,然後繼續調用ReleaseResources

圖14. ArrA(1)的VARTYPEVT_DISPATCH,因此會調用VBScriptClass::Release來銷毀對象

ReleaseResources會檢查fFeatures這個標誌變數,由於我們有一個VARIANT數組,因此該函數隨後會調用VariantClearVariantClear函數會遍曆數組中的每個成員,執行必要的去初始化操作,並且根據需要調用相關的類析構函數。在我們分析的這種情況中,由於ArrA(1)的VARTYPEVT_DISPATCH,因此程序會調用VBScriptClass::Release來正確銷毀對象,處理類似Class_Terminate之類的析構函數。

圖15. CVE-2018-8174的根本原因:在TerminateClass函數之前只檢查一次reCount

這正是這個漏洞的根源所在。在VBScriptClass::Release函數內部,程序只在函數開頭檢查了一次引用計數值。即使該值很有可能會在重載的TerminateClass函數中遞增(PoC代碼中的確這麼處理),最終釋放類對象前並沒有再做任何檢查。

Class_Terminate是一個被棄用的方法,現在已經被Finalize過程所取代。在對象銷毀過程中,程序會使用該函數來釋放已獲取的資源,一旦對象被設置為空並且該對象沒有其他引用時就會立即執行該函數。在我們的例子中,Class_Terminate被代碼重載,當調用VBScriptClass::TerminateClass時,會轉到對應的重載方法。在重載方法內部又創建了ArrA(1)成員的另一個引用。此時ArrB(1)引用了ArrA(1),其中包含一個即將被釋放的ClassVuln對象。

圖16. 釋放第二個對象時調用了無效的虛方法而導致崩潰

Class_Terminate子函數處理完畢後,Arr(1)所對應的對象被釋放,但ArrB(1)仍然保持被釋放的類對象的引用。當執行流程繼續時,ArrB會被擦除,再次執行類似邏輯,不過這一次ArrB(1)引用了一個被釋放的ClassVuln對象,因此當程序調用ClassVuln vtable中的某個虛方法時,我們就可以觀察到崩潰現象。

五、總結

在這篇文章中,我們分析了CVE-2018-8174漏洞背後的核心原因,這是一個特別有趣的UAF漏洞,漏洞成因在於Class_Terminate這個VBScript方法沒有正確處理相關對象的生命周期。漏洞利用過程與我們在之前漏洞(CVE-2016-0189以及CVE-2014-6332)中看到的利用過程不一樣,原因在於Godmode(上帝模式)技術已經不再適用。整個漏洞利用鏈與漏洞本身一樣有趣,但本文對此不再贅述。

CVE-2018-8174漏洞是利用URL moniker來載入IE漏洞載荷的第一款漏洞,除非這種技術被修復,否則我們認為攻擊者未來將大量濫用這種技術,無視受害者系統上的默認瀏覽器設置,強制使用IE來載入攻擊頁面。

我們預計該漏洞將在不久的將來成為攻擊者最喜歡的突破口,相信漏洞利用工具包開發者很快就會在驅動式(通過瀏覽器感染)以及漁叉式釣魚(通過文檔感染)攻擊活動中濫用這種技術。為了保證自身安全,我們建議大家採用最新的安全更新,適用具備行為檢測功能的安全解決方案。

在我們看來,這個漏洞實際上就是360核心安全團隊最近發現的瀏覽器「雙殺」漏洞。雖然漏洞利用技術並不限於瀏覽器範疇,但仍被歸類為IE 0Day漏洞,這給安全社區帶來了一些混亂。

發現這個漏洞後,我們第一時間與微軟分享了相關信息,微軟確認該漏洞為CVE-2018-8174漏洞。

六、檢測方法

卡巴斯基實驗室產品可以成功檢測並阻止整個利用鏈及相關載荷,具體如下:

1、將RTF文檔標記為HEUR:Exploit.MSOffice.Generic

2、將IE漏洞利用技術標記為PDM:Exploit.Win32.Generic,可以使用自動漏洞防護技術來防護

3、將IE漏洞利用技術標記為HEUR:Exploit.Script.Generic

4、將攻擊載荷標記為HEUR:Trojan.Win32.Generic

七、IOC

RTF文檔:

b48ddad351dd16e4b24f3909c53c8901

IE漏洞利用技術(CVE-2018-8174)

15eafc24416cbf4cfe323e9c271e71e7

攻擊載荷

1ce4a38b6ea440a6734f7c049f5c47e2

相關網址

autosoundcheckers.com

譯文聲明

本文是翻譯文章,文章原作者,文章來源:securelist.com

原文地址:securelist.com/root-cau

作者:興趣使然的小胃


推薦閱讀:

你不能不知道的網路小知識(1)
「安全開發教學」github泄露掃描系統開發
那些年我們一起追逐過的安全工具
每天上網是多數孩子的常態 如何保護兒童網路安全?
農民鬥地主——Binder fuzz安全研究

TAG:信息安全 | 網路安全 | 黑客Hacker |