【博文推薦】生產環境-linux-網站被掛木馬攻防經歷
本博文出自51CTO博客vekergu博主,有任何問題請進入博主頁面互動討論! |
一、出現異常,排查原因
發現異常是通過遠端監控腳本發現訪問網站時斷時續,使用ssh工具連接會經常斷掉連接,無法開展工作。
使用其他服務器對另一個網卡ip進行ssh連接,可以登錄服務器,初步懷疑網卡異常或者流量異常。
分別使用ifstat、iftop、nethogs查看連接異常網卡流量信息(對幾個流量分析工具進行對比,各有千秋):
1、使用ifstat
wget http://distfiles.macports.org/ifstat/ifstat-1.1.tar.gz
cd ifstat-1.1 ./configuremake make install 都是老套路
ifstat -a 加入監控lo
2、使用iftop監控那個端口流量
p 可以顯示連接端口
3、使用nethogs監控每個進程流量
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#
二、查找真兇
通過上面分析,造成網站打不開的原因就是有進程大量發送數據包到某個ip(其實是阿里的服務器)的80端口,導致服務器網絡阻塞,但是通過以上的工具,發現此木馬相當的狡猾,無法發使用的那個進程。
在使用netstat、ss通過端口獲取木馬進程失敗后(后面才知道netstat、ps等命令已經被木馬感染)
可以使用top工具,此木馬在大量發包時肯定會造成資源的消耗
通過鎖定發現了兩個進程有大量的嫌疑:
通過ps命令找到進程執行的目錄:
- /usr/bin/sshupdate-bootsystem-insserv
- /tmp/GuiBger
通過持續觀察發現時有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
此時,相關的可以進程都找到了,通過測試,在網絡阻塞時,刪除sshupdate-bootsystem-insserv、GuiBger兩個進程后,網絡流量立即正常。而agent則懷疑是與黑客的通信進程,用于接收命令(瞎猜的)或者監控上面連個進程。
#p#
三、解決真兇
找到這3個進程并不意味結束,因為他們很可以是開機自啟動程序,所以要在找到他們的開機自起的配置文件,我通過一個腳本實現這個功能:
- #!/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
- 發現被限制刪除操作了
- chattr -i /usr/bin/sshupdate-bootsystem-insserv
- 取消影藏權限,然后再刪除,完成。
通過查看數據的表結構,發現木馬是從數據庫滲透進服務器的,因為沒有上線,方便開發測試在密碼強度上使用了弱密碼,所以被黑客破解了mysql的root賬戶密碼,在mysql注入了木馬,一步一步滲透到服務器。數據庫方面處理就不詳細介紹了:
- 檢查生產庫的表結構,刪除多余表。
- 然后備份所有生產庫。
- 停止mysql
- 刪除datadir目錄所有文件
- 重啟mysql
- 導入此前備份數據庫
#p#
四、徹底掃除尾巴與隱患
通過上面的步驟已經能解決服務器被黑客作為攻擊工具的問題了,但是系統是否還有木馬隱藏,是否安全還需要加個問號。
作者要介紹的方法是,使用linux系統的殺毒軟件,作者使用的是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 掃描內部檔案
-l 自動愈合受感染的對象
-t 自動刪除受感染的對象
-u 自動移動感染對象到隔離
作者掃描時:avgscan /
avg會列出可以文件:找出刪除即可,如果無法刪除,上文有提過,先查看隱藏權限
五、總結
最后總結下,之所以被黑客在linux服務器上掛馬,是因為方便開發上線產品,關閉了iptables,數據庫使用了弱密碼,這個教訓很深刻,所以使用iptables限制服務器的端口非常有必要,如果可能最好selinux開啟。當然定時更換各賬戶密碼也很重要!同時加強linux安全防護一定做到事前,在被黑客入侵后處理會更麻煩,知道系統安全加強到一定程度,黑客很難入侵系統。
因本人對安全方面涉及不深,此篇文章只是記實闡述我的處理經過,很多地方經驗欠缺,如有大神,不吝賜教
虛心學習才能進步,知識共享共同進步