伺服器挖礦病毒的解決方案

coderxz發表於2021-03-11

記錄一次解決挖礦病毒的過程(程式:susupdate,networkservice)

昨天晚上突然收到阿里雲的警報提醒,伺服器又被攻擊,開始還沒當回事,晚上測試的時候發現伺服器變的異常卡頓。然後進入後臺檢視,發現CPU直接飆升到100%.........

service011

1.找出病毒程式

我們使用top命令檢視程式執行情況:

(由於當天晚上已經解決,但是忘記截圖儲存,下面部分圖片來自於網路)

se02se0

找到其中CPU佔有率較高的程式,可能不同的環境對應的程式名稱不同。

  • 分析病毒的執行指令碼
# update.sh檔案:
# 由Redis侵入,將本機密碼set到redis中,dump.rdb檔案修改為authorized_keys,然後把檔案的目錄設定到/root/.ssh下,保證其可以使用 SSH 登入到伺服器。
config.json (挖礦配置)、
sysupdate (XMR 挖礦軟體)、
update.sh (病毒主指令碼)、
networkservice(scanner掃描併入侵其他的主機)、
sysguard(watchdog 用於監控並保證病毒的正常執行以及更新)

2.根據程式號找到執行檔案的位置

ls -l proc/{程式號}/exe

es03

在我的伺服器下,其執行檔案均存放於/etc目錄下的。

3.刪除病毒程式

kill -9 程式號

4.刪除病毒檔案

在步驟2中,我們已經找到了病毒檔案所在的地方,但是如果直接使用rm -rm 可能顯示拒絕操作,沒有許可權。

4.1 檔案無法正常刪除如何解決?

  • 問題背景

有時候需要修改檔案的許可權,但是即使在root下使用chmod命令也不一定能成功更改,有時也會遇到Operation not permitted的問題。

一般,Linux下root使用者的許可權是最大 (Linux下UID數值越小的使用者,許可權越大,可以看到最小值為0,即root使用者)

但是在使用chmod改變檔案許可權的時候,即使在root使用者下,也會遇到operation not permitted的問題。

其實chmod的底層實現是chattr命令,用此命的功能更為強大,甚至可以鎖定檔案,即使root使用者也操作不了此檔案。

  • 解決辦法

lsattr可用來檢視檔案的屬性:

lsattr filename

如果檔案屬性中有i與a,或者其中一個,使用chattr命令去掉:

chattr -ia filename

對病毒檔案進行刪除:

chattr -i sysupdate
rm -f sysupdate 
chattr -i sysupdates
rm -f sysupdates
chattr -i networkservice
rm -f networkservice
chattr -i sysguard
rm -f sysguard
chattr -i update.sh
rm -f update.sh
chattr -i config.json
rm -f config.json

5.刪除定時任務(重要!!)

這一步一定要做,我第一次刪除後忘記定時任務因為許可權問題,沒刪掉,然後隔一段時間又重啟了。

crontab -l   檢視定時任務
crontab -r   刪除所有定時任務

也可以直接進入目錄/var/spool/cron下檢視定時程式:

se04

這一步直接使用rm -f或者corntab -r可能顯示:cannot remove ‘root’: Permission denied

由於此時我已經是root使用者,然後使用ll命令檢視該定時人物的許可權,果然無法修改。

  • 嘗試使用chomd修改許可權

首先使用chattr -ia filename命令將檔案的許可權去掉;

直接使用chmod 777 filename,修改完畢後已經得到了許可權,但是刪除仍然報錯。

  • 需要對/var/spool/下的檔案修改許可權
# 清除crontab
cd /var/spool/
chattr -i cron/
crontab -r

6.修改/root/.ssh/authorized_keys檔案

攻擊者很聰明,修改了我的authorized_keys檔案,可以直接ssh到我的主機,給自己留了後門。

cd /root/.ssh/
chattr -ia authorized_keys
rm -rf authorized_keys

7.修復SElinux和wget、curl指令

感覺真心無語了,把伺服器的wget和curl指令給改了,改為了wge和cur。

  • 修改wget和curl
mv /bin/wge /bin/wget
mv /bin/cur /bin/curl
mv /usr/bin/wge /usr/bin/wget
mv /usr/bin/cur /usr/bin/curl
  • 修復SELinux

病毒指令碼首先就會嘗試關閉SELinux子系統,我們可以使用getenforce命令檢視SELinux狀態。

如果你想要重新開啟,可以修改/etc/selinux/config檔案將SELINUX=disabled改為SELINUX=enforcing,然後重新啟動伺服器。

8.被攻擊的原因

病毒的問題是得到了解決,但是具體是啥東西造成的呢?

居然是Redis!!!

在昨天安裝了redis服務後,忘記開啟登入密碼,唉。

大概原理分析:

1.redis沒有做任何安全措施,直接暴露在公網,任何redis客戶端都可以直接連線。

2.被惡意的連線連線上後,在他的機器上生成ssh祕鑰,然後set到redis中,最後使用redis的config命令,將預設RDB方式出來的dump.rdb檔案修改為authorized_keys,然後把檔案的目錄設定到/root/.ssh下。

3.這樣一來,就非常危險了,攻擊者可以直接ssh到你的linux主機,接下來,root賬戶,為所欲為。被挖礦也就不稀奇了。

  • 設定redis的登入密碼
vi /usr/local/redis/bin/redis.conf

將requirepass yourpassword前的註釋去掉,其中yourpassword是你所設定的密碼。

相關文章