記錄一次解決挖礦病毒的過程(進程: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是你所設置的密碼。