因为Redis这个漏洞,我可怜的服务器被挖矿病毒偷袭了
mhr18 2024-12-02 17:50 17 浏览 0 评论
原文作者:「烟雨星空」
原文地址https://www.cnblogs.com/starry-skys/p/13332666.html
前言
服务器好端端的竟然中了挖矿病毒!!!
可怜我那 1 核 2 G 的服务器,又弱又小,却还免除不了被拉去当矿工的命运,实在是惨啊惨。
事情原来是这样的。。。
就在今天下午,我准备登陆自己的远程服务器搞点东西的时候,突然发现 ssh 登陆不上了。
如上,提示被拒绝。这个问题很明显就是服务器没有我的公钥,或者不识别我的公钥,然后拒绝登录。
这就很难办了,我确定我的公钥是一直没有变动过的,不应该会出现这种情况啊。
还有让我头疼的是,我当初为了安全起见,设置过此台服务器只能通过 ssh 的方式免密登录。而且禁止了密码直接登录,这样也防止了别人通过破解我的密码而登录服务器。
当前,只有我这个 mac 还有家里的 win 两台电脑有 ssh 权限。(其实,当时我也想到了这种情况,就怕万一有一天某台电脑登录不上,另外一台还能做备选。嘿嘿,我是不是很机智!)
那么,目前的解决办法,就是要么等着下班回家,用另外一个电脑操作,把当前这个电脑的公钥加到服务器的authorized_keys 文件里。要么,就只能把服务器重装了。
但是,好奇心驱使我去探究一下,到底是什么原因导致了服务器连接不上,而不是直接重装服务器。那样的话,就太没意思了。
通过 VNC 方式登录服务器
因为我用的是腾讯云服务器嘛,于是,就登录到了腾讯云的控制台,想看一下是否还有其它“走后门”的方式,让我绕过 ssh 或者不受密码登录的限制。
没想到,还真的有方法。如下图,可以通过 VNC 的方式进去,然后输入账号密码就可以直接登录,不受限制。
可以看到已经进入服务器了。上一次登录时间是昨天下午,这个时间点没错。
发现问题
当然,正常来讲,我应该先去 authorized_keys 文件检查一下我的公钥是否有问题。但是,习惯性的操作让我 top 了一下,却发现了另外一个问题。
等等,这是什么鬼! 有一个 sysupdate 进程占用了 CPU 51.2%,另外还有一个进程 networkservice 占用了 47.8% 。这两个加起来,就已经占用了 99% 了。
实际上,在腾讯云后台也能监控到服务器的实时状况。
很明显,这两个进程是比较异常的。而且,之前也没有见过这种名字。于是,习惯性的,我就在网上搜了一下 sysupdate。直接,就出来了一堆结果,挖矿病毒。
我去,听这名字,难不成就是传说中的比特币挖矿?不管那么多了,先解决当前的问题吧。
解决问题
1、确认病毒位置
先通过 systemctl status {进程号} 查看一下它的状态信息,以及有没有相关联的进程。以 sysupdate 进程号 16142为例。
可以发现它是从昨天晚上九点开始运行起来的。怪不得,昨天下午下班前还能用,今天就不能用了。
还可以通过 ls -l proc/{进程号}/exe 命令查看它具体的位置。最后发现都在 /etc 目录下。
如上图,这五个都是“挖矿病毒所用到的文件”。哼哼,从颜色上就能看出来他们是一伙的。
然而,我并没有着急把它们清除掉,却突然脑子一抽,想研究一下它们的脚本。因为我看到有一个 update.sh ,里边肯定写了一些病毒执行相关的命令。
我把他们全部都复制到了我自己的目录下 /root/test/。然后打开了 update.sh 脚本,看里边写了些什么。
我估计,能看着服务器都被病毒攻击了,还有闲情研究人家是怎么制作病毒的,我是第一个吧。。
虽然菜鸡我对 linux 不熟,但是大概可以看出来一些东西,如SELINUX 系统被关闭了,我的 authorized_keys 文件也被改动了,竟然无耻的还把 wget、curl 等命令改了名字。
下边,还可以看到病毒脚本的网络路径。难不成是从这个地址下载下来的?
2、删除定时任务
看一下有没有定时任务,因为有可能它会跑一个定时任务,定时的执行脚本,生成病毒文件和进程等。
可以进入 /var/spool/cron/ 目录查看定时任务。也可以通过 crontab -l查看。
没想到却都没有发现。
如果有的话 ,删除 /var/spoool/cron/目录下的所有文件。或者执行crontab -r命令,清空任务列表。
3、杀掉进程,删除病毒文件
用 kill -9 {进程号} 把上边的两个进程都杀掉,然后删除 /etc 目录下的那五个文件。
注意删除文件时,直接用普通的 rm -rf 不能行。因为病毒文件被锁定了,需要通过 chattr -i {文件名} 解锁之后,再删除。
4、删除 authorized_keys 文件
这个文件里记录了可以通过 ssh 免密登录的所有终端的公钥。路径在 ~/.ssh/authorized_keys 。通过 vi 命令打开。
可以看到文件里已经被改动了,多了两个未知的公钥,这肯定就是攻击者的公钥。前面的三个都是我自己的公钥。
可以直接删除此文件,等稍后再修复为自己的公钥。
5、恢复 wget 和 curl 命令
从 update.sh 文件中可以看到这两个命令名称被改了,对于习惯了这样使用的人来说肯定不爽,那就改回来就好了。
如下为可选的的命令。我这里就需要前两行就行了,因为 which cur 之后发现,只存在 /bin下,/usr/bin/不存在
mv /bin/wge /bin/wget
mv /bin/cur /bin/curl
mv /usr/bin/wge /usr/bin/wget
mv /usr/bin/cur /usr/bin/curl
6、修复 SELINUX
SELinux 是 linux 的一个安全子系统。可以通过命令 getenforce 查看服务状态。
其实从 update.sh 文件中也可以看到此服务被关闭了。
修改 /etc/selinux/config 文件,将 SELINUX=disabled 修改为 SELINUX=enforcing。
修改完成后,需要重启服务器才能生效。
找到原因
其实,以上步骤搞完,还差一步。
你总不能被攻击的不明不白吧,为什么别人会攻击到你的服务器呢。
后来,从网上找到了一篇介绍,说:
挖矿病毒,利用Redis的未授权访问漏洞进行攻击。Redis 默认配置为6379端口无密码访问,如果redis以root用户启动,攻击者可以通过公网直接链接redis,向root账户写入SSH公钥文件,以此获取服务器权限注入病毒
我去,看完之后,感觉这个描述简直不能太准了。
因为,昨天下午,我就是因为要测试通过 redis 的 zset 来实现延时队列的一个功能。用本地代码连接了服务器的 redis 。当时就在防火墙中把 6379 端口打开了。
谁曾想,一晚上的功夫,就被人家攻击了。
我想,挖矿人肯定也是找大量的机器来实验,看能否通过这些漏洞(肯定不限于只有 redis),操纵对方的服务器。于是,我就幸运的成为了那个倒霉蛋。
最后,我粗暴的把 redis 服务关了,并且去掉了 6379 的端口。
额,其实有更温柔的方案可选,比如更改 redis 的默认端口号,或者给 redis 添加密码。
最后
感觉整篇下来,好像除了知道 redis 的这个漏洞外,就没有其他收获了。主要是,我的安全意识还是比较薄弱吧。
毕竟,服务器只是拿来玩玩用的。最后实在不行也可以重装系统,完事又是一条好汉。
公司的服务器肯定不会这样的,都有专门的运维人员来做这些安全工作。如果是线上服务器被人家拉去挖矿,好歹能拿我这篇文章吹牛逼了。。。
相关推荐
- 【推荐】一个开源免费、AI 驱动的智能数据管理系统,支持多数据库
-
如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!.前言在当今数据驱动的时代,高效、智能地管理数据已成为企业和个人不可或缺的能力。为了满足这一需求,我们推出了这款开...
- Pure Storage推出统一数据管理云平台及新闪存阵列
-
PureStorage公司今日推出企业数据云(EnterpriseDataCloud),称其为组织在混合环境中存储、管理和使用数据方式的全面架构升级。该公司表示,EDC使组织能够在本地、云端和混...
- 对Java学习的10条建议(对java课程的建议)
-
不少Java的初学者一开始都是信心满满准备迎接挑战,但是经过一段时间的学习之后,多少都会碰到各种挫败,以下北风网就总结一些对于初学者非常有用的建议,希望能够给他们解决现实中的问题。Java编程的准备:...
- SQLShift 重大更新:Oracle→PostgreSQL 存储过程转换功能上线!
-
官网:https://sqlshift.cn/6月,SQLShift迎来重大版本更新!作为国内首个支持Oracle->OceanBase存储过程智能转换的工具,SQLShift在过去一...
- JDK21有没有什么稳定、简单又强势的特性?
-
佳未阿里云开发者2025年03月05日08:30浙江阿里妹导读这篇文章主要介绍了Java虚拟线程的发展及其在AJDK中的实现和优化。阅前声明:本文介绍的内容基于AJDK21.0.5[1]以及以上...
- 「松勤软件测试」网站总出现404 bug?总结8个原因,不信解决不了
-
在进行网站测试的时候,有没有碰到过网站崩溃,打不开,出现404错误等各种现象,如果你碰到了,那么恭喜你,你的网站出问题了,是什么原因导致网站出问题呢,根据松勤软件测试的总结如下:01数据库中的表空间不...
- Java面试题及答案最全总结(2025版)
-
大家好,我是Java面试陪考员最近很多小伙伴在忙着找工作,给大家整理了一份非常全面的Java面试题及答案。涉及的内容非常全面,包含:Spring、MySQL、JVM、Redis、Linux、Sprin...
- 数据库日常运维工作内容(数据库日常运维 工作内容)
-
#数据库日常运维工作包括哪些内容?#数据库日常运维工作是一个涵盖多个层面的综合性任务,以下是详细的分类和内容说明:一、数据库运维核心工作监控与告警性能监控:实时监控CPU、内存、I/O、连接数、锁等待...
- 分布式之系统底层原理(上)(底层分布式技术)
-
作者:allanpan,腾讯IEG高级后台工程师导言分布式事务是分布式系统必不可少的组成部分,基本上只要实现一个分布式系统就逃不开对分布式事务的支持。本文从分布式事务这个概念切入,尝试对分布式事务...
- oracle 死锁了怎么办?kill 进程 直接上干货
-
1、查看死锁是否存在selectusername,lockwait,status,machine,programfromv$sessionwheresidin(selectsession...
- SpringBoot 各种分页查询方式详解(全网最全)
-
一、分页查询基础概念与原理1.1什么是分页查询分页查询是指将大量数据分割成多个小块(页)进行展示的技术,它是现代Web应用中必不可少的功能。想象一下你去图书馆找书,如果所有书都堆在一张桌子上,你很难...
- 《战场兄弟》全事件攻略 一般事件合同事件红装及隐藏职业攻略
-
《战场兄弟》全事件攻略,一般事件合同事件红装及隐藏职业攻略。《战场兄弟》事件奖励,事件条件。《战场兄弟》是OverhypeStudios制作发行的一款由xcom和桌游为灵感来源,以中世纪、低魔奇幻为...
- LoadRunner(loadrunner录制不到脚本)
-
一、核心组件与工作流程LoadRunner性能测试工具-并发测试-正版软件下载-使用教程-价格-官方代理商的架构围绕三大核心组件构建,形成完整测试闭环:VirtualUserGenerator(...
- Redis数据类型介绍(redis 数据类型)
-
介绍Redis支持五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)及Zset(sortedset:有序集合)。1、字符串类型概述1.1、数据类型Redis支持...
- RMAN备份监控及优化总结(rman备份原理)
-
今天主要介绍一下如何对RMAN备份监控及优化,这里就不讲rman备份的一些原理了,仅供参考。一、监控RMAN备份1、确定备份源与备份设备的最大速度从磁盘读的速度和磁带写的带度、备份的速度不可能超出这两...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle位图索引 (63)
- oracle批量插入数据 (62)
- oracle事务隔离级别 (53)
- oracle 空为0 (50)
- oracle主从同步 (55)
- oracle 乐观锁 (51)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)