溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Flash 0day漏洞CVE-2018-5002的實(shí)例分析

發(fā)布時(shí)間:2021-12-22 21:41:45 來源:億速云 閱讀:201 作者:柒染 欄目:安全技術(shù)

本篇文章給大家分享的是有關(guān)Flash 0day漏洞CVE-2018-5002的實(shí)例分析,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

0x1 概述 

騰訊御見威脅情報(bào)中心近日監(jiān)控到一例使用Adobe Flash 0day漏洞(CVE-2018-5002)的APT攻擊,攻擊者疑通過即時(shí)聊天工具和郵箱等把惡意Excel文檔發(fā)送給目標(biāo)人員,誘騙目標(biāo)人員打開文檔。實(shí)際上,該惡意Excel文檔經(jīng)過特別構(gòu)造,被嵌入了flash對象,用戶一旦打開文檔電腦就會中毒。

CVE-2018-5002影響Adobe Flash Player 29.0.0.171及所有之前的版本。Adobe官方于6月7日下午發(fā)布安全公告(公告ID:APSB18-19),Adobe Flash Player的版本已更新到30.0.0.113。具體可參考Adobe 官方安全公告:https://helpx.adobe.com/security/products/flash-player/apsb18-19.html

我們及時(shí)向Adobe官方上報(bào)了漏洞利用樣本,并獲得了Adobe官方確認(rèn)和致謝。 

Flash 0day漏洞CVE-2018-5002的實(shí)例分析

(攻擊流程圖)

0x2 攻擊流程分析

1. 漏洞文檔行為分析

此次攻擊時(shí)使用的誘餌文檔文件名為《basic_salary.xlsx》,主要內(nèi)容為阿拉伯語言撰寫的外交部官員基本工資情況。誘餌文檔嵌入了一個(gè)在線的Flash對象,用戶打開文檔后,就會自動加載Flash文件。

Flash 0day漏洞CVE-2018-5002的實(shí)例分析

(google翻譯后的文檔內(nèi)容)

Flash 0day漏洞CVE-2018-5002的實(shí)例分析

(誘餌文檔內(nèi)容)

2. SWF1行為分析

SWF1文件中的代碼高度混淆,后續(xù)圖片中的源碼,均是對混淆代碼進(jìn)行一定優(yōu)化后截取的。

Flash 0day漏洞CVE-2018-5002的實(shí)例分析

(混淆后的SWF1代碼)

誘餌文檔中嵌入了一個(gè)在線swf對象,當(dāng)打開帶漏洞的excel表格時(shí),會加載“Movie”字段所指向的在線Flash文件,這里取名為SWF1。

Excel會將FlashVars指向的文本會以參數(shù)的形式傳遞給SWF1,這里存放的是漏洞利用樣本(SWF2文件) 和 ShellCode等URL信息,分別被標(biāo)記為了stabUrl、encKeyUrl、downloadUrl、imageUrl。

Flash 0day漏洞CVE-2018-5002的實(shí)例分析

(SWF1運(yùn)行時(shí)取參數(shù))

SWF1運(yùn)行后,會以post方式從參數(shù)encKeyUrl 指向的WEB服務(wù)器得到解密key及加密的swf。使用aes算法解密后,得到漏洞swf文件,取名為SWF2。

Flash 0day漏洞CVE-2018-5002的實(shí)例分析

(SWF1以post方式下載加密的SWF2)

Flash 0day漏洞CVE-2018-5002的實(shí)例分析

(SWF1使用aes解密SWF2)

SWF1通過LoadBytes將解密后的漏洞利用文件SWF2加載執(zhí)行,并將downloadUrl等參數(shù)傳給SWF2。

Flash 0day漏洞CVE-2018-5002的實(shí)例分析

(SWF1加載SWF2)

3. SWF2(0day漏洞)行為分析

