一次服务器病毒处理问题排查

2023年 8月 21日 59.3k 0

一.背景

image.png

测试环境有台服务器A,上面部署的有我们的一些应用,但是通过扫描,发现服务器A一直在ssh暴力破解其他服务器,现在要查到这个原因,并加以修改;

二.问题排查

通过漏洞扫描,初步得知,应该是有一个病毒被植入进来,并且在执行,不停的通过不同的密码ssh到不同的ip上面,由于ssh协议底层也是tcp协议,首先想到的就是找到所有的进程,并且排查可疑的进程
使用 ps -ef

image.png
啊!!!!这么多的进程,我要排查到什么时候

745139198a50490b9cdfd7c8da6bc73e_th.jpg

2.换个思路

病毒也是进程,他要是ssh暴力破解远程的ip,肯定会进行通讯,ssh底层的协议也是tcp,因为默认ssh的端口号是22,那么我们只要监听到本地的网络的情况,使用命令

 netstat -anp |grep 22 |grep 'ESTABLISHED' 

这样也会返回很多命令,然后再次过滤我们自己的服务,比如一些java进程,mysql和redis的一些进程后,最后的命令

 netstat -anp |grep 22 |grep 'ESTABLISHED'  |grep -v 'java' |grep -v mysqld |grep -v redis

然后就发下这样一些奇怪的进程,如图所示
image.png

kill掉这些进程后,过几秒后,进程会再次启动,只是名字有所改变,并且通过查看这个进程的cpu使用情况,发现cpu的占用率也比较高,基本能达到30%

到这里,基本这个病毒进程就被查出来了

三.如何关闭这个进程

通过ps -p 进程id,只能看到这个进程的名字,看不到这个进程是从哪个文件启动的,执行的脚本是什么,那就使用/proc 命令

简介说明一下/proc的信息

1.  `/proc`目录下的子目录以数字命名,每个子目录对应一个运行中的进程。例如,`/proc/123`表示进程ID为123的进程。
2.  每个进程目录下都包含一组文件和子目录,提供了与该进程相关的信息。例如,`/proc/123/cmdline`文件包含了进程的命令行参数,`/proc/123/status`文件包含了进程的状态信息。
3.  `/proc`目录还包含一些特殊的文件和目录,提供了系统级别的信息。例如,`/proc/cpuinfo`文件包含了CPU的详细信息,`/proc/meminfo`文件包含了内存的使用情况。
4.  `/proc`目录下的信息是实时更新的,可以通过读取相应的文件来获取当前状态和统计数据。
5.  `/proc`目录下的文件和目录通常只能由特权用户(如root)访问。

通过访问`/proc`目录,你可以获取有关系统和进程的各种信息,这对于系统监控、性能调优和故障排除非常有用。

请注意,对`/proc`目录下的文件进行读取操作时需要小心,确保你有正确的权限,并且了解如何解释和使用这些信息。

所以就进入这个程序所在的/proc的路径

 /proc/16335/cwd

发现有几个文件,如下图

image.png

打开x文件,发现是一个for循环,是循环每一个ip地址,然后执行 ssh脚本,再次查看那个ip文件

image.png
发现里面确实罗列很多ip用来攻击,

到这个时候,基本已经找到这个病毒了

接下来就行执行脚本

#! /bin/bash
 
clear_file(){
        if [ ! -d $1 ];then
                echo "$(data) [INFO] $1 isn't a directory"
                exit 127
        fi

        for file in `find ${1} -type f -name '*systemd-private*'`;do
                if [ ! -n $file ];then
                        echo "no file"
                else
                        clearfile=`rm -rf $file`
                        if [ $? -eq 0 ]; then
                                echo "$file clear success"
                        fi
                fi
        done
}

clear_dir(){
        for file in `find ${1} -name '*systemd-tmpfiles-cleanup*' -o -name '*timers.target.wants*'`;do
                clean=`rm -rf $file`
        if [ $? -eq 0 ]; then
            echo "$file clear success"
        fi
    done
}

clear_file /
clear_dir /root
clear_dir /home

varprocname=`ps ax | awk '{print $5}'`
for procname in $varprocname;do
        if [[ "$procname" =~ ^[0-9a-zA-Z]{7}$ || "$procname" = "tracepath" ]]; then
                var2=`ps -ef |grep -w $procname|grep -v grep|wc -l`
                if [ $var2 -le 0 ];then
                        echo "NULL Process"
                else
                        var3=`ps -ef | grep $procname | grep -v grep | awk '{print $2}'`
                        kill=`kill -9 $var3 && echo  kill $var3 success`
                        echo $kill
                fi
        fi
done

进行清理,清理之后重启一次服务器

四.重启后验证

服务重启后,再次执行脚本

    netstat -anp |grep 22 |grep 'ESTABLISHED'  |grep -v 'java' |grep -v mysqld |grep -v redis

未发现病毒,持续一段时间内的观察后,确实未再次发现ssh暴力破解问题

但是这个病毒是从哪里植入进来的,暂时还没找到原因,有待进一步查找

goog luck boy~~~

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论