【博文推薦】生產(chǎn)環(huán)境-linux-網(wǎng)站被掛木馬攻防經(jīng)歷
本博文出自51CTO博客vekergu博主,有任何問題請進入博主頁面互動討論! |
一、出現(xiàn)異常,排查原因
發(fā)現(xiàn)異常是通過遠端監(jiān)控腳本發(fā)現(xiàn)訪問網(wǎng)站時斷時續(xù),使用ssh工具連接會經(jīng)常斷掉連接,無法開展工作。
使用其他服務器對另一個網(wǎng)卡ip進行ssh連接,可以登錄服務器,初步懷疑網(wǎng)卡異?;蛘吡髁慨惓!?/p>
分別使用ifstat、iftop、nethogs查看連接異常網(wǎng)卡流量信息(對幾個流量分析工具進行對比,各有千秋):
1、使用ifstat
wget http://distfiles.macports.org/ifstat/ifstat-1.1.tar.gz
cd ifstat-1.1 ./configuremake make install 都是老套路
ifstat -a 加入監(jiān)控lo
2、使用iftop監(jiān)控那個端口流量
p 可以顯示連接端口
3、使用nethogs監(jiān)控每個進程流量
yum換rpel源
wgethttp://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
yum install nethogs
nethogs eth0
效果展示ifstat:
可以看到服務器流量異常時,流量的變化情況。
效果展示iftop:
可以看到哪個PID進程導致流量過高
效果展示nethogs:
#p#
二、查找真兇
通過上面分析,造成網(wǎng)站打不開的原因就是有進程大量發(fā)送數(shù)據(jù)包到某個ip(其實是阿里的服務器)的80端口,導致服務器網(wǎng)絡阻塞,但是通過以上的工具,發(fā)現(xiàn)此木馬相當?shù)慕苹瑹o法發(fā)使用的那個進程。
在使用netstat、ss通過端口獲取木馬進程失敗后(后面才知道netstat、ps等命令已經(jīng)被木馬感染)
可以使用top工具,此木馬在大量發(fā)包時肯定會造成資源的消耗
通過鎖定發(fā)現(xiàn)了兩個進程有大量的嫌疑:
通過ps命令找到進程執(zhí)行的目錄:
- /usr/bin/sshupdate-bootsystem-insserv
- /tmp/GuiBger
通過持續(xù)觀察發(fā)現(xiàn)時有agent進程一閃而逝,在使用find / -name agent 后
- # ll /usr/bin/bsd-port/
- 總用量 1120
- -rwxr-xr-x. 1 root root 1135000 12月 25 11:20agent
- -rwxr-xr-x. 1 root root 4 12月 25 11:20 agent.conf
- -rw-r--r--. 1 root root 69 12月 25 11:50 conf.n
- -rw-r--r--. 1 root root 0 10月 9 19:36 getty
此時,相關的可以進程都找到了,通過測試,在網(wǎng)絡阻塞時,刪除sshupdate-bootsystem-insserv、GuiBger兩個進程后,網(wǎng)絡流量立即正常。而agent則懷疑是與黑客的通信進程,用于接收命令(瞎猜的)或者監(jiān)控上面連個進程。
#p#
三、解決真兇
找到這3個進程并不意味結束,因為他們很可以是開機自啟動程序,所以要在找到他們的開機自起的配置文件,我通過一個腳本實現(xiàn)這個功能:
- #!/bin/sh
- echo > /tmp/find_init.log
- function ergodic(){
- forfile in `ls $1`
- do
- if[ -d $1"/"$file ] #如果 file存在且是一個目錄則為真
- then
- ergodic$1"/"$file
- else
- localpath=$1"/"$file #得到文件的完整的目錄
- localname=$file #得到文件的名字
- #做自己的工作.
- echo $path
- rootkit_init=`cat$path | grep sshupdate | head -n 1`
- if[ -z $rootkit_init ];then
- echo "sed -i 's#$rootkit_init##g' $path">> /tmp/find_init.log
- fi
- fi
- done
- }
- INIT_PATH="/etc/init.d"
- ergodic $INIT_PATH
- cat /tmp/find_init.log
這個腳本功能很簡單,通過遍歷/etc/init.d目錄所有文件,使用grep搜索進程名關鍵詞,將含有這幾個進程的文件找出來。
結果如下:
- sed -i's#/usr/bin/sshupdate-bootsystem-insserv##g' /etc/init.d/DbSecurityMdt
- sed -i's#/usr/bin/sshupdate-bootsystem-insserv##g' /etc/init.d/insserv
還真有自啟動配置,迅速刪除之
在刪除這個木馬命令時會遇到無法刪除的問題,這個很簡單:
- lsattr /usr/bin/sshupdate-bootsystem-insserv
- 查看文件的隱藏權限
- -------i------e- sshupdate-bootsystem-insserv
- 發(fā)現(xiàn)被限制刪除操作了
- chattr -i /usr/bin/sshupdate-bootsystem-insserv
- 取消影藏權限,然后再刪除,完成。
通過查看數(shù)據(jù)的表結構,發(fā)現(xiàn)木馬是從數(shù)據(jù)庫滲透進服務器的,因為沒有上線,方便開發(fā)測試在密碼強度上使用了弱密碼,所以被黑客破解了mysql的root賬戶密碼,在mysql注入了木馬,一步一步滲透到服務器。數(shù)據(jù)庫方面處理就不詳細介紹了:
- 檢查生產(chǎn)庫的表結構,刪除多余表。
- 然后備份所有生產(chǎn)庫。
- 停止mysql
- 刪除datadir目錄所有文件
- 重啟mysql
- 導入此前備份數(shù)據(jù)庫
#p#
四、徹底掃除尾巴與隱患
通過上面的步驟已經(jīng)能解決服務器被黑客作為攻擊工具的問題了,但是系統(tǒng)是否還有木馬隱藏,是否安全還需要加個問號。
作者要介紹的方法是,使用linux系統(tǒng)的殺毒軟件,作者使用的是avg,還是蠻好用的,被木馬感染的netstat、ps等命令和影藏文件就是通過avg掃描出來的。
簡單介紹下avg的安裝和使用
avg殺毒軟件{
下載地址:http://free.avg.com/us-en/download-free-all-product
啟動 service avgd start
更新:avgupdate
掃描:avgscan 加“要掃描的目錄地址” 比如說sudo avgscan /etc
復制代碼
-a 掃描內(nèi)部檔案
-l 自動愈合受感染的對象
-t 自動刪除受感染的對象
-u 自動移動感染對象到隔離
作者掃描時:avgscan /
avg會列出可以文件:找出刪除即可,如果無法刪除,上文有提過,先查看隱藏權限
五、總結
最后總結下,之所以被黑客在linux服務器上掛馬,是因為方便開發(fā)上線產(chǎn)品,關閉了iptables,數(shù)據(jù)庫使用了弱密碼,這個教訓很深刻,所以使用iptables限制服務器的端口非常有必要,如果可能最好selinux開啟。當然定時更換各賬戶密碼也很重要!同時加強linux安全防護一定做到事前,在被黑客入侵后處理會更麻煩,知道系統(tǒng)安全加強到一定程度,黑客很難入侵系統(tǒng)。
因本人對安全方面涉及不深,此篇文章只是記實闡述我的處理經(jīng)過,很多地方經(jīng)驗欠缺,如有大神,不吝賜教
虛心學習才能進步,知識共享共同進步