###故障说明
故障环境配置 开发测试服务器(腾讯云); 系统:centos7 ; 程序启动模式:root用户直接启动; 网络环境:所有端口全部对外开放(使用仅屏蔽部分关键端口ssh,redis,rabbitmq等); 为方便服务器间数据传输方便,采用了ssh互信方式。
故障现象 开发使用过程中,发现经常有服务无故关闭,登录服务器经检查,发现CPU使用率达到100%。 在检测异常进程中,未发现CPU使用率异常的进程(使用 top 以及 ps -aux 进行检查),于是报障。
检测过程
开始以为系统运行异常,将其中一台进行重启,重启后问题依旧。通过上网查询一番,得出可能是进程被隐藏。
使用工具进行查找进程 搜索到 sysdig 监控检测工具 安装使用方式:
###安装
curl -s https://s3.amazonaws.com/download.draios.com/stable/install-sysdig | sudo bash
###检测所有程序已隐藏进程
sysdig -c topprocs_cpu
厉害,果然看到一个top及ps无法看到的进程在肆虐占用CPU
###根据pid ,进入 /proc/目录检查程序位置
很奇怪的现象,进入/proc/ 目录后,无法看到该pid的目录,仅可以直接进入
ll -h /proc/16352/ 查看到程序文件源自于 /usr/bin/pamdicks
检测该文件时发现使用搜索的方式都无法检测到该文件,find ,ls /usr/bin/pamd*等等都无法显示,唯有全路径才可以 ls -hal /usr/bin/pamdicks
根据隐藏进程以及隐藏文件不可见的特性,进行搜索分析,得出系统内核被篡改,将文件名称和进程信息给屏蔽。
初步根据PID将程序kill及文件删除,但是重启后又自行恢复,还有其他机器,也经过一夜,死灰复燃了。
###临时处理办法
奈何技术有限,修改内核这个玩不转,也未找到相关反向修改的案例。 只能想出其他办法解决该问题。
解决办法:
根据系统环境变量,检查各目录下是否存在pamdicks 共计有两个/usr/bin/pamdicks和/bin/pamdicks
删除原文件,并创建一个顶包空文件,然后使用系统chattr对其进行锁定禁止修改。
rm -rf /usr/bin/pamdicks /bin/pamdicks
touch /usr/bin/pamdicks /bin/pamdicks
chattr +i /usr/bin/pamdicks /bin/pamdicks
再根据sysdig -c topprocs_cpu 查到的PID直接杀掉
kill -9 16352
世间清静了。
其他工具又发现更多隐藏进程
虽然将炸弹的火给藏起来,但是炸弹还在。继续查找其他办法。 又找到另一个工具unhide (经网友提醒,需先安装epel源yum -y install epel-release)
yum -y install unhide
unhide quick
扫描后又发现多个的异常进程。
进程状态和文件状态与pamdicks 如出一辙。 只有使用相同办法对其进行处理。
本次异常程序名称: pamdicks,ip6network,kswaped,irqbalanced,rctlcli,systemd-network
###后记
处理过程中,已经检查了init启动项,crontab定时任务,at定时任务等配置,均未发现异常。
本次故障起因由以下三点引起: 1、大部分程序端口均直接暴露在公网,是本次问题主要原因。 2、程序为省事,均用root用户直接启动,导致内核被修改,问题难度复杂化。 3、因为服务器之间的ssh互信,结果导致所有服务器全部中招。
以后得加强注意这三方面的安全问题,本次木马程序并未涉及文件防篡改配置,不然也只能重装系统进行处理了。
后续得继续研究如何从内核中将相关配置删除,才能彻底全部查找到根源对其进行处理。