开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 1 天,点击查看活动详情
这篇文章主要记录一下我的云服务器被挖矿的经历,包括全部的探索过程和处理流程。在我遥远的记忆里,以往看到别人被攻击都是云服务器cpu使用率直接拉到百分百的,这个挖矿程序只给我拉到百分之五十,让我一度以为这不是挖矿程序,看来挖矿脚本也越来越狡猾了,知道不能竭泽而渔干一票就跑了。
问题初现
双十一打折的时候,我买了个华为云的云服务器。之前在上面部署过任务,但是最近已经把任务都停掉了。不过我最近想着再部署个任务上去,结果发现出了大问题了。
谁家好服务器能在空闲时cpu使用率干到50%?
摸索问题
初次定论:被攻击了
于是我赶紧打开xshell,准备看看这个货到底在干啥。首先是我最熟悉的top
可以看到使用率在49.5%接近50%,然后tasks那里显示只有一个任务在执行。 就是下面的列表所有的进程占用率加起来都没1%。啥情况嘞?
然后我看到这么一篇文章。
有一说一,有点吓人。
接下来继续排查原因呗。
-
试了下
ps H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu这个命令,也没有那个占用率很高的进程 -
查了下
top和ps命令的更改时间。时间也是能对应上的,毕竟在2016年,最近没有更改。所以可能,大概率不是命令被篡改的问题。
显然本人也是个linux的菜鸡实在不知道怎么解决这个问题。所以就继续搜呗,还能怎么办?一百多块钱不要了啊。
- 在我继续面向度娘改bug的时候,我看到这么一篇文章。里面的精华部分是这样的。虽然我没用过
pstree和execsnoop但是我关注的重点是应用不停的再重启。
巧了,我一下子就想到之前我把chatgpt对接到微信用的就是这里的数据库。chatgpt对接微信全流程 - 掘金 (juejin.cn)
这个东西在1.7就已经不运行了,日志也就截止在这里。很可能,就是这个程序在一直重启,一直在占用cpu资源。
可能没被攻击:先处理go程序
但是,我得坦白一件事。我不会go语言的程序中断。我刚查了才知道java有个jps而,go有个gops。
但是吧,我甚至连gops安装go get -u github.com/google/gops报错都不知道怎么处理。初次来看是版本问题。
那我就直接下载这个
1.17版本的呗,之前我的下载语句是
wget https://golang.google.cn/dl/go1.16.7.linux-amd64.tar.gz
现在直接改成
wget https://golang.google.cn/dl/go1.17.0.linux-amd64.tar.gz
他还给我报错,wget命令没找到?
不知道啥情况,感觉现在这个机器一团乱麻。明明查得到,结果用不了。
那能怎么办?一百多块钱呢,总不能不要了吧。
-
先卸载
yum remove wget -
再安装
yum -y install wget
总感觉今天诸事不顺呢。
wget没问题了,现在是没有1.17.0这个版本。只能去官网找找看了。以下的版本都可以。我直接把上面的下载语句的.0删掉。
下载后解压(记得在这之前先把
app目录下的go删掉rm -rf go)
tar -xvzf go1.17.linux-amd64.tar.gz -C /root/app
查看go version,环境换了昂。
运行上面的下载gops的语句go get -u github.com/google/gops
尝试干掉go:白忙活
干掉这两个进程之后,很遗憾,cpu使用率还是照旧。说明不是这个问题。
我突然想起来,我的服务器上还有两个东西,mysql和redis。虽然目前没有应用去用到他们。不过干掉试试看,万一呢?
尝试干掉redis:白忙活
pkill redis
尝试干掉mysql:白忙活
阶段性总结:应该就是被攻击了
他奶奶滴,看来mysql,redis不用的时候不占cpu使用率。大家不用踩坑了。目前的cpu使用率还是这个样子。而我的服务器好像没有可以停止的程序了。
我觉得我的思路走岔了,我应该直接找那唯一一个running的task。
查了下,top和ps是死活查不出来。为此我新安装了个命令htop
yum install htop
直接执行htop,终于看到这个占cpu使用率50%的进程。
一个运行了15小时,一个运行了72小时。看来时间还不长。
我看到了程序的command描述,好家伙一个zzh一个hash。完美符合挖矿程序的特征。主要还是看到了这个老哥的博客。
记录一次服务器被入侵(恶意挖矿)的问题_键盘歌唱家的博客
把那几个多出来的进程,kil掉就行了。cpu使用率回归正常。
探查原因
虽然这个问题表面上解决了,但是不法组织肯定有手段进来一次,肯定有手段进来第二次。所以我得看看我的服务器账户有什么问题没有。
用户登录记录
从用户登录来看,只有我自己登录了。但是黑客嘛,肯定有点手段的,不可能在登录记录留下来。
查看定时任务
emmm。黑客也没留个定时任务。
删除挖矿脚本
刚才我们定位到挖矿脚本就是这两个。所以直接用rm -rf zzh zzhs删除即可
zzhs比较好删除,但是zzh这个shell脚本还是有点问题。
处理这个我参考了两篇文章
【Linux被攻击】关于Linux攻击文件在etc目录下无法删除,不能进行任何操作(Operation not permitted) - 掘金 (juejin.cn)
记一次阿里云服务器因Redis被【挖矿病毒crypto和pnscan】攻击的case,附带解决方案 - 掘金 (juejin.cn)
最终的解决流程
- 直接用
chattr改变这个zzh的属性没用 - 用
chmod给chattr加执行权限 rm -rf zzh zzhs删除- 确认删除成功
总结
这次被挖矿很可能是我在学redis做东西的时候没设密码被人扫描到了。现在已经把redis停了,看看后续会不会出问题吧。