背景
2018年1月31日,韓國計算機應急響應小組發布了一則關於Adobe Flash Player的 0day 漏洞警告,並稱早在2017年11月中旬,就有黑客利用該漏洞實施有針對性的攻擊。
2018年2月1日, Adobe官方發布了Adobe Flash Player系列產品的安全通告(APSA18-01),一個最新的Adobe Flash零日漏洞被發現針對韓國地區的人員發起攻擊,該0day漏洞編號為CVE-2018-4878。
2018年2月5日,Adobe官方發布漏洞補丁,修復CVE-2018-4878零日漏洞
在CVE-2018-4878零日漏洞的補丁真空期,360核心安全高級威脅應對團隊迅速反應,率先截獲了該漏洞的在野攻擊並發布分析預警。在官方發布漏洞補丁,零日漏洞得到妥善解決後,本次我們發布在野攻擊的完全分析報告,幫助大家從不同角度推知此次高級威脅攻擊的全貌。
圖1
漏洞文檔攻擊流程分析
攻擊者對相關人員精心策劃了社會工程學攻擊,通過即時聊天工具和郵箱向相關人員發送包含漏洞及惡意代碼的excel誘餌文檔,誘騙受害者打開中招。
圖2 誘餌文檔內容
誘餌文檔中包含了一個ActiveX對象,該對象對應的是一個swf文件。
圖3 包含在文檔中的ActiveX對象文件
打開文檔後ActiveX對象會自動播放flash內容,允許播放後將從雲端實施下一步攻擊。
圖4
誘餌文檔中的flash播放後,下一步將請求遠程URL www.dylboiler.co.kr/admincenter/files/boad/4/manager.php
圖4.1
url請求參數包含id(唯一標識符)、fp_vs(flash版本)、os_vs(系統信息)
圖5
誘餌文檔中的flash將解密遠程URL地址返回的加密文件流,動態執行包含cve-2018-4878漏洞的flash內容。
圖6
cve-2018-4878漏洞荷載所在網站是一個正規的韓國公司網站,疑似該網站已經被攻擊者入侵並完全控制,攻擊者可以在網站上添加任意的惡意代碼。
圖7
CVE-2018-4878零日漏洞分析
我們對cve-2018-4878漏洞文件流進行分析,發現樣本通過操作Flash的com.adobe.tvsdk包中的DRMManager對象進行攻擊。
該部分漏洞的關鍵代碼存在於method_3方法中,該方法new了一個class_8的對象,並傳給drmManager.initialize,然後將var_16置空。
圖8
在class_2的構造函數中 LocalConnection().connect會主動調用gc釋放沒有的引用的內存,而第二次的LocalConnection().connect調用會產生異常,異常處理過程中又會new一個class_8的對象賦值給var_13。
圖9
之後創建了一個定時器,定時器處理函數中,判斷var_13.a1成員的值是否被修改。
圖10
如果發現值被修改了,則調用flash_24/25方法。
圖11
在flash_25方法中又會new 一個class_7的 ByteArray對象賦值給var_17。
圖12
var_17是個ByteArray對象,通過修改ByteArray對象的Length可以完成任意內存讀寫,該處的漏洞利用技巧和hacking team的flash exploit技巧類似,相關代碼已經開源就不再詳述。
圖13
進一步我們對該漏洞進行調試分析,將var_13 = new class_8();代碼注釋掉將會觸發空指針訪問崩潰。
eax=6906d8e9 ebx=00000000 ecx=00000000 edx=00000000 esi=08055d28 edi=0685b020
eip=6850e148 esp=024fd5c0 ebp=024fd5f0 iopl=0 nv up ei pl nz ac po nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00210212
Flash32_28_0_0_137!DllUnregisterServer+0x14ecda:
6850e148 8b4904 mov ecx,dword ptr [ecx+4] ds:0023:00000004=????????
回溯發現地址數據來自esi+0c位置
6850e142 8b4e0c mov ecx,dword ptr [esi+0Ch]
6850e145 8b4908 mov ecx,dword ptr [ecx+8]
6850e148 8b4904 mov ecx,dword ptr [ecx+4]
0:005> dd 066e4100
066e4100 066e4f60 00000000 00000000 00000000
066e4110 00000000 00000000 00000000 00000000
由於這裡我們已經把var_13創建代碼注釋了,說明還有其他對象被錯誤的釋放了,LocalConnection().connect會主動調用gc釋放沒有的引用的內存,所以這裡我們再把這部分注釋,並在 6850e142 8b4e0c mov ecx,dword ptr [esi+0Ch] 處設置斷點,觀察被釋放的數據內容。
圖14
斷點命中後,可以發現數據其實是class_8對象的內容,也就是var_16的內存。
eax=67c1d8e9 ebx=00000000 ecx=0607b2e0 edx=00000000 esi=04785d28 edi=0626b020
eip=670be148 esp=022fcfc0 ebp=022fcff0 iopl=0 nv up ei pl nz ac po nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00200212
Flash32_28_0_0_137!DllUnregisterServer+0x14ecda:
670be148 8b4904 mov ecx,dword ptr [ecx+4] ds:0023:0607b2e4=060ba4c0
0:005> dd 0618e100
0618e100 67c51a88 00000002 0607b2e0 07d98040
0618e110 00001111 00002222 00003333 00004444
0618e120 00005555 00006666 00007777 00008888
0618e130 00009999 0000aaaa 00001111 00002222
最終分析確認cve-2018-4878零日漏洞是drmManager.initialize沒有正確的處理所持有的對象導致UAF漏洞。
Shellcode攻擊流程分析
接下來,漏洞觸發執行的shellcode會通過進程名,判斷用戶是否安裝了AhnLab、ViRobot APT Shield和360三款中韓常用的安全軟體,以採取不同的方案進行攻擊。
圖15
l 三款安全軟體,任意一款存在的環境
直接調用wininet系列函數下載http://www.1588-2040.co.kr/conf/product_old.jpg所對應的惡意荷載執行。
l 未安裝三款安全軟體,或可能存在其他未知安全軟體的環境
創建cmd進程,針對cmd進程通過遠程線程注入代碼的方式下載http://www.1588-2040.co.kr/conf/product.jpg所對應的惡意荷載執行。
圖16
l 兩款韓國安全軟體共存的環境
Shellcode將會直接退出,不做任何操作。
Shellcode所下載的惡意荷載地址所在網站,同樣是一個正規的韓國公司網站,疑似該網站也已被攻擊者入侵並完全控制,用於放置最終的惡意荷載。
圖17
惡意荷載分析
最終執行的惡意荷載會分為兩個階段的程序,第一個階段是Dropper荷載釋放程序,第二個階段是利用網絡雲盤進行C&C控制的後門程序。
荷載釋放程序(Dropper)
程序從資源中加載名為JOK的資源,資源的內容為實際執行的Shellcode,程序新啟動wscript.exe,通過遠程線程的方式將shellcode注入到wscript進程中執行,最終Shellcode會從內存中解密釋放PE文件,自行加載節區重定位在內存中執行最終的後門程序。
圖18
值得注意的是,此次程序的PDB路徑,與2017年11月思科報告的Group 123 組織的ROKRAT木馬(http://blog.talosintelligence.com/2018/01/korea-in-crosshairs.html?m=1)存在關聯。
l d:\HighSchool\version 13\2ndBD\T+M\T+M\Result\DocPrint.pdb
l D:\HighSchool\version 13\First-Dragon(VS2015)\Sample\Release\DogCall.pdb
同時,程序的執行流程和技術細節也與思科報告中的dropper程序一致,疑似是同一系列的ROKRAT木馬程序。
圖19
網盤後門程序(Cloud Drive RAT)
該程序使用公共網盤作為C&C伺服器,用來存儲截屏信息或者進行插件下載;相對於傳統的CC伺服器,使用公共網盤提高了流量識別的難度,因為網盤類網址均為可信的白域名。
圖20
使用的雲盤信息如下:
程序中出現的URL
對應網盤
程序主要流程分析
程序首先生成了一個8位元組的隨機字符串,用來作為本次通訊的標識,該字符串在隨後的上傳和CC命令執行都有涉及
圖21
隨後對作業系統版本和當前執行和環境進行檢查
圖22
收集計算機、用戶名、BIOS信息
圖23
嘗試加載下列DLL,嘗試獲取VMwareTools版本號和BIOS版本信息,進而判斷是不是處於沙箱環境或者調試中
圖24
l 沙箱環境列表
Dll名稱和對應沙箱和調試環境
在判斷沙箱環境之後,程序開始創建工作線程,執行相應的功能。
圖25
該後門程序使用公共雲盤進行數據中轉,程序中內置了4種雲盤,分別是box,dropbox,pcloud, yandex,此次截獲的樣本使用的為pcloud網盤。
圖26
程序通過GDI API來實現截取受害機器屏幕的功能,並將圖片保存在temp目錄下,命名方式為隨機產生的表示序號+當前截圖的序號
圖27
圖28
隨後,程序會讀取圖片數據,並刪除temp目錄下的圖片,將之前收集到的環境信息和圖片數據一起上傳到雲盤中。
圖29
l 上傳的數據格式
偏移地址、長度和信息
程序會循環向網盤請求名為 def_ + 隨機標示的文件,通過對該文件進行解析,獲取雲端的C&C指令進行攻擊。
圖30
l 雲控C&C命令列表
指令序號與功能
在完成命令解析後,程序還會調用網盤的刪除API將對應的指令文件刪除
圖31
我們推測在實際的攻擊過程中,攻擊者會收集截圖等信息後,選取其中有價值的目標,再上傳定製的指令文件到網盤中進行攻擊。
攻擊信息溯源
通過對程序的逆向分析,我們發現了網盤的Token權限並沒有被嚴格限制,通過該Token可以獲得網盤的註冊信息和保存在網盤中的內容,從中我們定位到了攻擊者的網盤註冊郵箱為cheseolum@naver.com,註冊時間為2017年12月11日,與韓國響應中心公告的11月開始攻擊的時間相近。
圖32
在1月31日攻擊正式對外曝光後,仍然有大量新的中招者向該雲盤上傳信息,在獲取到的截屏信息中,我們發現了大量的病毒檢測沙箱和樣本分析人員。從截屏信息中判斷,大部分分析人員在根據https://github.com/brianwrf/CVE-2017-4878-Samples 中的樣本在進行病毒分析。
圖33
在截圖排查中,我們還意外發現了疑似國內安全從業者的電腦桌面截屏,可能是其在下載分析樣本時不慎中招。
圖34
總結
通過分析我們可以發現此次攻擊是通過精心策劃的,攻擊周期長達三個月以上,攻擊者通過入侵兩個正規公司網站放置惡意荷載,使用正常的雲盤服務作為C&C基礎設施,不計成本利用零日漏洞,開發精巧的攻擊方案。在攻擊過程中所使用的大量資源,都表明這不是個人和一般團隊能夠實施的,這是一起典型的APT攻擊。隨著漏洞信息逐漸公開,相關單位和普通用戶都需提高安全防範意識,及時更新Flash版本,並開啟安全軟體防禦可能出現的漏洞威脅。