作者:
百度安全攻防實驗室
·
2015/09/15 15:00
最近百度X-Team捕獲到一個利用SSH弱口令漏洞構建殭屍網路的蠕蟲,該蠕蟲具有自動掃描、自動傳播、並依託公共社交網路服務作為獲取Command and Control(後文簡稱C&C)控制資訊等特點;蠕蟲作者為保證控制方式的獨享性,上線地址的變化性以及隱蔽性做了大量工作,C&C上線地址能夠做到每天一換。根據其上線特點,我們將此蠕蟲命名為:TruSSH Worm。目前此蠕蟲已經在全世界範圍內大規模傳播。鑑於此蠕蟲的編寫和控制方式有些特殊,特拿出來和大家分享。
0x01 蠕蟲主體特徵
所有的蠕蟲主體執行檔案均透過upx殼進行壓縮,但透過破壞upx header等方式防止upx –d的自動化脫殼,這在linux類的惡意樣本中並不多見。

手工脫殼後繼續分析,整個ELF檔案靜態連結,並且被stripped。蠕蟲支援在i686、mips、arm架構的linux上執行,能夠適應在各種小型被裁剪過的路由器上進行傳播。透過對脫殼後的bin中關鍵字串進行檢視,發現其整合了openssl、libssh2、libevent, libcurl等庫,其中openssl的庫給出了版本號以及釋出時間等資訊,讓我們得知此惡意蠕蟲屬於被近期投放,要晚於2015年6月12日。X-Team在捕獲改樣本時,VT上並沒有發現有過歷史提交。

0x02 蠕蟲傳播方式
蠕蟲執行成功後,會開啟大量的執行緒,隨機選擇生成一個B段IP段,掃描其中22埠的開放情況,成功連線的IP地址儲存到名為list2列表中,當一次掃描完成後,會讀取list2資料,並嘗試使用事先設定好的弱口令集進行破解,該蠕蟲僅僅依靠三個弱口令root:root, admin:admin 以及ubnt:ubnt三個使用者名稱密碼進行破解。其中ubnt屬於近期被DDOS集團重點關注airos系統的SSH預設賬戶名密碼。透過zoomeye和shodan,我們也可以看到全網的此類裝置的量級是非常可觀的。
生成IP地址列表

一旦破解成功,會將該IP地址的資訊儲存到good2檔案中,並將當前目錄下的所有.mod檔案全部複製到遠端伺服器的/tmp/.xs目錄下,然後設定可執行屬性並依次執行這些檔案。

為了防止目標環境沒有wget或者tftp等命令,這裡蠕蟲採用了一個比較tricky的方式方法,直接在server端使用cat > xxxx.mod的方式傳送檔案,下圖是我們抓取到的命令執行內容:

蠕蟲同時會監聽9000和1337埠接受外界請求,其中9000埠是一個非常重要的感染標誌。蠕蟲週期性的會檢查good2中機器的存活情況,確保感染率,在對SSH進行爆破前,蠕蟲先會向9000埠傳送post 請求時,如果其響應“{status: 1}” 則表示該機屬於存活狀態,跳過SSH密碼嘗試過程,如下所示:

9000埠還提供update和download等功能,這些功能的用途在後面會看到。
0x03 蠕蟲的上線方式
蠕蟲利用了公共社交網路平臺進行控制,並採用兩階段獲取C&C IP的上線方式,這是我們之前捕獲的蠕蟲中沒有發現過的。該蠕蟲透過www.twitter.com、www.reddit.com、my.mail.ru等網站上搜尋特定的資訊,解析頁面內容來找到第一階段控制IP資訊,來看下這個流程是怎麼進行的:

透過在twitter上搜尋關鍵字獲取一階段IP地址,其他連線www.mail.ru以及www.reddit.com的情況類似。在這些社交平臺上搜尋的關鍵字,蠕蟲透過一定的演算法來進行得到,有點fastflux的感覺。準備連線前,蠕蟲會根據內建的演算法從www.google.com返回Server Response中的Date域中提取出來的值作為變數生成隨機數,再使用隨機數從預先定義好的詞表字典中來選擇兩個對應的詞,然後加上隨機數拼接成一個合適的url,如下所示:


用來構造請求的詞表:

下圖是逆向出來隨機數生成演算法的C實現

蠕蟲在收到Response code 200的返回後,在回覆的頁面中嘗試查詢base64 特徵的字串,並結合蠕蟲內建的KEY,使用openssl中橢圓曲線演算法(ECDSA)來驗證資料的有效性。此時蠕蟲會得到一個二進位制檔案,該檔案格式如下所示。

第一部分紅線標註的即為上線IP地址,蠕蟲此時會連線IP的9000埠,獲取實際的上線地址,並連線到該地址,請求名為http://IP:9000/srv_report&ver=0的URL, 並從這個url中得到實際的C&C地址,下圖是我們捕獲到的srv_report,格式如下所示:

其組成也是分成三部分,第一部分為最終的上線URL,後緊跟著一個04開頭的值,然後是4位的時間戳。最後是一個32位的簽名校驗。在校驗URL的有效性後,蠕蟲會連線該URL地址,透過請求該地址,得到實際需要執行的命令。



0x04 感染範圍
我們根據之前提到的9000埠特徵,8月底的時候在全網範圍內進行了一次排查,結果如下:全球共感染主機23367臺,其中中國是受影響最多的國家 達到7000+

0x05 其他
在分析程式碼的過程中,我們發現了一些有趣的資訊,蠕蟲的編寫者有使用truecrypt的習慣,編譯在bin中的路徑字串洩露了這一點。

從連續監控twitter等社交網路資料來看,原作者大約是在2015年7月17 到2015年7月23 日左右放出了控制資訊,之後未有新控制資訊放出。
本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!