【2018-11-20】勒索病毒GrandCrab-v5.04完整分析

原程序分析

樣本下載連接html

基本文件信息
ExeInfo 查看文件信息,PE32位且有殼sql

clipboard.png

Ollydbg 入口點代碼以下shell

clipboard.png

脫殼後
單步跟到OEP,dump內存修復IAT,成功脫殼後用 Die 查看編譯語言爲 Delphi7dom

clipboard.png

IDA 和 OD 的入口代碼函數

clipboard.png

clipboard.png

反沙箱手段工具

  • 消息循環

複雜的消息循環,使用了定時器消息,以及自定義 SendMsg,發送大量消息,使程序的運行時間延長佈局

clipboard.png

  • 設備上下文

長時間消息循環到達核心代碼區,裏面又有許多的動態解密函數以及大量的GetDCGetStockObject,既消耗了必定的時間又消耗了大量的內存資源測試

clipboard.png

clipboard.png

  • Sleep

最關鍵的手段仍是一個 Sleep(),Sleep了4分鐘加密

clipboard.png

釋放文件spa

  • Call下斷

程序的不少代碼都是動態解密的,不用跟具體的解密過程,直接在 call 跳轉時下斷便可。如圖在釋放文件的關鍵call下斷,注意先 Patch 掉以前的 Sleep

clipboard.png

  • OD粗略分析

F7 跟過去分析,發現先是獲取了一些 API,而後建立一個進程,再是寫入數據到子進程

clipboard.png

clipboard.png

  • IDA詳細分析

使用ODScript的dma指令dump這段內存,而後IDA打開靜態分析!先是GetProcAddress獲取多個 API 的地址,而後CreateProcess建立自身路徑所在的一個進程,傳入CREATE_SUSPENDED使其掛起,利用ZwUnmapViewOfSection卸載原來全部區段以及RtlZeroMemory將內存區域置0,VirtualAllocEx配合WriteProcessMemory寫入新的數據,利用SetThreadContextResumeThread修改程序的入口點,且恢復掛起進程運行

clipboard.png

clipboard.png

clipboard.png

Tips:dma指令很簡單的: "dma start,size,path"

提取病毒體
WriteProcessMemory下斷,發現寫入的是一個完整的 PE 文件

clipboard.png

利用 dma 指令提取了總共9段數據,而後新建 PE 文件,手動對齊文件偏移,更改節區的正確偏移量以及節區的可執行屬性,最後提取出了病毒體!P.S.以後我用PCHunter提取出整段內存而後再去對齊偏移也是能夠的

clipboard.png

第一部分總結
原程序首先是加了殼,而後擁有大量的混淆手段,如圖用ProcessMonitor檢測到只會讀取某些註冊表的值並無寫註冊表,更沒有其它危險的操做,所以能過不少的殺軟!又使用了Sleep等延時手段過掉很大一部分的沙箱分析,再者程序執行核心病毒的手段也很隱蔽,利用傀儡進程寫入新的PE文件並更改入口點執行,讓核心惡意代碼很難被殺軟檢測到

clipboard.png

病毒體分析

基本文件信息
PE32位程序,總共8個節區,有個自寫的殼

clipboard.png

脫殼文件信息
這殼好脫,簡單的異或加密殼,3個jmp eax下斷便可到 OEP,而後dump以及修復IAT,找到的 OEP 以下

clipboard.png

clipboard.png

腳本去花
脫了殼以後拖入 IDA 發現 F5 失效,由於代碼的每一個jnz和jz以後有一段垃圾指令,干擾了 IDA 等反彙編工具的彙編,寫了個IDAPython去除花指令以後就可以反編譯了,代碼以下

def patch_junkcode(addr):
    data = list(get_bytes(addr,4))
    if(ord(data[0]) == 0x75 and ord(data[1]) == 0x5 and ord(data[2]) == 0x74 and ord(data[3]) == 0x3):
            for i in range(4,10):
                patch_byte(addr+i,0x90)
base = 0x401000
len = 0x414C00 - base
for i in range(len):
    patch_junkcode(base+i)
print 'Finished!'

病毒執行流程

  • 關閉指定進程

遍歷系統進程,關閉"msftesql.exe","sqlagent.exe","sqlbrowser.exe"等多個特定進程

clipboard.png

clipboard.png

clipboard.png

  • 打開互斥體

打開一個互斥體,同步與父進程的內存數據操做

clipboard.png

clipboard.png

  • 要求操做系統Win7以上

使用VerifyVersionInfoW函數判斷操做系統大於Win7,不然退出程序

clipboard.png

  • 要求用戶權限Low以上

使用GetSidSubAuthority函數判斷當前用戶的權限在Low以上

clipboard.png

  • Win7以及Win8提權

先是建立位圖寫入數據,其實數據是以後的shellcode,這麼作是爲了隱蔽這段 shellcode

clipboard.png

獲取 shellcode,調用ZWQueryIntervalProfile提高當前用戶權限爲系統權限,提權原理相關連接

