DuckSoft's Miscellanies Ex nihilo ad astra.

Linux 服务器上一次 DDoS 病毒的杀毒纪实

文/DuckSoft @ Wed, 12 Dec 2018 21:24:45 +0800

起因

前段时间用户反映称 90 服务器上的网页访问响应速度出现明显异常,远程调试时未发现 90 服务器有任何异常。后在一次无关的远程调试中发现 90 服务器的 SSH 链接出现了异常中断,多次重试连接无果,试图从 80 服务器走内网跳板无果,因此决定进行实地调试。

在实地调试的过程中,发现 80 服务器与 90 服务器之间的互 ping 操作出现非常高的丢包率,机房同时有一队运维人员想向机架上安装新的服务器,却发现新服务器虽然启用了透明 IP,但外网环境下仍然无法访问。

使用排错法将网线逐根拔除,发现将 80 服务器的网线移除后,网络立即恢复正常;重新连接 80 服务器后,网络环境即刻恶化。使用调试连线连接交换机发现 80 服务器的数据包造成了交换机的拥塞,但是在 80 服务器上却看不到任何异常流量、异常进程的记录。

斗争

后来,在检查服务器的 /etc/cron.d 时发现了几个异常的文件名:DbSecuritySptmeonga,两个文件均为 Bash 脚本。经检查文件内容,里面提到了几个非常可疑的文件:

同时,通过 find 命令对全部系统文件按照文件日期进行检查时发现 /usr/bin 下的 psnetstat 等系统文件的修改日期显然与其他日期不符,而同时在 /usr/bin/dpkgd/ 下正好存放了这些文件相同文件名、尺寸却小上很多的文件。经过本地安装相同操作系统并比对文件大小,这些文件正是原本的系统文件!之前之所以在服务器上无法看到异常流量的原因也变得明了起来——正是病毒修改了系统文件,导致我们无法看到异常的病毒流量和病毒进程。

我们从自己的服务器上复制了 htop 程序(原主机无此程序)到服务器上查看进程情况,发现一个叫 meonga 的程序的 CPU 占用率高达 400%,我们即刻结束了此程序。我们后来将 iftop 程序复制到了服务器上查看网络流量使用情况,最初流量一切正常,过了几分钟后发现流量又一次暴起,再次查看 htop 发现 meonga 程序再次自启,查看其父进程为 /bin/bash /tmp/jhascl,查看脚本内容发现这个脚本正是负责 meonga 程序的被杀重启,检测周期为 600 秒(10分钟),这也解释了刚才的现象。

强制结束了 jhascl 守护进程和 meonga 恶意进程后,我们对服务器使用了 clamav 进行了一次彻底的杀毒过程。后因误操作键入了 ps -elf 而并没有将原有的操作系统文件替换回去,病毒再次连环自启,十分钟过后网络再次陷入异常。检测发现病毒通过 /usr/bin/chgf 完成了所有文件的修复,并自我复制到 /tmp 目录再次启动。

懊恼不已,我们只得重复刚才所有的杀毒过程。我们这一次还彻底修复所有被破坏了的系统文件,清除了 /usr/bin/chgf 病毒备份文件,同时清除了在 /etc/init.d 下的病毒启动项、/etc/cron.d 下的病毒定时启动项、/etc/ 下的病毒备份副本、/etc/rc?.d 下的病毒启动项、/bin 下的病毒可执行文件备份,再三确定病毒已经被彻底清除后,对服务器进行了一次重启,观察20分钟仍无异常情况,宣告病毒清除完毕。

溯源

我们意识到仅仅除掉病毒是不够的,只有知道了病毒是从什么地方进入系统的,我们才能对服务器进行有针对性的加固,并防止类似问题再度出现。通过查阅系统上各个服务的日志我们发现,在病毒感染日期前后,SSH 日志中出现了非常多的来自境外的恶意密码爆破记录,在成山的失败日志之后,对方竟然用 password 验证方式成功地登录进了我们的服务器,这显然不是正常的现象。

自我检查表明,我们接手服务器前,80 服务器的密码是 123qwe,而且只有 root 用户一个活跃用户,所有的操作全部在 root 下进行,甚至允许 root 用户进行远程 SSH 登录。这样的脆弱配置显然为不怀好意的分子提供了绝佳的条件。入侵者可能是通过弱密码字典攻破了 80 服务器的 SSH 密码,在取得 root 权限之后为所欲为,在服务器上部署了对 CPU 和网络高占用的恶意程序,从而导致了异常情况的出现。

补牢

我们将 root 用户的本地登陆密码从原来的弱密码修改为使用 uuidgen 工具生成的 36 位全随机密码,由于有 UUID 的全局唯一性, 黑客在理论上几乎不可能通过暴力破解的方式实现密码的猜解;同时,我们还禁用了 root 用户的远程密码登录权限,强制所有用户全部使用 SSH 公私钥机制登录,根本不给黑客机会来对密码进行猜解。

由于服务器目前运行的操作系统版本比较老旧,可能难免存在其他的漏洞或问题。然而现时正处业务繁忙之时,不可以对服务器进行较大的调整,否则会延误正事,带来更多不必要的麻烦。如条件允许,将对 80 服务器和 90 服务器进行一次全盘更新,将操作系统更换为更为安全的版本,同时使用 Docker 等虚拟化、隔离机制,将不同的服务通过容器隔离开,进一步确保系统的安全性和稳定性。

附:病毒样本

供工于逆向分析的 pong 友们玩耍。

解包密码:infected

链接: https://pan.baidu.com/s/1ArIBSpksfN90toCZDW9m4w

提取码: u793

comments powered by Disqus