文章目录
1. 遇到个奇怪的问题
同事发消息说开发环境某个服务(化名A服务)Jenkins构建失败了。A服务一个普通的Java项目,springboot的jar包,使用的docker发布。
看了看日志,build成功,但是deploy失败了。日志上没显示什么有效信息,于是去服务器上查看。
2. Linux上排查
登录的到Jenkins所在的服务器。检查流程如下
2.1 检查硬盘容量
df -h
结果比较正常,硬盘空间足够,不是日志爆满。
2.2 检查内存
free -h
结果比较正常,内存是足够用的。
2.3 top
top
按U
以CPU维度排序,按M
以内存维度排序,按c
显示进程详情。
发现某个进程CPU占用很大
rGDkIakd,不知为何物,第一反应是中毒了。但是搜索引擎搜不到。
在TOP
页面,按c
看进程详情,没有作用。
2.4 ps查看进程信息
ps -ef |grep rGDkIakd
还是一无所获。
2.5 netstat查看该进程占用的端口
netstat -ntlp |grep 19536
netstat -ntlp |grep rGDkIakd
两个命令均无所获,没有任何信息。
2.6 lsof
最后查看文件,有结果了
lsof |grep rGDkIakd
其实有很多条,只截了一条。
打码的是我服务器的domain,一个陌生的ip,查一下,是棒子南朝鲜的ip(也有可能是肉鸡地址,无所谓了就是棒子),
3.动手
现在已经怀疑是个病毒了,现在比较容易中挖矿的病毒,CPU飙升通常是在挖矿。
这种进程,怕死掉,一般会有个保活机制(死掉拉起)。
3.1 检查定时任务
crontab -l
发现了内容
找到这个文件,内容是base64,原文不放了,放个打码的截图
解析一下,原文不放了,放个打码的截图
3.2 做掉
文件都删掉,
rm -rf /root/.sysxxx/xxxx.sh
定时任务也给删掉
crontab -e
3.3 善后
服务器恢复了正常。
后续交给运维善后了,他给的结论
Jenkins的漏洞,被棒子利用了,会在/tmp下创建个文件,把定时任务执行的文件拉过去,然后写到定时任务里面定时检查进程是否还在。
顺手还把Jenkins做了升级。
3.4 结果
一定要经常看看服务器的状态,加一些监控报警。本次中毒的服务器因为某些原因开了公网,之前是内网的服务器所以没监控疏于防范。大家一定要注意啊。
4. 总结
先看几个硬盘、内存、CPU
等指标,再看进程、文件句柄
,最后检查定时任务
。可以揪出来一些简单的有害进程。
关注公众号- 编程highway - 获取更多好文和学习资料