一.背景
测试环境有台服务器A,上面部署的有我们的一些应用,但是通过扫描,发现服务器A一直在ssh暴力破解其他服务器,现在要查到这个原因,并加以修改;
二.问题排查
通过漏洞扫描,初步得知,应该是有一个病毒被植入进来,并且在执行,不停的通过不同的密码ssh到不同的ip上面,由于ssh协议底层也是tcp协议,首先想到的就是找到所有的进程,并且排查可疑的进程
使用 ps -ef
啊!!!!这么多的进程,我要排查到什么时候
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
然后就发下这样一些奇怪的进程,如图所示
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
发现有几个文件,如下图
打开x文件,发现是一个for循环,是循环每一个ip地址,然后执行 ssh脚本,再次查看那个ip文件
发现里面确实罗列很多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~~~