網絡戰:利用Chrome 0day的巫師行動(CVE-2019-13720)

網絡戰:利用Chrome 0day的巫師行動(CVE-2019-13720)

網絡戰:利用Chrome 0day的巫師行動(CVE-2019-13720)

0x00 前言

最近Kaspersky Exploit Prevention成功檢測到一系列0-day攻擊,其中攻擊者利用了Google Chrome瀏覽器中的一個未公開漏洞。我們第一時間向Google Chrome安全團隊報告了該漏洞,Google在審核我們提供的PoC後,確認這是一個0-day漏洞,分配的漏洞編號為CVE-2019-13720。Google為Windows、Mac及Linux發佈了新版的Chrome(78.0.3904.87),我們建議用戶儘快升級到該版本。這裡大家可以參考Google公佈的安全公告。

Kaspersky將此次攻擊標記為Exploit.Win32.Generic。

我們將這些攻擊行動稱之為“Operation WizardOpium”,目前我們還無法將其與已知的攻擊組織關聯起來。此次攻擊與Lazaru(拉撒路)攻擊在代碼上有較弱的相似性,但這可能是一種假陽性關聯。目標網站在配置上與之前的DarkHotel攻擊行動關聯性更強,而DarkHotel攻擊者最近也採取了類似的虛假攻擊特徵。

0x01 技術細節

此次攻擊行動在韓語新聞門戶網站上採用了水坑式注入技術,攻擊者將惡意JavaScript代碼插入主頁面,惡意代碼隨後會從遠程網站上加載配置腳本。

網絡戰:利用Chrome 0day的巫師行動(CVE-2019-13720)

圖1. 重定向到漏洞利用頁面

主頁面上託管著一個小型JavaScript標籤,可以從hxxp://code.jquery.cdn.behindcorona[.]com/處加載遠程腳本。

該腳本隨後會加載名為.charlie.XXXXXXXX.js的另一個腳本,這個JavaScript腳本會對比瀏覽器的user-agent信息,判斷瀏覽器是否運行在64位的Windows系統上,並且不以WOW64進程運行,以檢查受害者系統是否能被成功感染。此外,該腳本還會嘗試提取瀏覽器的名稱及版本。攻擊者想利用的是Google Chrome瀏覽器中的一個bug,需要通過該腳本判斷瀏覽器版本號是否大於或等於65(目前的Chrome版本號為78)。

網絡戰:利用Chrome 0day的巫師行動(CVE-2019-13720)

圖2. 腳本(.charlie.XXXXXXXX.js)檢查Chrome版本

如果瀏覽器版本滿足條件,該腳本會向攻擊者控制的服務器(behindcorona[.]com)發起一系列AJAX請求,其中路徑名以參數形式傳入目標腳本(xxxxxxx.php)。第一個請求用來獲取某些重要的信息,以便後續利用。該信息包括若干個經過十六進制編碼的字符串,指導腳本需要從服務端下載多少塊(chunk)漏洞利用代碼,字符串中也包含指向某個圖像文件的URL,該文件中包含最終payload的秘鑰以及用來解密利用代碼chunk的RC4秘鑰。

網絡戰:利用Chrome 0day的巫師行動(CVE-2019-13720)

圖3. 利用鏈:向xxxxxxx.php發起AJAX請求

下載所有chunk後,RC4腳本會解密並將所有數據拼接在一起,這樣攻擊者就能構造出一個新的JavaScript代碼,其中包含完整的瀏覽器漏洞利用代碼。攻擊者在payload解密過程中使用了之前提取到的RC4秘鑰。

網絡戰:利用Chrome 0day的巫師行動(CVE-2019-13720)

圖4. 再次檢查版本號

瀏覽器漏洞利用腳本經過混淆處理,去混淆後,我們觀察到了一些有趣的信息:

1、腳本會再次檢查user agent字符串,這一次要檢查瀏覽器版本是否等於76或者77。這意味著漏洞利用代碼只適用於這些版本(前面檢查的是版本號大於或等於65),或者其他利用技術之前已在老版本的Chrome上使用過。

