近期,服务器异常,通过htop或top命令查看CPU占用前几的进程,发现root用户的-bash进程把CPU一半的核占满,而另一台服务器上x用户(被新创建的用户)和一个普通用户CPU占用也异常。
kill -9 进程号杀掉进程后立马又启动了新进程,ll /proc/进程号查看PID目录,可以看到exe指向了一个被删除了的-bash进程(/usr/bin/-bash),使用 netstat -anp|grep ESTABLISHED 查看State为ESTABLISHED的网络连接,发现有异常外网连接,这应该就是-bash病毒木马了。

处理思路
找出与木马相关的所有关联文件并删掉:!!注意删除文件前一定要谨慎,逐一通过文件内容和创建时间来综合判断是否为木马关联文件。
cat /etc/passwd查看是否有异常用户和组,对于木马创建的新用户可以直接删除,逐一检查每个用户目录(包括root)文件是否异常,重点是~/.bash_profile、~/.bashrc和~/.ssh/authorized_keys。木马能不停启动,可能会篡改命令,并且有守护进程,重点检查
定时任务、启动项和服务等,排查/bin、/sbin、/etc/cron*/、/var/spool/cron*/、/etc/init.d/、/etc/rc*/、/etc/system*/、/lib/system*/、/run/system*/目录下是否有异常文件或最近修改(ls -lt | head)。当查到木马脚本后,总结出脚本中的一些
关键文件名称,如mcrond、bcrond、crondr、bprofr、ntpdate、entpdate、lntpdate、initdr、binitd、minitd、msysde、msysdl、bsysde、bsysdl、sysdr、dbused、do-dear、pwndns、pwnrig并用这些关键词作为特征搜索上述目录文件。
下面是整个查杀过程,以下所有操作都在root权限下进行,一定谨慎删除文件,文末会附上我制作的批量查杀脚本:
进程分析
1 | # 分析前几个cpu占用高的进程 |
定时任务分析
1 | # 查看定时任务 |

这里发现了异常目录/var/tmp/.systemd/和域名pwndns.pw,在所有定时任务文件夹/etc/cron*/和/var/spool/cron*/查一遍最近修改的文件(目录下有很多子文件夹,如cron.d,cron.daily,cron.hourly,cron.weekly,cron.monthly等,很多都会有),可以使用ls -lt 文件名 、cat 文件名查看文件时间和内容是否异常,然后就发现了下面异常文件。
这里发现了异常文件ntpdate和pwnrig,可以看到文件修改时间为9月28日 3点,后面只要查到文件在这个时间附近修改过,就基本是木马文件。查看文件内容:
从文件里又提取了关键词crondr、mcrond、bcrond等,发现该脚本已经污染了/bin目录,也发现了木马会使用curl和wget从服务器不停请求最新脚本,-bash进程启动后,原二进制文件就会被删除,所以不能从进程路径溯源。
用关键词重新搜索一遍定时任务
1 | grep -R -E 'mcrond|bcrond|crondr|bprofr|ntpdate|entpdate|lntpdate|initdr|binitd|minitd|msysde|msysdl|bsysde|bsysdl|sysdr|xmr|pwndns|pwnrig|do-dear|update\.sh|root\.sh|\.systemd|\.update' /etc/cron* /var/spool/cron* 2>/dev/null |
限制网络连接
由于木马会不断通过网络请求下载最新脚本,所以得限制网络连接:
1 | # 暂时修改掉curl和wget |

排查/bin /sbin
1 | cd /bin |
/bin和/sbin目录下不少被篡改的命令,并且被添加了-ai保护属性,常规的rm -rf 文件名删除不掉,可以chattr -ai 文件名减除保护属性后删除。
1 | #查看文件保护属性 |

如果还删除不掉,可以使用inode节点的方式删除:
1 | ls -i 文件名 |
排除异常用户和home目录文件
1 | # 检查异常组和用户 |
发现很多用户目录下和~/.bash_profile、~/.bashrc和~/.ssh/authorized_keys被篡改
检查 SSH 授权密钥有无异常密钥
1 | grep -R 'ssh-rsa' /root/.ssh/authorized_keys 2>/dev/null |
启动项和服务分析
1 | systemctl list-units --type=service |

发现了系统级服务,结合上面的各种关键字,干脆在 /usr/lib/systemd/、/etc/rc.d/、/etc/systemd/、 /lib/systemd/文件夹里搜索一遍吧,搜索到有问题的再逐一核对删除:
1 | grep -R -E 'mcrond|bcrond|crondr|bprofr|ntpdate|entpdate|lntpdate|initdr|binitd|minitd|msysde|msysdl|bsysde|bsysdl|sysdr|xmr|pwndns|pwnrig|do-dear|update\.sh|root\.sh' /etc/rc*/ /etc/init*/ /lib/system*/ /etc/system*/ 2>/dev/null |
检查系统日志
1 | grep -R -E 'mcrond|bcrond|crondr|bprofr|ntpdate|entpdate|lntpdate|initdr|binitd|minitd|msysde|msysdl|bsysde|bsysdl|sysdr|xmr|pwndns|pwnrig|do-dear|update\.sh|root\.sh' /var/log/ 2>/dev/null |

找到来源了,xmrminer从某98.12服务器过来,可以确定这是挖矿木马病毒,并通过日志确定了可疑用户x以及/tmp/.pwn、/tmp/systemd-private*、/var/tmp/.update、/var/tmp/.system*、/var/tmp/systemd-private*等目录。
编写批量查杀脚本
基于以上分析,基本确定了病毒传播方式和一些关联文件和目录,编写批量查杀脚本scan_bash.sh:
1 | # Linux server mining Trojan virus detection |
创建scan_bash.sh,添加权限并批量扫描:
1 | # 创建scan_bash.sh文件并编辑 |
!!一定记得扫描出的可疑文件请逐一核对确认再删除,以免删错影响系统运行。
到这一步,kill -9 进程号杀掉相关进程,观察2天没有问题,查杀结束,记得恢复curl和wget~~~~
后续防护
升级SSH到最新版本
openssh-9.9p1,https://www.openssh.com/portable.html;禁用默认
22端口,禁用Root远程登录,禁用密码登录,改用密钥登录;服务器防火墙禁用
不常用的端口;如果有docker和数据库等服务,一定要提升安全等级,不要使用默认端口,启用
docker持久化,数据库绑定localhost防止非本机数据库连接;
最后更新: 2024年10月09日 17:50:38
本文链接: https://sanshui.findn.cn/post/c2344f26.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可,转载请注明出处!