最近百度X-Team捕獲到一個利用SSH弱口令漏洞構建僵尸網絡的蠕蟲,該蠕蟲具有自動掃描、自動傳播、并依托公共社交網絡服務作為獲取Command and Control(后文簡稱C&C)控制信息等特點;蠕蟲作者為保證控制方式的獨享性,上線地址的變化性以及隱蔽性做了大量工作,C&C上線地址能夠做到每天一換。根據其上線特點,我們將此蠕蟲命名為:TruSSH Worm。目前此蠕蟲已經在全世界范圍內大規模傳播。鑒于此蠕蟲的編寫和控制方式有些特殊,特拿出來和大家分享。
所有的蠕蟲主體執行文件均通過upx殼進行壓縮,但通過破壞upx header等方式防止upx –d的自動化脫殼,這在linux類的惡意樣本中并不多見。
手工脫殼后繼續分析,整個ELF文件靜態鏈接,并且被stripped。蠕蟲支持在i686、mips、arm架構的linux上運行,能夠適應在各種小型被裁剪過的路由器上進行傳播。通過對脫殼后的bin中關鍵字符串進行查看,發現其集成了openssl、libssh2、libevent, libcurl等庫,其中openssl的庫給出了版本號以及發布時間等信息,讓我們得知此惡意蠕蟲屬于被近期投放,要晚于2015年6月12日。X-Team在捕獲改樣本時,VT上并沒有發現有過歷史提交。
蠕蟲運行成功后,會開啟大量的線程,隨機選擇生成一個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等功能,這些功能的用途在后面會看到。
蠕蟲利用了公共社交網絡平臺進行控制,并采用兩階段獲取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地址,通過請求該地址,得到實際需要執行的命令。
我們根據之前提到的9000端口特征,8月底的時候在全網范圍內進行了一次排查,結果如下:全球共感染主機23367臺,其中中國是受影響最多的國家 達到7000+
在分析代碼的過程中,我們發現了一些有趣的信息,蠕蟲的編寫者有使用truecrypt的習慣,編譯在bin中的路徑字符串泄露了這一點。
從連續監控twitter等社交網絡數據來看,原作者大約是在2015年7月17 到2015年7月23 日左右放出了控制信息,之后未有新控制信息放出。