clipboard.png

  • Win10提權

判斷操做系統爲Win10,利用不久前Task Scheduler的一個0day提權,先是獲取StartXpsprintJob的地址,提權原理相關連接

clipboard.png

以後連接到printconfig.dll來觸發漏洞,而後提高爲系統權限

clipboard.png

  • 建立進程運行自身

判斷操做系統大於 Win7 以及用於權限大於 Low 以後,獲取自身完整路徑,使用GetShortPathNameW來避免Unicode路徑的影響,以後利用wmic傳入路徑再次啓動自身

clipboard.png

  • 檢查區域

經過鍵盤佈局檢查區域,某些區域不會執行以後的代碼,直接會刪掉本身而後退出

clipboard.png

經過默認的語言判斷區域

clipboard.png

  • 建立互斥體

一堆花裏胡哨的操做,就爲了建立一個互斥體!好像做者在嘲諷 ahnlab,這個不太瞭解

clipboard.png

  • 解密必要數據

解密了一些數據,以後初始化 Key 的時候用到了

clipboard.png

  • 查詢系統信息

經過註冊表檢查了當前用戶組,所在地區,操做系統,系統版本號,CPU信息,以及磁盤類型和磁盤容量,最重要的是查找了一些常見的殺毒進程,但僅僅是查找

clipboard.png

clipboard.png

clipboard.png

clipboard.png

clipboard.png

clipboard.png

clipboard.png

  • 生成隨機字符

使用CryptGenRandom生成隨機數,運算後獲得幾個寬字符,取六個以後轉換爲大寫,拼接到文件名。P.S.文件名就是指導你付款的那個文件的名稱,諸如:TZYLVF-DECRYPT.txt

clipboard.png

  • 生成公私鑰對

使用CryptGenKey生成RSA的公私鑰對,以後用CryptExportKey導出到內存中

clipboard.png

  • 公私鑰對寫入註冊表

建立HKEY_LOCAL_MACHINE\\SOFTWARE\\keys_data\\data再建立publicprivate,將以前的公鑰和公私鑰對分別寫入這兩個子鍵中

clipboard.png

  • 解密說明信息

解密出以後要寫入XXXXXX-DECRYPT.txt中的字符串,至關於給用戶的說明書

clipboard.png

clipboard.png

  • 開啓線程準備加密文件

第一個線程會遍歷局域網共享文件

clipboard.png

第二個線程會遍歷本地有效磁盤以及移動存儲設備

clipboard.png

  • 採用的遍歷方法

遍歷局域網與遍歷本地採用的方法都是相同的,先判斷磁盤的有效性,有效則進行下一步遍歷!下一步則必須先知足不是.以及..,而後獲取當前目錄的屬性,是文件夾的話則遞歸遍歷,SQL目錄會進行單獨處理,直到遍歷到文件則利用以前的 RSA 公鑰加密

clipboard.png

  • 建立說明文件

以前的說明書內容一直在內存中,還沒有寫入到文件。在每一個目錄遍歷開始時就在當前目錄創建一個文件,文件名就是以前的隨機字符,而後將內存中的說明書寫入文件!除此以外還會創建一個.lock文件用於記錄加密時的時間

clipboard.png

clipboard.png

  • 加密白名單

加密的白名單主要有三個,一是特定目錄下的文件不加密,諸如:Program Files,Windows,Boot等系統目錄

clipboard.png

第二個就是特定的後綴不加密,動態才能看獲得

clipboard.png

第三個就是特定的文件不加密

clipboard.png

  • 執行加密

當遍歷到非白名單文件時,便開始加密文件

clipboard.png

  • 刪除卷影拷貝

加密完成後,刪除Shadow Copy,防止普通用戶恢復刪除的未加密原文件

clipboard.png

  • 設置桌面背景

先建立位圖再寫入顏色數據,以後新建文件寫到文件中,文件在Temp目錄下,最後使用SystemParametersInfoW設置該圖片爲桌面背景

clipboard.png

clipboard.png

  • 發送POST請求

建立一個線程,先是解密出網址信息

clipboard.png

而後隨機選取字符串拼接網址

clipboard.png

我測試時拼接的字符串是http://www.2mmotorsport.biz/includes/pics/zurukafu.jpg,最後向這個網址發送一個POST請求

clipboard.png

  • 刪除自身

病毒加密文件完成後會調用cmd延時5s再刪除本身

clipboard.png

第二部分總結
上述的執行流程是病毒體的順序執行流程,這個勒索病毒主要是釋放時很是隱蔽很差定位,dump 出的病毒體也有花指令影響靜態分析,不過 IDAPython 能去除花指令!雖然如此這病毒的主體仍是如此複雜,各類判斷使得病毒的抗干擾性異常強大,能夠運行在 Windows 不一樣的版本以及運行在不一樣的國家!一個字形容:強!

END

相關文章
相關標籤/搜索