記一次服務器被 kdevtmpfsi 變礦機

昨天有臺測試服務器被告知服務異常,進服務器以後才發現是由於docker 異常退出了。web

將docker 運行起來以後,發現有個不認識的進程 kdevtmpfsi 佔用CPU 異常的多,Google 一下才知道,好傢伙,服務器被當成礦機了。docker

直接 kill 並不能將其結束掉,它還有守護進程及可能存在的定時任務。服務器

1. 首先查找文件

$ find / -name kinsing      // 守護進程
$ find / -name kdevtmpfsi   // 挖礦進程

若是Redis 是運行在本地,上面兩個文件一般是在/tmp/目錄下。測試

若是Redis 是以容器的方式運行,則一般是在/var/lib/docker/overlay2/(容器的 /tmp/ 目錄)下。spa

2. 將其刪除

$ rm -f kinsing kdevtmpfsi

這裏被感染的容器也不必定是Redis ,好比個人則是PHP,因此須要進入到被感染的容器內才能找到。日誌

3. 幹掉進程

$ ps -aux | grep kinsing
$ ps -aux | grep kdevtmpfsi
$ kill -9 pid

4. 查看定時任務

$ crontab -l

存在定時任務的不必定是當前用戶,能夠使用如下命令查找其餘用戶是否存在任務:code

$ for user in $(cut -f1 -d: /etc/passwd); do crontab -u $user -l; done

定時任務還可能存在於如下地方:blog

  1. /etc/crontab
  2. /var/spool/cron/
  3. /var/spool/cron/crontabs/

至此就完成了病毒的清理,網上千篇一概的全是這種處理方式,但這個方式並不適合我,我嘗試了不少次,不管我怎麼刪除,病毒仍是存在。進程

由於病毒是依賴於容器生存的,因而我便將容器中止掉,經過docker logs 實時查看容器最後10條日誌:crontab

docker logs -f -t --tail 10 <容器id/容器名稱>

十分鐘以後,總算讓我逮到了:

雖然目擊了全過程,但這時我依然無能爲力,由於我不知道上面那些命令是如何自動啓動的。

嘗試了各類方式,但都無解,十分鐘以後病毒仍是會出來,最終我只能把這個被感染的容器給棄用了,從新起一個新的容器。

總結

kdevtmpfsi病毒的產生,一般是由於Redis 對外開放 6379端口,且沒設置密碼或者密碼過於簡單致使。

因此服務器必定要設置好防火牆,像33066379 這種經常使用端口,儘可能減小對外開放的機會。

參考連接

相關文章
相關標籤/搜索