CVE-2018-5002是由于Flash未能正確處理包含特殊字節(jié)碼序列的SWF文件時(shí)產(chǎn)生的棧越界讀寫漏洞。該漏洞同之前的CVE-2017-11292類似,都需要修改SWF文件的字節(jié)碼來觸發(fā)漏洞。同時(shí)該漏洞的利用只需要簡單的內(nèi)存布局,不需要復(fù)雜的堆噴,一個(gè)樣本同時(shí)在32位和64位系統(tǒng)中穩(wěn)定運(yùn)行。    

1) 漏洞原理分析

a. 漏洞代碼

ASC2(ActionScript 2)引入了一組用于快速操作內(nèi)存的函數(shù),如li8, si8等等。該組函數(shù)的具體含義如下:

Flash 0day漏洞CVE-2018-5002的實(shí)例分析

樣本代碼經(jīng)過了惡意混淆,下面是清除混淆后的觸發(fā)漏洞代碼。

Flash 0day漏洞CVE-2018-5002的實(shí)例分析

其中包含li8的靜態(tài)初始化(Static Initializer)代碼并沒有被完全反編譯,下圖是根據(jù)其字節(jié)碼得出的偽碼:

Flash 0day漏洞CVE-2018-5002的實(shí)例分析

實(shí)際調(diào)試發(fā)現(xiàn),執(zhí)行l(wèi)i8指令時(shí)會觸發(fā)異常,同時(shí)異常會交由當(dāng)前的catch塊來處理。而catch部分的代碼可以越界將其調(diào)用者的棧上的兩個(gè)對象指針(local_448, local_449)互換,從而實(shí)現(xiàn)類型混淆。

這里就產(chǎn)生兩個(gè)重要的問題:

I  li8指令并不在try塊中,為什么產(chǎn)生的異常能被當(dāng)前的catch塊捕獲?

II  catch塊正常情況下只能訪問local_0和local_1,為什么這里能越界讀寫?

b. 異常處理

Flash的虛擬機(jī)AVM在執(zhí)行可能會觸發(fā)異常的字節(jié)碼前,會記錄當(dāng)前執(zhí)行的位置previous_bytecode_offset,當(dāng)發(fā)生異常后則根據(jù)記錄的執(zhí)行位置從異常處理例程表ExceptionHandlerTable中查找對應(yīng)的異常處理函數(shù),即AS腳本或字節(jié)碼中的catch塊。

Flash在創(chuàng)建domainMemory時(shí),會為其初始化一個(gè)大小為0x400的內(nèi)存。

Flash 0day漏洞CVE-2018-5002的實(shí)例分析

Flash在執(zhí)行l(wèi)i8(123456)指令時(shí),首先會檢查偏移123456是否超過了domainMemory的大小。由于偏移123456超過了domainMemory的范圍0-1023,所以Flash會拋出一個(gè)Range Error的異常,如下圖所示,其中0x34為li8的字節(jié)碼0x35 – 1。

Flash 0day漏洞CVE-2018-5002的實(shí)例分析

在執(zhí)行該段代碼前,previous_bytecode_offset被初始化為0。此后一共執(zhí)行了三個(gè)字節(jié)碼,分別是:jump,push,li8,這三個(gè)字節(jié)碼的執(zhí)行都沒有保存當(dāng)前執(zhí)行的位置到previous_bytecode_offset。

這樣Flash在處理li8字節(jié)碼觸發(fā)的異常時(shí),認(rèn)為異常發(fā)生的位置為0,接下來FindExceptionHandler函數(shù)根據(jù)異常發(fā)生的位置查找對應(yīng)的異常處理函數(shù),由于異常位置0位于當(dāng)前的Try塊內(nèi),F(xiàn)indExceptionHandler函數(shù)就認(rèn)為該異常應(yīng)該交給當(dāng)前的catch塊來處理。

下圖就是調(diào)試該過程的截圖,F(xiàn)indExceptionHandler的第二個(gè)參數(shù)就是出現(xiàn)異常的偏移即previous_bytecode_offset,值為0。

Flash 0day漏洞CVE-2018-5002的實(shí)例分析

c. 棧越界讀寫

棧越界讀寫主要是通過繞過Flash對Catch代碼塊的檢查(Verify)實(shí)現(xiàn)的。

