1 發現問題
在騰訊雲上購買了一個centos7的服務器,平時用來練手,偶爾也安裝一些程序進行測試,上面安裝了mysql和redis,前段時間數據庫經常掉線,連不上,到騰訊雲后台進行查看,通過服務器實例的監控窗口,可以查看服務器的一些指標狀態,包括CPU、內存、流量等數據,本來看到CPU使用超過了90%,然后用kill -9 pid,或者重啟服務器,問題當時解決了,也就沒有太注意,結果第二天發現,CPU的利用率又變成了90%以上,然后再殺進程。
剛殺完就出現新的進程,CPU利用率還是90%以上,查看CPU的名稱,是kthrotlds,百度了一下,發現原來是挖礦程序。
2 嘗試解決問題
還是依靠百度,看看大家都怎么處理這個問題,有專業人士給出詳細的分析,參見https://www.360zhijia.com/anquan/447557.html,而且給出解決方法,參見https://github.com/MoreSecLab/DDG_MalWare_Clean_Tool,我看專業人士的分析,很多看不太懂,大致理解病毒是可以自我保護,你殺了進程,它通過定時任務還會啟動,你修改定時任務,它在自啟動程序里還會還原出定時任務,還會從網上下載病毒內容,內容寫的很詳實,我大概看了分析情況,然后按照給出的解決方法來嘗試清除,github上面給出了清除程序,我根據說明將busybox上傳到bin目錄下。上傳方式是將busybox放到一個固定的網絡位置,比如xxxx/resource/busybox,然后利用vnc方式登錄centos服務器,使用wget方式將busybox下載到centos服務器,同樣道理將其它文件也下載centos服務器,然后運行clear_kthrotlds.sh,運行之后,進程沒了,重啟服務器,結果問題還是存在,kthrotlds進程又出現了。
我換了方式,在騰訊雲后台設置服務器的安全組規則,將服務器的入站端口都關閉,只保留登陸用的22端口,將出站端口全部關閉,然后再殺進程,果然,cpu利用率變為小於5%,正常了,再通過top命令查看進程,kthrotlds進程沒有了,但出現了好幾個wget進程,這是要從網上來下載病毒程序。在騰訊雲后台將端口打開,kthrotlds馬上就回來了,說明,這個病毒沒有清除干凈,非常頑固。
問題沒有解決,好在上面沒有太重要的數據,還是重新安裝系統吧,一勞永逸。
3 一些教訓
我們碰到一些問題的時候,在解決問題的過程中,我們會學到很多東西。這次解決kthrolds挖礦病毒,雖然沒有成功清除,也學到了不少centos操作知識,以及挖礦病毒方面的知識。分析了一下網上的解決方案沒有奏效的原因,解決方案是3月初公布的,我的病毒發作是在4月底,可能是病毒有了變種或者更新,在沒有徹底掌握病毒的前因后果,不能針對性的清除病毒文件,總的來說還是對centos操作系統原理不夠熟悉,如果耐心的多看看病毒分析報告,然后再查查相關資料,徹底掌握病毒的原理,然后再慢慢清除,應該能夠解決問題,但花費的時間會非常多,最終放棄是因為精力沒有放到這上面,還想繼續使用服務器,也就是直接重裝系統來的方便。
亡羊補牢,出現問題了,我們還是要總結一些經驗教訓,杜絕以后再發生類似的情況。
3.1要勤備份
我這個服務器上面主要資料就是測試用的數據庫mysql,上面有一些數據,好在平時在局域網測試的時候,也有一些備份,可能數據不夠新,但還能用,當然如果是每天備份,可能會更好一些。而且,養成勤備份的習慣,我們可以應對一些突發狀況,能夠減少損失。這個問題,可以查查資料,看能不能寫個定時任務,讓數據庫每天在固定的時間進行備份,或者手工備份。
3.2 設置好防護措施
病毒一般都是通過服務器的某些端口進行攻擊,特別是中招之后,病毒會把這個服務器作為一個病毒源,去感染其它機器,所以做好防護工作,不僅是對自己的服務器負責,也是對他人的服務器負責。防護措施簡單的來說可以有兩個方面,一個是在后台,也就是騰訊雲的安全組設置,設置服務器的入站規則和出站規則,入站規則可以逐步對使用的端口進行開放,對自己了解的端口進行開放。
出站規則可以全部開放,不影響使用,如果中招了,就要對出站規則進行梳理調試。
再一個就是服務器的防火牆的設置,centos7的防火牆用的是firewall。
systemctl start firewalld #開啟
systemctl status firewalld #查看狀態
systemctl enable firewalld #開機自啟動
firewall-cmd --zone=public --add-port=80/tcp --permanent #永久開啟80端口
firewall-cmd --zone= public --remove-port=80/tcp –permanent #永久關閉80端口
firewall-cmd --zone=public --list-ports #查看所有打開的端口
firewall-cmd –reload #重載后生效
通過防火牆來設置開放某些端口,這樣能夠控制外部程序的非法訪問。
通過兩層控制端口的開放和關閉,默認關閉端口,只有在使用的時候,明確知道外部訪問服務器要通過哪個端口,我們再開放它,這樣操作比較安全。
3.3 謹慎安裝軟件
這次的挖礦病毒,主要的問題應該是出在redis上面,服務器上安裝了redis,但對軟件不太了解,為了能盡快使用,在網上直接找了點資料,把訪問權限全部放開,沒有深入的評估一下軟件的安全問題,挖礦病毒就是通過redis的漏洞,攻擊服務器,如果綁定ip,不對所有的網絡放開,可能會更安全些。還有就是沒有設置密碼,這兩點很關鍵。這兩個需要設置的內容,通過修改redis.conf實現。利用vi打開redis.conf。比如綁定本機訪問和設置訪問密碼123456,則修改兩個地方。
bind 127.0.0.1
requirepass 123456
修改這兩個地方之后,進行保存,重啟服務
cd /usr/local/bin
./redis-server /etc/redis.conf
這樣就完成redis訪問ip的控制和密碼設置,增強redis的防護。
4 結語
對於服務器來說,安全問題至關重要,很慶幸我的服務器上面沒有重要數據,但不能存在僥幸心理,在生產環境中,如果不注意防護,同樣存在安全問題。騰訊雲或者阿里雲這些雲服務器商,也會提供一些防護服務,可以有效防止病毒攻擊,不過,費用不菲,好像騰訊一個月要小4000,就像房子一樣,安全問題是服務器的剛需,在數據為王的時代,如果沒有安全保障,數據也就沒有了。
對於企業的服務器來說,還是要花錢買安全,做到萬無一失,對我們自己用的服務器,也是要在技術上謹慎處理,盡量減小服務器的安全隱患。