網絡戰:利用Chrome 0day的巫師行動(CVE-2019-13720)

圖5. 經過混淆的利用代碼

2、腳本中有一些函數調用了瀏覽器的BigInt內置類,該類可以用來在JavaScript代碼中執行64位運算(比如在64位環境中處理原生指針)。通常情況下,漏洞利用開發者會實現自己的函數,通過32位數值來完成該任務。然而在此次行動中,攻擊者使用的是BigInt,由於該類由瀏覽器代碼原生支持,因此運行效率應該更高。這裡漏洞利用開發者並沒有使用全部64 bit,只在部分bit上操作,這也是為什麼攻擊者要實現一些函數,用來處理高位/低位數值的原因所在。

網絡戰:利用Chrome 0day的巫師行動(CVE-2019-13720)

圖6. 處理64位數值的代碼片段

3、有很多函數及變量並沒有在實際代碼中使用。這通常意味著這些函數及變量屬於調試代碼,在投入實際使用時沒有被刪除。

4、大部分代碼使用了多個類,這些類與瀏覽器中存在漏洞的某個組件有關。由於該bug尚未被修復,這裡我們並沒有公佈該漏洞組件的詳細信息。

5、代碼中還有一些大數組,用來表示shellcode代碼及內嵌的PE映像。

為了遵循漏洞披露原則,這裡我們提供的研究分析比較簡單。瀏覽器的兩個線程中缺少正確的同步機制,因此存在競爭條件bug,攻擊者可以利用這一點,達到釋放用重用(UAF)狀態。這種狀態非常危險,可能導致代碼執行,而這次攻擊者的確完成了該任務。

漏洞利用代碼首先嚐試觸發UAF,(以指針形式獲取)一些關鍵的64位地址信息。如果該步驟成功完成,攻擊者可實現:1)如果成功獲取地址,意味著漏洞利用代碼正常工作;2)可以使用提取到的地址獲取堆/棧的位置,繞過ASLR(地址空間佈局隨機化)機制;3)可以搜索該地址附近的其他一些有用指針,以便後續利用。

隨後,利用代碼嘗試使用遞歸函數創建一大堆大型對象。該操作是為了獲取特定的堆佈局,確保漏洞利用能夠成功完成。與此同時,代碼嘗試使用堆噴射技術,複用之前在UAF中被釋放的同一個指針。攻擊者可以通過這種技術製造混亂,(從JavaScript代碼角度來)操作兩個不同的對象,雖然這兩個對象實際上位於相同的內存區域。

利用代碼嘗試執行各種操作來分配/釋放內存,也使用了其他技術,最終攻擊者成功實現了任意讀/寫原語。攻擊者通過這種方式構造一個特定的對象,與WebAssembly及FileReader配合使用,以執行嵌入式shellcode payload。

網絡戰:利用Chrome 0day的巫師行動(CVE-2019-13720)

圖7. 第一階段shellcode

0x02 Payload解析

最終下載的payload為經過加密的二進制文件(worst.jpg),由shellcode負責解密。

網絡戰:利用Chrome 0day的巫師行動(CVE-2019-13720)

圖8. 經過加密的payload:worst.jpg

經過解密後,惡意軟件模塊以updata.exe形式保存到本地磁盤上並執行。為了實現本地駐留,惡意軟件會在Windows Task Scheduler中創建計劃任務。

installer payload為RAR SFX歸檔文件,具體信息如下:

歸檔文件中包含兩個文件:

網絡戰:利用Chrome 0day的巫師行動(CVE-2019-13720)

兩個文件對應的信息分別為:

這兩個文件編譯時間相同,都為“2019年10月8日 01:49:31”。主模塊(msdisp64.exe)嘗試通過硬編碼的C2服務器列表下載下一階段payload,下階段payload位於C2服務器上,具體路徑對應受害者的計算機名,因此攻擊者知道哪些主機已被成功感染,會將對應的模塊放置在C2服務器的特定目錄中。

0x03 IoC

歡迎登錄安全客 - 有思想的安全新媒體www.anquanke.com/ 加入交流群814450983 獲取更多最新資訊吧


分享到:


相關文章: