十字符病毒,殺不死的小強(qiáng),一次云服務(wù)器淪陷實(shí)錄

一、現(xiàn)象

接到客戶的電話,說自己的云服務(wù)器被提供商禁止訪問了,原因是監(jiān)測到網(wǎng)絡(luò)流量暴滿,服務(wù)器不停的向外發(fā)包,在確認(rèn)客戶沒有業(yè)務(wù)量突增的情況下,初步判斷可能服務(wù)器遭受了流量攻&擊(DDOS),不過按照常理來說,客戶的業(yè)務(wù)系統(tǒng)就是一個(gè)小的web系統(tǒng),平時(shí)流量不大,影響力也一般,不至于遭受DDOs,帶著這些疑問,要到了客戶服務(wù)器的登錄方式,廢話少說,還是進(jìn)入系統(tǒng),一查究竟吧。點(diǎn)擊此處有驚喜

二、排查問題

下圖是登錄系統(tǒng)后,執(zhí)行top命令的輸出結(jié)果,綜合查看,系統(tǒng)整體負(fù)載并不高,但是帶寬占用很高,由于云服務(wù)器帶寬基本耗盡,ssh登錄服務(wù)器也非常慢,幾乎不能執(zhí)行任何操作。

此外,還發(fā)現(xiàn)第一個(gè)進(jìn)程占用很大cpu資源,就是名為apgffcztwi的進(jìn)程,這個(gè)進(jìn)程名剛好10個(gè)字符,這是什么進(jìn)程,名字相當(dāng)古怪,肯定有問題,從文件名看出,這不像一個(gè)正常的系統(tǒng)進(jìn)程。

既然有古怪,那就看看這個(gè)進(jìn)程是哪個(gè)程序啟動(dòng)的,操作方式見下圖:

簡單吧,通過剛才那個(gè)進(jìn)程的pid,然后去proc下面查看pid目錄下面對(duì)應(yīng)的exe文件,就能找到進(jìn)程對(duì)應(yīng)的啟動(dòng)程序,linux就是這么敞亮,一下子找到了這個(gè)程序位于/usr/bin目錄下。

既然找到了這個(gè)程序,那就詳細(xì)查看下這個(gè)程序的屬性信息吧,如下圖:

看到了嗎,第一個(gè)文件,文件的讀、寫和執(zhí)行屬性均沒有,相當(dāng)古怪。好吧,先記錄下來這個(gè)文件的位置和路徑。

下面繼續(xù)查看系統(tǒng)進(jìn)程信息,看看有無其它異常,通過ps命令又發(fā)現(xiàn)了新的線索,如下圖:

在/usr/bin目錄下有隱藏的.sshd文件,這個(gè)文件是正常系統(tǒng)所沒有的,又一個(gè)可疑線路,仍然記錄下來。

繼續(xù)查看系統(tǒng)進(jìn)程,可疑進(jìn)程還遠(yuǎn)遠(yuǎn)不止這些,這不,又發(fā)現(xiàn)了一個(gè)可疑進(jìn)程,如下圖:

/usr/bin/dpkgd/ps -ef這個(gè)進(jìn)程很明顯是個(gè)變種的病毒,因?yàn)槲覀冎付╬s命令肯定不會(huì)存在/usr/bin/dpkgd目錄下,既然說到/usr/bin/dpkgd目錄,那么就到這個(gè)目錄下去看個(gè)究竟,繼續(xù)上圖:

又發(fā)現(xiàn)一些隱藏的病毒文件了,比如lsof ps netstat ss,這些都是變種病毒文件,主要用來替換系統(tǒng)中的一些命令,當(dāng)看到netstat這個(gè)命令時(shí),基本明白了這個(gè)病毒的意圖了,它無非就是發(fā)流量包,造成網(wǎng)絡(luò)癱瘓,病毒替換了系統(tǒng)原有的包,換成自身經(jīng)過改寫的命令包,這樣,既隱藏了自己的行為,又不會(huì)對(duì)服務(wù)器造成太大影響,但是它的真正目的就是用咱們的機(jī)器做肉雞啊。真是用心良苦。

記錄這個(gè)線索,然后繼續(xù)通過dmesg命令查看系統(tǒng)信息,看看有沒有異常,上圖:

果然有異常信息,nf_conntrack是iptables里面的連接跟蹤模塊,它通過哈希表記錄已建立的連接,包括其他機(jī)器到本機(jī)、本機(jī)到其他機(jī)器、本機(jī)到本機(jī)的連接,出現(xiàn)dropping packet,就是由于服務(wù)器訪問量大,內(nèi)核netfilter模塊conntrack相關(guān)參數(shù)配置不合理,導(dǎo)致新連接被drop掉。查看nf_conntrack_max,看看設(shè)置多大:

[root@server~]# cat /proc/sys/net/netfilter/nf_conntrack_max2097152

nf_conntrack_max設(shè)置200多萬,已經(jīng)設(shè)置很大了,看來不是這個(gè)參數(shù)設(shè)置導(dǎo)致的。估計(jì)應(yīng)該是上面的一些異常進(jìn)程導(dǎo)致的。

三、開始干活

通過上面發(fā)現(xiàn)的幾個(gè)線索,為了能快速解決問題,先嘗試關(guān)閉或刪除進(jìn)程和文件,然后看看網(wǎng)絡(luò)是否能夠恢復(fù)正常,一不做二不休,開整吧!

第一步,先刪除/usr/bin/.sshd文件,然后關(guān)閉此文件對(duì)應(yīng)的進(jìn)程,看下面的圖:

這樣先刪除進(jìn)程對(duì)應(yīng)的文件,然后kill掉.sshd進(jìn)程,那么,進(jìn)程就無法重新啟動(dòng)了。

第二步,刪除/usr/bin/dpkgd目錄下所有的變種病毒文件,同時(shí)刪除/usr/bin/apgffcztwi文件,寫個(gè)腳本,批量刪除如下:

執(zhí)行刪除后,發(fā)現(xiàn)ps命令不好使了,可惡啊,不過,這點(diǎn)問題,難不倒俺,重新安裝一個(gè)ps命令即可,或者從別的機(jī)器拷貝一個(gè)ps命令過來,這里來個(gè)干脆的,重新安裝一個(gè),安裝過程看下圖:

大家能看到這個(gè)操作吧,先看看ps命令屬于按個(gè)rpm包,然后yum在線安裝一個(gè)新的包即可。

這個(gè)procps包安裝完成后,ps命令又可以使用了,現(xiàn)在通過ps命令查看到的系統(tǒng)信息,才是真實(shí)的系統(tǒng)啊,剛才那個(gè)ps命令是加殼的,屏蔽了很多系統(tǒng)中黑暗的勾當(dāng)。

還在興奮中,接著執(zhí)行了一個(gè)lsof命令,又發(fā)現(xiàn)新情況了:

剛剛刪除了/usr/bin/apgffcztwi文件,但是又自動(dòng)生成了新的文件,/usr/bin/fhmlrqtqvz,并且還有一個(gè)文件/usr/bin/fgqnvqzzck已經(jīng)被刪除了,但是進(jìn)程仍然存在,那個(gè)deleted就是文件的狀態(tài)。并且新生成的文件,仍然是10個(gè)字符。

看來是低估這個(gè)病毒程序了,繼續(xù)往下深究!

考慮到會(huì)自動(dòng)產(chǎn)生病毒文件,感覺應(yīng)該是linux下的crontab完成的工作,那么是不是病毒在crontab里面做了手腳,去看看就知道了。

切換到系統(tǒng)的/var/log/cron目錄下(此目錄記錄了linux下所有用戶的計(jì)劃任務(wù)信息,以crontab -u -e方式寫入的計(jì)劃任務(wù)都會(huì)在此目錄下生成文件),沒看到任何文件,看來不是用戶級(jí)別的crontab在作怪,那么再看看系統(tǒng)級(jí)別的crontab,就是/etc/crontab文件,貼圖如下:

看最后一行,發(fā)現(xiàn)了一個(gè)定時(shí)任務(wù),此任務(wù)每三分鐘執(zhí)行一次,任務(wù)對(duì)應(yīng)的是個(gè)kill.sh腳本,找到腳本就好辦了,看看這個(gè)腳本的內(nèi)容:

腳本很簡單,但是卻是個(gè)重大發(fā)現(xiàn),此腳本會(huì)自動(dòng)重啟網(wǎng)卡,然后執(zhí)行一個(gè)cp操作,將/lib/libkill.so文件復(fù)制一個(gè)/lib/libkill.so.6文件,然后執(zhí)行這個(gè)文件。這個(gè)文件是個(gè)二進(jìn)制的文件,無法查看內(nèi)容,猜想應(yīng)該就是自動(dòng)生成那個(gè)十個(gè)字符文件的病原體。

這里看到的病原體名稱是libkill.so,它的名稱不是固定的,常見的還有類似libudev.so、/lib/udev/udev等類似名稱,但是作用應(yīng)該都是一樣的。

到這里為止,思路基本清楚了,大概理了一下思路,這個(gè)×××執(zhí)行的原理應(yīng)該是這樣的:libkill.so是所有進(jìn)程的病原體,通過kill.sh腳本每隔3分鐘自動(dòng)檢測一次,如果發(fā)現(xiàn)病毒程序不存在了,就從病原體復(fù)制一份兒到/lib/libkill.so.6,病毒副本/lib/libkill.so.6執(zhí)行后,就會(huì)生成一個(gè)隨機(jī)命名(10個(gè)字符)的程序,放到/usr/bin/、/boot,/etc/init.d等目錄下。 同時(shí)還修改了自啟動(dòng)配置chkconfig –add xxx,修改自啟動(dòng)項(xiàng)/etc/rc.local等,讓×××程序開機(jī)自動(dòng)運(yùn)行。

這就是為什么無法殺掉病毒進(jìn)程的原因。

至此,病毒運(yùn)行的原理已經(jīng)清晰了,下面的工作就是清除病毒程序。

四、清除病毒

清除病毒也是需要技巧的,如果直接刪除kill.sh文件,你會(huì)發(fā)現(xiàn),這個(gè)文件又自動(dòng)生成了,這就是病毒程序在起作用。

那么怎么徹底清除呢,可通過下面方式實(shí)現(xiàn):

通過top或者lsof命令可以獲取那個(gè)自動(dòng)啟動(dòng)的×××進(jìn)程的pid為17161,然后執(zhí)行如下操作:

kill -STOP 17161

注意,這里-STOP選項(xiàng)的含義,不是關(guān)閉這個(gè)進(jìn)程,而是停止這個(gè)進(jìn)程。進(jìn)程停止執(zhí)行后,進(jìn)程仍然存在,這樣就繞過了病毒進(jìn)程就監(jiān)測。緊接著,再來點(diǎn)硬貨:

chattr +i /etc/crontab

這樣,先鎖定crontab文件,不讓任何進(jìn)程寫入數(shù)據(jù)。

下面就可以安靜的刪除之前的那些病毒文件了。

先刪除這個(gè)kill.sh文件,讓他不再定期執(zhí)行:

[root@server ~]# ll /etc/cron.hourly/kill.sh

接著刪除/usr/bin下和/etc/init.d下的所有可疑文件:

比如上圖中,第1、2、4、5、6都是可疑文件,隨便看一個(gè)文件:

可以看到,這個(gè)文件又指向了/root/xd文件,而這個(gè)xd文件肯定也是病毒文件,需要?jiǎng)h除。

最后,刪除病原體文件:

[root@server ~]# rm -rf /lib/libkill.so.6

[root@server ~]# rm -rf /lib/libkill.so

最最后,別忘了,還要清理現(xiàn)場,關(guān)閉一直處于停止?fàn)顟B(tài)的那個(gè)pid為17161的病毒進(jìn)程:

[root@server ~]# kill -9 17161

現(xiàn)在就可以直接執(zhí)行kill -9的操作了,因?yàn)椴≡w已經(jīng)被刪除,定時(shí)任務(wù)文件也被鎖定,定時(shí)執(zhí)行的腳本也被刪除,所以這個(gè)病毒再無回天之力了。

最后,再看下清除病毒后的系統(tǒng)狀態(tài):

整個(gè)世界清靜了。

但是,但是,好像我又發(fā)現(xiàn)了什么,是的,我發(fā)現(xiàn)了一個(gè)redis進(jìn)程在運(yùn)行。瞬間,明白了這個(gè)事件發(fā)生的原因了:估計(jì)是Redis未授權(quán)訪問漏洞導(dǎo)致的。

經(jīng)過驗(yàn)證,確實(shí)如此,服務(wù)器上的redis沒有密碼驗(yàn)證機(jī)制,可直接登錄,不過這不算什么,最悲催的是redis的6379端口默認(rèn)對(duì)全網(wǎng)開放。。。。。

這里科普下什么是十字叉病毒,它是一個(gè)或者多個(gè)十位隨機(jī)字母組成的木&馬病毒進(jìn)程,主要目的消耗服務(wù)各項(xiàng)資源。屬于一種掛馬,此病毒會(huì)自我保護(hù)和自我恢復(fù)。主要特征是會(huì)往外發(fā)送大量數(shù)據(jù)包。

最最最最后,引用別人一句話,安全無小事,防微杜漸是關(guān)鍵。做運(yùn)維的要牢記??!

彩蛋來啦

作為51CTO的特級(jí)講師和專家博主,我將多年來在新浪網(wǎng)和阿里云擔(dān)任系統(tǒng)架構(gòu)師的經(jīng)驗(yàn),融合進(jìn)51CTO訂閱專欄《輕松玩轉(zhuǎn)ELK海量可視化日志分析系統(tǒng)》

51CTO社區(qū)13周年慶期間(2018.8.15-2018.8.31)購買兩個(gè)專欄,還有自選圖書免費(fèi)領(lǐng)取>>>圖書挑選傳送門

能學(xué)到什么技能

1、結(jié)合企業(yè)真實(shí)項(xiàng)目需求,分析ELK架構(gòu)的應(yīng)用場景和價(jià)值?

2、動(dòng)手實(shí)戰(zhàn)構(gòu)建ELK 海量日志分析平臺(tái)?

3、利用Logstash實(shí)時(shí)采集不同項(xiàng)目系統(tǒng)的海量信息,對(duì)海量數(shù)據(jù)進(jìn)行過濾和解析,同時(shí)可以自定義匹配模式解析項(xiàng)目中的復(fù)雜結(jié)構(gòu)日志,并按日志類別和日期回滾輸出到ElasticSearch集群建立索引?

4、利用Kibana 實(shí)現(xiàn)海量日志的分析查詢、數(shù)據(jù)可視化及監(jiān)控預(yù)警 。

5、Logstash核心配置語法以及Filebeat組件的靈活使用

6、Logstash Input插件、Filter插件、Output插件應(yīng)用詳解

7、實(shí)戰(zhàn):Logstash 實(shí)現(xiàn)海量日志采集、過濾、解析、輸出

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Ubuntu的發(fā)音 Ubuntu,源于非洲祖魯人和科薩人的語言,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲de夢閱讀 100,604評(píng)論 9 468
  • 一、Python簡介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡介】: Python 是一個(gè)...
    _小老虎_閱讀 6,319評(píng)論 0 10
  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯(cuò)誤還是無法避免 以后資料會(huì)慢慢更新 大...
    數(shù)據(jù)革命閱讀 13,200評(píng)論 2 33
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,701評(píng)論 0 5
  • 可能大部分人生來就是情感細(xì)膩,尤其敏感,我一度為能夠察覺別人的細(xì)微情緒,知冷知熱感到自豪無比,最近有些惶恐 太過于...
    精靈人兒閱讀 316評(píng)論 0 0

友情鏈接更多精彩內(nèi)容