原本今天应该是一个愉快的周六,突然收到阿里云告警,说服务器有木马风险,让我赶紧处理,我顿时就懵逼了,上阿里云一看,好家伙,4个风险提示。
漏洞出自yapi服务,二话不说先停了服务,然后去yapi的github上看看,果不其然,有人提了相关issue。
阿里云的警告指明了木马文件是yapi目录下的20000
文件,我抱着试一试的心态,杀死了相关进程,并删除了文件。然而并没有什么用,过一会他就又重启了。这就我很难受了,我并没有运维的经验,只好请教身边的朋友,查查网上相关的案例。花了4、5个小时,得到的建议是,备份数据,重装系统。这并不是我想要的,且不论需要花费的时间,我自己也不会搭环境(环境是以前的架构师搭好的)。就在我快绝望的时候,找到了一些头绪和相关的案例(见文末),最后总算是战胜了木马。
以下是根据朋友建议和案例总结的实操流程:
1、crontab -l
查看有无异常的定时任务,有则删除
2、进入/etc/rc.d/init.d
目录,使用ll -art
查看开机启动文件(一般木马都会设置开机启动)的修改日期,如果和告警时间对得上的话大概率就是木马文件,我这里的木马文件是DbSecuritySpt
、selinux
,听别人说是挖矿病毒,但神奇的是服务器并没有发现cpu的使用率有疯涨的现象,据说是还没分配任务- - !发现木马文件后,直接删除即可(rc0.d ~ rc6.d都要删除)。这里耗了我很长时间,因为我删除了,过了没有多久,它又出现了,后面发现是20000
这个文件重启时会添加开机启动的木马文件。这就很蛋疼了呀,删了DbSecuritySpt
、selinux
,20000
重启就会添加。那问题还是得解决20000
。
3、从上面第三张图发现ps -ef
命令异常,所以就要进入/usr/bin
目录去排查,使用ll -art
命令得到下图
这是后来截的图,缺少了ss
、lsof
、netstat
文件(删了),可以看出多了bsd-port
、dpkgd
目录和.sshd
文件,修改了ss
、lsof
、netstat
、ps
文件。我猜测dpkgd
应该是那四个命令的原始文件的备份目录(被我直接删了),bsd-port
是木马的原目录,里面有个getty
的执行文件,正是这个文件让20000
能不断重启。一开始处理这一块的时候,我是用xftp删的,一开始我没有删掉.sshd
文件(xftp不显示隐藏文件)。所以并没有删干净,.sshd
又重新生成了bsd-port
目录。当我发现.sshd
时,我不太敢删,总以为是系统自带的文件,直到找到案例(多谢前辈)。同时我用md5sum
查了一下了bsd-port/getty
和.sshd
的哈希值,发现他们是一样的,所以可以大胆的删。
4、删完之后就把被伪装的命令重新安装一遍
# 安装ps命令
yum reinstall procps -y
# 安装netstat命令
yum reinstall net-tools -y
# 安装lsof命令
yum reinstall lsof -y
# 安装ss命令,安装失败,后来用 yum -y install iproute安装成功
yum -y reinstall iproute
5、到第4步的时候,我以为已经彻底解决了问题,准备重启来着。但我用ps -ef | grep getty
检查时发现,这个进程居然还存在。
这才想明白伪装原有命令的用途在这,隐藏木马进程,隐藏真实的网络请求,你以为解决,没想到木马进程还在。处理直接kill -9 xx
杀死木马进程,然后还要删掉/tmp/moni.lod
(存到是.sshd
的pid)、/tmp/gates/.lod
(存的是20000
的pid)文件
6、重启,检查木马进程是否还存在,检查木马文件是否存在。
7、检查mongo数据库,将异常的数据清除(用户和mock数据)
总结
木马的套路真是一环扣一环,让人防不胜防,十分感谢前辈的建议和文章,让我还能有一个愉快的周日。
目前并不能十分肯定木马是否已经彻底删除,如果有后续,会继续更新,希望不要有。
后续-2021-07-06
木马是通过mock接口注入代码引起的。解决的办法是关掉注册功能和mock功能