記錄一次解決挖礦病毒的過程(程式:susupdate,networkservice)
昨天晚上突然收到阿里雲的警報提醒,伺服器又被攻擊,開始還沒當回事,晚上測試的時候發現伺服器變的異常卡頓。然後進入後臺檢視,發現CPU直接飆升到100%.........
1.找出病毒程式
我們使用top命令檢視程式執行情況:
(由於當天晚上已經解決,但是忘記截圖儲存,下面部分圖片來自於網路)
找到其中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
在我的伺服器下,其執行檔案均存放於/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下檢視定時程式:
這一步直接使用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是你所設定的密碼。