Flash在對Try代碼塊進(jìn)行檢查時(shí),發(fā)現(xiàn)當(dāng)前代碼塊只有一條jump指令,而jump指令不會拋出異常。

Flash 0day漏洞CVE-2018-5002的實(shí)例分析

同時(shí),由于jump目標(biāo)區(qū)域的字節(jié)碼序列不在Try代碼塊內(nèi), Flash AVM認(rèn)為整段代碼不會發(fā)生異常,對應(yīng)的catch代碼不會被執(zhí)行到,所以略過了對catch代碼塊的檢查,從而可以在catch代碼塊內(nèi)實(shí)現(xiàn)越界讀寫。

Flash 0day漏洞CVE-2018-5002的實(shí)例分析

越界讀寫前:

Flash 0day漏洞CVE-2018-5002的實(shí)例分析

觸發(fā)越界讀寫,交換local_448和local_449:

Flash 0day漏洞CVE-2018-5002的實(shí)例分析

2) 行為分析

SWF2運(yùn)行后會從downloadUrl指向的WEB服務(wù)器下載加密的數(shù)據(jù),以得到shellcode。

Flash 0day漏洞CVE-2018-5002的實(shí)例分析

(SWF2 取shellcode下載鏈接)

Flash 0day漏洞CVE-2018-5002的實(shí)例分析

(SWF2下載shellcode)

取加密數(shù)據(jù)的前16個(gè)字節(jié)作為解密的Key,通過AES解密ShellCode。

Flash 0day漏洞CVE-2018-5002的實(shí)例分析

(SWF2解壓縮并執(zhí)行shellcode)

再借助0day漏洞將shellcode執(zhí)行起來。由于ShellCode服務(wù)器已經(jīng)關(guān)閉,已經(jīng)無法獲取ShellCode的具體內(nèi)容。

Flash 0day漏洞CVE-2018-5002的實(shí)例分析

(執(zhí)行32位或64位shellcode)

Flash 0day漏洞CVE-2018-5002的實(shí)例分析

(執(zhí)行shellcode)

0x3 總結(jié)

該APT組織使用0day漏洞攻擊政府相關(guān)部門,利用純shellcode在宿主進(jìn)程excel中干壞事。而這種0day漏洞加純shellcode的攻擊方式對安全軟件的檢測和防護(hù)能力是一個(gè)挑戰(zhàn)。    

騰訊御見威脅情報(bào)中心判斷在此0day漏洞利用方法未被廣泛傳播之前,該漏洞仍將主要被技術(shù)實(shí)力強(qiáng)勁的APT組織所掌握。而鑒于Adobe Flash Player幾乎安裝在每一臺電腦上,且有大量用戶未能及時(shí)修補(bǔ)安全漏洞,當(dāng)該漏洞的利用方法被病毒木馬黑色產(chǎn)業(yè)掌握時(shí),或?qū)泶竺娣e的網(wǎng)頁掛馬威脅。    

騰訊安全專家提醒政府機(jī)關(guān)、相關(guān)企業(yè)用戶切勿隨意打開來歷不明的文檔,安裝安全軟件防御攻擊。此外,及時(shí)升級Adobe Flash Player到最新版本(30.0.0.113)以防御可能的漏洞攻擊威脅,下載地址:https://get.adobe.com/cn/flashplayer/

目前,騰訊御界高級威脅檢測系統(tǒng)已經(jīng)可以檢測并阻斷該輪攻擊的連接行為。企業(yè)用戶通過部署御界高級威脅檢測系統(tǒng),可以及時(shí)感知惡意流量,檢測釣魚網(wǎng)址和遠(yuǎn)控服務(wù)器地址在企業(yè)網(wǎng)絡(luò)中的訪問情況,保護(hù)企業(yè)網(wǎng)絡(luò)安全。

Flash 0day漏洞CVE-2018-5002的實(shí)例分析

以上就是Flash 0day漏洞CVE-2018-5002的實(shí)例分析,小編相信有部分知識點(diǎn)可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI