一大早刚睡醒,打开手机就看到了阿里云发来的告警邮件,服务器正在进行挖矿😳,一下睡意去了大半。
【挖矿处置通知】为避免您的云服务被关停,请尽快清理挖矿活动
CPU使用率飙升
因为Blog是编译后的静态网站,按理说压根不会遇到被挂马的情况。服务器密码用的也是64位随机大小写数字符号密码,被暴力破解的概率也几近于零,我能想到的情况也就是服务器中一个定时任务(从外部拉取数据到网站内)和两个辅助应用(网站统计、评论区)有可能出现问题。
现在还不是排查问题来源的时机,先把问题解决了吧,去干掉这个挖矿脚本。
一、解决问题
过去对Linux命令不太熟,每次操作都得查询大量博客,去尝试博主们提供的命令行。中途出现了预想外的问题再处理起来也非常麻烦。现在有了AI,处理这些问题就从容的多了,先让AI整理一套排查问题的命令:
豆包整理的排查指南
按照顺序执行,中途如果有出现看不懂的返回数据,也可以再次询问AI。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| # 查找占用高的进程 [root ~]# top
# 筛选xmrig进程信息 [root ~]# ps aux | grep -i "xmrig\|xmr\|miner\|挖矿" | grep -v grep 1001 19542 98.7 14.7 309940 266140 ? Sl 02:23 448:52 /tmp/updater-1001/xmrig-6.24.0/xmrig --url pool.supportxmr.com:8080 --user 89e6LJN3AvUWqj9fsauz1kaqv3z2CYvJAfR2vHAoo16LMm3ugMrSComQgEDKKXSz6zFbNB4CVfZQwGdaSx4psNTg873jMKW --pass worker --donate-level 0
# 强制终止 [root ~]# ps aux | grep -i "xmrig\|xmr\|miner" | grep -v grep | awk '{print $2}' | xargs -r kill -9
# 再次查询,确认进程已终止(defunct代表僵尸进程,后续系统会择机释放PID) [root ~]# ps aux | grep -i xmrig | grep -v grep 1001 19542 98.7 0.0 0 0 ? Z 02:23 450:24 [xmrig] <defunct>
# 终止所有与/tmp/updater-1001目录相关的进程(关键:防止守护脚本重启) fuser -km /tmp/updater-1001/ 2>/dev/null # -k 终止进程,-m 匹配目录相关所有进程
# 强制删除整个恶意目录(-rf 递归删除,忽略权限) rm -rf /tmp/updater-1001/
# 验证目录已删除(无输出则成功) ls -ld /tmp/updater-1001/ 2>/dev/null
|
当上述步骤检查完毕后,再进行其他检查工作:
- 检查是否有可疑的系统定时任务;
- 检查是否有可疑的系统用户;
- 检查/tmp目录下是否有残留的守护任务;
- 检查系统中是否有隐匿未删除的挖矿脚本备份;
- 及时更新修复相关系统漏洞;
- 对于业务中有暴露风险的accessKey及时注销替换;
- 对于系统中敏感易泄露的应用密码进行替换;
处理完成后,CPU使用率恢复到正常水平
二、排查来源
一切解决后,我就开始排查这个问题是怎么产生的。我的怀疑目标主要有三个:
- 定时任务:同步每日油价,用于Blog的自建应用“百公里油耗费用计算器”;
- Twikoo:网站评论区;
- Umami:网站访问量统计;
先看定时任务,最近几日运行都是正常的;而且定时脚本是自己写的,功能只是抓取数据之后保存为json文件,没有任何的执行文件功能,不存在安全隐患。
定时任务运行正常
再看Twikoo和Umami,于是我去Github查看了他们近期的发版情况,果然出了问题!Umami近一周连发三版,解决Next.js导致的高危服务器漏洞。正巧我的Umami还是2.18.0,在漏洞影响范围内…
Umami近期疯狂更新,正巧是那个Next.js的高危漏洞💀
后续又有一个发现佐证了我的看法:我在查询服务器是否还有遗漏的xmrig文件时,搜索到了下列路径内容。而这个8c4****536正巧是Umami的容器ID。
1 2 3 4 5 6
| [root /]# find / -name "*xmrig*" 2>/dev/null
/var/lib/docker/overlay2/8c4****536/merged/tmp/updater-1001/xmrig-6.24.0 /var/lib/docker/overlay2/8c4****536/merged/tmp/updater-1001/xmrig-6.24.0/xmrig /var/lib/docker/overlay2/8c4****536/diff/tmp/updater-1001/xmrig-6.24.0 /var/lib/docker/overlay2/8c4****536/diff/tmp/updater-1001/xmrig-6.24.0/xmrig
|
所以,后续的封堵方案就比较简单了,将Umami的版本升至v2.20.1以上即可(建议升到v2.20.2,因为12月11日Next又爆出了2个高危漏洞😂)。
尾、回旋镖🎯
Next.js这个事,其实我前几天就刷到了。
当时我还发了个朋友圈吐槽 “前端框架搞SSR,终究要把曾经服务端语言踩过的坑,再走一遍。”
没想到一周之后,轮到我走一遍了😂