0x0前言
本病毒使用了去符號表、敏感信息混淆、int 0x80執行系調函數、sh -c 執行bash腳本獲取相關信息等技術來做免殺處理。
但是不足的點也很明顯:
- top命令可以直接查看病毒進程占用cpu比率。
- crontab -l可以發現病毒的定時任務。
- 沒有去掉特征字符,核心代碼修改自github某著名挖礦源碼。
注:由于網絡安全法的規定,本文未將病毒鏈接放出。
0x1背景
某一天,一個朋友突然微信過來一個病毒(絕對不是無中生友~)。截圖是朋友給的檢查結果以及時間。看圖的樣子,這個病毒靜態檢測起來比較復雜??
0x2病毒分析
拿到病毒第一件事,查殼。還好,這個病毒只是一個標準的壓縮殼,沒有做什么大的變化。
(x86版本x64版本代碼一樣,習慣用x86分析)
脫殼:upx –d filename 一切順利。
如果病毒作者自己修改upx的殼的話,標準的upx –d是脫不掉的,需要單步跟隨一步步dump吧。
病毒分析是一個耐心的活,考驗的是細心。
還有一點,此病毒全程沒有符號表,這給逆向的人員帶來很多麻煩,很多函數都需要一點點跟進才行。
對于linux病毒,如果單純使用gdb調試的話,很容易陷入局部,不能整體把控。
此時,IDA的動態調試功能就凸顯出來了。使用IDA的動態調試既簡單又有效,可以節省大量時間。
方法:
1)將ida dbgsrv目錄下的linux_server放在linux虛擬機中,以root形式運行linux_server,如下圖。
2)在實體機中使用IDA載入病毒后,點擊F9或start process按鈕(綠色三角)。IDA會彈出Debugger warning提示框,點擊“ok”。
這里注意一點的是,Hostname要輸入linux虛擬機的ip地址,并且確保linux_server是運行狀態。
至于Application、Input File、Directory這三個忽略不計也可以。
之后一路“ok”就可以調試了。
病毒內含有大量的看似無用代碼,其實包含了大量需要解碼的內容。流程較為簡單直接,一直F8即可。
大致如下圖所示:
首先經過解密,其配置如下:用戶名FUCKERS,密碼Rxl,礦池xmr.winscp.top:80。
至此,此病毒的關鍵信息已被提取。
而且有意思的一點—donate-level默認級別是5,病毒作者改成了20,捐贈的心還是很大方的~經查看,此病毒核心部分為github上一知名挖礦病毒~
部分解密采用了xor解密,紅框中為解密后的,亂碼為未解密的內容。如下圖
解密后的腳本如下:
當可執行bash腳本被解密后,系統通過sys_execve(bin/sh)的方式呼喚起shell,然后通過sh -c執行bash的腳本。
這里有一點需要注意的是病毒執行sys_execve的方式并不是直接調用函數sys_execve,而是采用了int 0x80的方式。
Linux系統提供了200多個系統調用,通過匯編指令 int 0x80 實現,用系統調用號來區分入口函數。
為了對避免毒軟件對敏感函數的糾察,病毒正好利用了此特性,通過兩個步驟來實現所要執行的函數過程。
比如需要執行sys_execve。
1)首先查看資料得知sys_execve的序號是11。接著病毒將此序號傳入代碼中等待。
2)通過匯編語句調用 int 80,啟動軟中斷,以軟中斷方式進入調用sys_execve的執行。
如下圖所示:
又是一段bash解密
將bash執行后,退出程序,接著依靠crontab內的計劃再次啟動,進入挖礦模式。
0x3病毒清除
1)通過top命令查看cpu占用,此病毒占用還是很高的。
2)通過crontab -l 發現其啟動規律
刪除crontab中病毒啟動命令后,kill -9 virusPID即可。接著刪除病毒所在文件目錄。
0x4附錄:
解密完畢后,內存中會釋放出許多挖礦腳本,這里使用idaPython將其dump出來
腳本如下:
from idaapi import *
from idc import *
addr_start=0xxxxxxxx
addr_end=0xaaaaaa
len=addr_start-addr_end
buf=dbg_read_memory(addr,len);
fp = open("d:\dmp.txt", "wb");
fp.write(buf);
fp.close();
本文作者:中國電信安全幫攻防團隊張道全、王玉琪
轉載自:https://www.freebuf.com/articles/system/244013.html