GlobeImposter3.0 勒索分析
- 2019 年 11 月 22 日
- 筆記
GlobeImposter3.0 勒索分析
0x00 寫在前面
木馬從app.any.run下載而來,是GlobeImposter勒索病毒

木馬MD5:C120F323C78D046C991F0EFE45F3819C
tip:如何在app.any.run下載木馬 首先訪問https://app.any.run/,然後點擊右下角的trojan

然後把這裡的trojan叉掉,在右邊輸入樣本md5

然後點擊出來的結果


分析機器,win7x64 分析完成了,說一下木馬特點: RSA加密,私鑰在攻擊者手裡,所以被加密的文件在沒有私鑰的情況下無法解密。 加密完成後會刪除卷影備份以及登錄資訊 好像沒什麼特別的了...
0x01 分析準備
- 網路環境 在網路隔離環境分析,即卸載了虛擬機網卡
- 快照 分析一個新的木馬,可以在拖入木馬到虛擬機後創建一個乾淨快照,方便恢復創建了快照之後,可以直接運行一下這個勒索得到如下結果:

後綴名為snake444,所以很明顯這是一個3.0版本的勒索,我們恢復快照繼續分析。
0x02 分析過程
行為檢測
在虛擬機中使用火絨劍進行行為監測,首先將該木馬更名為777.exe,然後設置進程過濾

接著運行777.exe 發現木馬首先會將自身拷貝到%LOCALAPPDATA%路徑中

然後將自身寫入到開機自啟動

生成neuser.ini文件

生成勒索提示文件:

然後就是文件加密,以及最後刪除自身,由於該勒索行為實在太多太多,不能進行詳細分析,所以只暫時分析了一個大概。
IDA靜態分析
從start函數進來:

我們可以看到程式首先會通過GetModuleFileNameW獲取當前的路徑 然後調用了sub_408B19函數,參數分別為MultiByteStr和sub_4017E8 查看了一下sub_408B19函數,貌似是解密函數。 通過動態調試發現的確是解密函數,MultiByteStr解密出來就是加密後綴名.Snake4444

然後嘗試獲取LOCALAPPDATA,如果LOCALAPPDATA不存在則獲取APPDATA環境變數,如果獲取失敗則退出進程,如果成功,則調用PathAddBackslashW嘗試在路徑最後加上反斜杠。

接著往下看,我們可以知道程式獲取了環境變數路徑之後,是嘗試將文件拷貝過去。
根據if判定條件的&&優先順序可以知道,如果LOCALAPPDATA獲取成功,後面部分則不會運行,所以直接查看靶機上面的LOCALAPPDATA路徑,可以看到777.exe已經拷貝過來。

根據上面一張程式碼清單還可以得知,當路徑v0不為空的時候會執行sub_409624,跟進到該函數:

可以看到,sub_409624是註冊表操作函數,將當前的exe寫入到開機自啟動。
接著往下走

程式會嘗試獲取環境變數public或環境變數ALLUSERSPROFILE存放到v3,有了上面那部分的經驗,我們直接查看運行後的public路徑:

可以看到多了兩個文件,一個是一串十六進位文本,還有一個是勒索的提示資訊,之後我們再分析這個十六進位文件名到底是什麼。
路徑獲取完成之後,會將路徑v6作為參數,傳遞到一個循環中

通過調試得到v6路徑

可以看到,該循環應該會執行10次,但是由於循環次數還由v8決定,而v8的值由sub_409B4B決定,所以跟進到sub_409B4B函數。

該函數可以得知,程式首先會創建一個文件,路徑為傳入進來的v6,if分支是v4獲取到GetLastError的時候,所以我們直接看else分支。 在else分支中,可以看到最後是一個關鍵的wireFile。而前面的函數通過靜態分析暫時還沒有得到有用的資訊,於是使用x64dbg調試。 成功創建文件,文件名是黑客的公鑰資訊。

調用sub_40A116時文件參數如下:


這裡還有一個關鍵參數,nullsub_1,查看該參數對應的記憶體地址:401148

發現暫時不知道是啥玩意兒,查看一下nullsub_1的調用

看地址應該是第二條,跳過去:

是在函數最開的地方,我當時沒有分析這兩部分,現在回過頭去看發現是計算用戶ID的,所以這個nullsub_1存儲的是用戶ID資訊。 所以這裡是將用戶ID、public路徑名、加密後綴、勒索提示文件名作為參數傳進來了 跟進到40A116函數,根據rsa_genkey關鍵字可以大概得知,該函數是用於生成RSA秘鑰對的。

可以看到,該函數最後返回的是V9,而v9的值是由sub_409FDE函數決定的,動態調試得到參數就是用戶ID

跟進到該函數,發現是rsa加密:

經過分析,這部分(sub_409B4B)的功能是:在public路徑下寫入文件,文件名為黑客公鑰,寫入內容為經過RSA加密的用戶ID。 外層wireFile寫入的時候,參數2的ebp指向的就是經過加密的用戶ID的記憶體

CloseHandle後查看文件,發現有兩行內容 第一行是內層函數裡面寫入的隨機生成RSA公鑰資訊,第二行是剛才寫入的加密後的用戶ID

接著往下走,跟進到這個call

看到遍歷磁碟操作

然後根據遍歷的結果創建執行緒:


這裡面是一個dowhile大循環,循環條件是FindNextFile,很明顯這裡是遍歷所有文件加密了,根據分支結構來看,加密函數應該是sub_408D88,進入到該函數,函數非常長,在中間的位置找到了之前對之前RSA加密的調用:

接下來動態調試驗證一下: 直接在創建執行緒的地方下斷點,F9過來:

然後直接在我們之前看好的RSA加密函數處下斷點,然後F9運行,跑過來

第二次斷

最開始是加密桌面的link 先看一下原始桌面:

加密後

多斷幾次,我的7z安裝包也被加密了

現在已經摸清楚循環加密的流程了,接著往後面走,返回到最外層的函數調用,也就是start進來的sub_409C6B,現在已經分析完了sub_4099A3的功能,接著看sub_409449

40449這個函數功能不複雜 看樣子就是創建並執行了一個bat文件,動態調試去拿到這個bat文件

直接在sub_409449入口處下斷點,等了一段時間斷下來的時候已經加密完成了

創建路徑:

創建成功,還未寫入數據:


這裡因為sub_409305裡面有CreateProcess,所以猜測sub_409305是執行bat,sub_408B19是填充bat

這裡填充了一部分,還不能打開,顯示正在佔用,估計還沒處理完,接著往下走,該函數(409449)執行完,程式最後還會jmp到409509,跳轉過去:

409509

可以看到409509的確還在對bat進行處理
然後shellExecuuteExw之後,刪除了勒索文件:

最後進程結束,bat可以打開了:

可以看出來,這個bat的功能主要是刪除卷影副本,清除遠程登入日誌。
0x03 分析總結
木馬加密流程:
- 拷貝自身到LOCALAPPDATA路徑
- 將自身寫入到開機自啟動
- 解密勒索後綴、獲取用戶ID,RSA加密之後存放到public,文件名為黑客的公鑰資訊
- 遍歷用戶磁碟
- 對除了自身以外的所有文件進行加密並生成勒索提示文件
- 生成bat文件,功能為刪除卷影備份,刪除登錄資訊
- 刪除原始木馬

