破殼而出:全新物聯網僵尸網絡AuthBot浮出水面

發布時間 2023-08-07

啟明星辰與廣州大學網安學院發現了一個新的物聯網僵尸網絡,并將其命名為AuthBot。本文通過對該僵尸網絡進行樣本技術分析,全面介紹了其執行流程、通信協議、控制命令等細節,以作為各行業及相關企業制定網絡安全策略的參考。


2023年7月底,啟明星辰在參與國家重點研發計劃項目“大規模異構物聯網威脅可控捕獲與分析技術(2022YFB3104100)”的研究過程中,發現了一個新的物聯網僵尸網絡家族。在VirusTotal上,大部分殺毒引擎將其識別為Mirai或者Gafgyt。經過詳細分析,確認完全沒有復用Mirai、Gafgyt的任何源代碼。


鑒于樣本包含字符串AuthBot,且會加密作為上線數據發送給C2,我們將其命名為AuthBot。AuthBot設計了自定義加密算法用于加密和C2的通信。目前,其功能并不完善,只實現了心跳等有限功能,并不包含DDoS攻擊等功能。


有理由相信,我們正在見證一個全新物聯網僵尸網絡的“破殼而出”。



樣本技術分析



目前AuthBot只支持amd64,暫時沒發現其它CPU架構的樣本。AuthBot采用UPX加殼,并篡改UPX幻數來對抗脫殼。將UPX幻數“YTS\x99”重新改為“UPX!”,即可成功脫殼。



1、執行流程


和大多數僵尸網絡不同,AuthBot會首先連接C2,連接失敗退出進程。在和C2建立通信之后,才執行其它操作,如修改自身進程名等。這是因為它硬編碼的加密字符串需要用到C2返回的密鑰來解密。AuthBot的C2地址直接使用二進制進行賦值,而非字符串。



在和C2服務器建立通信之后,執行啟動流程:解密字符串資源、發送CPU架構名稱到C2服務器、進程名偽裝、自拷貝至/usr/bin/BoxBusy。


隨后進入循環,執行select函數,接收執行C2下發的指令。需要指出的是,在循環函數里,AuthBot會獲取父進程所打開的文件名稱。如果所打開的文件名稱包含“/proc/”或者“socket:[”,則把父進程名稱加密發送給C2,同時嘗試kill父進程。這是在嘗試檢測調試器或者沙箱沙箱環境特征。


2、通信協議


AuthBot和C2的通信協議并不復雜,只需要4輪即可與C2建立通信。AuthBot和C2的通信數據經過兩層加密,外層是異或,內層采用其自己實現的數學運算方式加密,具體加、解密算法的偽代碼分別如下:


以下是運行樣本實際流量:



Step1:Bot→C2


AuthBot生成8到15字節的隨機字符串作為XOR密鑰,用于后續通信加密。接著異或加密字符串"AuthBot ",把XOR密鑰字符串和密文拼接起來,并使用自定義算法加密它們,發送至C2。



以上述截圖里的數據為例,“a78f928fa5a799979d9daa908e8f9b28421a160d431e256f”經過內層算法解密后是“7763666375776B696F6F786462636D203616120B37181F49”。



Step2:C2→Bot


C2返回17字節加密數據,經過異或和自定義算法解密后為“Accepted GoAwayMr”。前8字節“Accepted”表明連接C2成功, “GoAwayMr”同樣是密鑰,用于解密自身加密字符串。



以上述截圖里的數據為例,“12ece9f2d5d3faf94704e501c5eec604c1”經過異或解密之后,是“658f8f91a0a49190286b9d65a78dab73a2”。



“658f8f91a0a49190286b9d65a78dab73a2”經過自定義算法解密后正是“Accepted GoAwayMr”。自定義算法解密如下:



Step3:Bot→C2


AuthBot拼接CPU架構字符串“x86_64”和“yarn”,經過兩層加密發送給C2。



Step4:Bot→C2


AuthBot向C2發送自身進程的一些權限信息等,如是否對/usr/bin/目錄有寫權限,是否為root權限運行等。權限數據只經過了XOR加密。XOR解密如下:



其中首字節為是硬編碼的\x04,第二字節\x00表示是root權限運行,第三字節是硬編碼的\x01,第4字節\x00表示對/usr/bin/目錄有寫權限。其余8字節是\x00。


至此,AuthBot上線成功,開始等待執行C2下發的指令。目前為止,只收到過C2返回的兩字節心跳數據\x76\x63,異或解密后是\x01\x00。心跳數據和控制命令數據都是只有一層XOR異或加密。


3、控制命令


目前,AuthBot只支持包括心跳在內的3類控制命令。


1、IP地址下發:當C2返回的數據長度大于10字節,將偏移1起始的數據解析為ip:port形式的字符串并保存,至多保存4個。該命令目前只用來測試樣本對IP的解析是否正確,后續很可能用于解析DDoS攻擊目標或回連C2服務器。


2、心跳:當C2返回的數據長度小于等于10字節并且首字節為\x01,則認定是心跳包,直接返回C2相同的心跳包數據。


3、刪除IP地址:當C2返回的數據長度小于等于10字節并且首字節為\x00,刪除對應已保存的IP地址。


總結


總的來看,AuthBot的功能還很不完善,不包含DDoS攻擊功能,也沒有下載、shell等其它功能。而且對于非心跳包的另外兩類控制命令,很難理解攻擊者的真實意圖。


不過還是有一些亮點,比如新穎的兩次加密,尤其是通過C2返回的密鑰來解密自身加密資源。它的代碼里也看不出常見僵尸網絡對Mirai、Gafgyt代碼的復用。


因此,我們認為AuthBot是全新的物聯網僵尸網絡,但還只是剛剛誕生的初級階段。我們會持續監控AuthBot新的演變發展。


IOC


C2:

190[.]10[.]8[.]179:8008


MD5:

7fd6f1ffceb010e4607198d1d4a527c3