Kaspersky研究人員近日發現一個Google Chrome瀏覽器的新的未知漏洞利用。經Google研究人員確認,是一個0 day漏洞,CVE編號為CVE-2019-13720。
研究人員將相關攻擊活動命名為Operation WizardOpium。目前還無法將該攻擊活動與已知的攻擊者聯繫在一起。但研究人員發現部分代碼與Lazarus攻擊中的代碼很相似。從被攻擊的站點來看,與早期DarkHotel攻擊活動類似。
技術細節
攻擊活動使用了一種對韓語新聞門戶的水坑形式的注入。攻擊者會把惡意JS代碼插入到主頁中,惡意JS代碼會從遠程站點加載一個分析腳本。
重定向到漏洞利用加載頁面
一個主頁index頁面會從hxxp://code.jquery.cdn.behindcorona[.]com/處加載一個標記為JS tag的遠程腳本。
該腳本會加載一個名為.charlie.XXXXXXXX.js的腳本。JS代碼會通過比較瀏覽器的用戶代理來檢查受害者的系統是否感染,用戶代理會在64位的Windows版本上運行,而非WOW64進程,並嘗試獲取瀏覽器的用戶名和版本。
該漏洞會嘗試利用Google Chrome瀏覽器的bug,腳本會檢查瀏覽器版本是否大於65(當前Chrome版本為78):
profiling 腳本(.charlie.XXXXXXXX.js)中的chrome版本檢查
在瀏覽器版本檢查後,腳本會執行一些到攻擊者控制的伺服器(behindcorona[.]com)的AJAX請求,伺服器中的路徑名會指向傳遞給腳本(xxxxxxx.php)的參數。第一個請求對於獲取一些重要信息是非常必要的。這些信息包括一些十六進位編碼的字符串來告訴腳本那些真實漏洞利用代碼塊會從伺服器下載,一些到圖像文件的URL,圖像文件嵌入了到final payload的key和解密漏洞利用代碼的部分塊。
漏洞利用鏈–到xxxxxxx.php的AJAX請求
下載了所有塊後,RC4腳本會解密和連接所有的塊,這樣攻擊者就有了含有所有瀏覽器漏洞利用的新的JS代碼。為了解密這些部分,需要使用之前提取的RC4 key。
版本檢查
瀏覽器漏洞利用腳本是經過混淆的,在反混淆後,研究人員發現了針對用戶代理字符串的另一個檢查,這次檢查的瀏覽器版本是76或77。也就是說漏洞利用開發者只在這些版本上工作,或其他漏洞利用已經用於之前的Chrome版本中了。
混淆的漏洞利用代碼
在瀏覽器內置的BigInt 類中,有一些函數運行的函數。BigInt 類的作用是在JS代碼中進行64位的算術運算。漏洞利用開發者通過與32位數來進行實現這些函數。BigInt 類的作用在瀏覽器代碼中實現的速度更快。漏洞利用開發者並不都使用64位,而是在小範圍的數上進行運算。
對64位數字進行處理的代碼段
在真實代碼中有很多的函數和變量並沒有使用。也就是說這些代碼應該是用來調試的,或還沒有用於生產中。
代碼的大部分使用了一些有特定瀏覽器組件相關的類。因為該漏洞還沒有被修復,本文為未介紹該有漏洞的組件的細節。
該漏洞利用使用了2個線程之間的一個競爭條件漏洞,漏洞的原因是由於錯失了適當的同步。漏洞給了攻擊者一個UAF條件,因為UAF會導致漏洞執行的場景。
漏洞利用首先會嘗試觸發UAF來執行關於重要64位地址的信息洩露。這會引發:
1、如果地址成功洩露,就說明漏洞利用正常工作。
2、洩露的地址會用來了解堆或棧的地址,用來處理ASLR技術。
3、提供過搜索附近地址來尋找其他漏洞利用的有用指針。
然後會嘗試用遞歸函數來創建一個大對象的部分。這是通過一些確定性的堆布局來實現的,這對成功的漏洞利用來說是非常重要的。同時會嘗試使用堆噴射技術來使用之前UAF部分的指針。該技術會用來引發混淆,使攻擊者可以在兩個位於相同內存區域的不同的對象之間操作。
漏洞利用會嘗試執行大量的操作來分配或釋放內存,以給攻擊者任意的讀寫原語。這是用來偽造特殊的對象的,該對象可以與WebAssembly 和FileReader一起來執行嵌入shellcode payload的代碼執行。
第一階段shellcode
Payload分析
Final payload是以加密的二進位文件(worst.jpg)下載的,同時也是shellcode解密的。
加密的payload – worst.jpg
解密後,惡意軟體模塊會以updata.exe的形式釋放到磁碟中並執行。為了實現駐留,惡意軟體會在Windows任務計劃器中安裝任務。
Payload installer是一個RAR SFX文件,含有以下信息:
· 文件大小: 293,403
· MD5: 8f3cd9299b2f241daf1f5057ba0b9054
· SHA256: 35373d07c2e408838812ff210aa28d90e97e38f2d0132a86085b0d54256cc1cd
壓縮文件中含有2個文件:
· 文件名: iohelper.exe
MD5: 27e941683d09a7405a9e806cc7d156c9
SHA256: 8fb2558765cf648305493e1dfea7a2b26f4fc8f44ff72c95e9165a904a9a6a48
· 文件名: msdisp64.exe
MD5: f614909fbd57ece81d00b01958338ec2
SHA256: cafe8f704095b1f5e0a885f75b1b41a7395a1c62fd893ef44348f9702b3a0deb
這兩個文件的編譯時間是相同的,時間戳為 2019年10月8日01:49:31。
主模塊msdisp64.exe會嘗試從硬編碼的C2伺服器集下載下一階段。下一階段位於C2伺服器的文件夾名為受害者計算機名的文件夾中,所以攻擊者就有了哪些計算機受感染了,並將下一階段模塊放在C2伺服器的特定文件夾中。
註:本文翻譯自:https://securelist.com/chrome-0-day-exploit-cve-2019-13720-used-in-operation-wizardopium/94866/