redis中毒
黑客用我们服务器挖矿了
新的一天的开始
周五早上刚到公司,同事来问我系统为啥打不开了?我第一反应就是肯定 Nginx 服务器挂了呗,立马就去登录服务器看看,但此时发现已经完全远程登录不上这台部署了 Nginx 和 Redis 的服务器了,此刻心理活动如下:
难道服务器欠费了?
难道服务器到期了?
都不对阿,一起买的一堆服务器就单单这一台有问题,肯定是这台服务器挂了吧?
同事马上登录美团云管理后台看了下,当时我们也猜测估计是什么软件占用了系统大量内存或CPU,果然在管理后台发现这台机器 CPU 使用率巨高。

在完全远程登录不上服务器的情况下,此刻是无法做任何操作的,除了通过管理后台重启这一条路可走之外,所以我们选择重启了服务器。重启完各种软件后并没发现没有任何异常,这时候我们部门不仅人美技术也牛的花姐说了一句这么开玩笑的话,大家都哈哈一笑后就开开心的去吃中午饭了。

中午睡了一觉后
吃完中午饭,我睡了一会儿,梦里好像看到黑客在对我笑,醒来看到花姐说的那个 gpg-agentd 进程比较高后,就随手搜了一下这个进程,卧槽,流弊阿...


看到这个后,我丢在了群里后,大家震惊了,原来服务器真的在用来挖矿了。随后就和不仅开车 666 修 bug 也是老司机的 Jack 一起与挖矿脚本进行了斗争,我们首先在网络上找了一篇类似的文章:记一次Redis数据库漏洞被入侵现象,这哥们儿和我们遇到的是同一个被黑的套路,简单总结具体黑客操作如下:
利用了 redis 特性可以把缓存内容写入本地文件的漏洞,他就可以随便在服务器的
/root/.ssh/authorized_keys
文件中写入公钥,在用本地的私钥去登陆被写入公钥的服务器,就无需密码就可以登陆,登录之后就开始定期执行计划任务,下载脚本,更牛逼的是,他还可以利用
masscan 进行全网扫描redis 服务器 6379 的端口,寻找下一个个肉鸡,如果你的 redis
端口是默认6379,并且还没有密码保护,很容易就被攻破解,最后也就是说这个脚本会迅速在全网裂变式增加。
那么问题来了,我们的服务器 redis 是有密码的,到底是怎么在 authorized_keys 写入公钥的?
首先猜到的肯定就是密码泄漏了呗,看了眼我们密码,大小写加数字随机生成的,不容易破解阿,暴力破解?敲了个 lastb 命令看了一眼后,被扫了五十万次次次,我们信了这个暴力破解暴力破解暴力破解 。。。

黑客到底是怎么黑进来的?
找到了原因,但还没清楚黑客到底是怎么黑进来的?入侵后具体都做了什么事,下面就大概还原下黑客视角入侵全过程,首先看到的就是多了个定时任务。

然后,curl 命令请求下这个地址后,发现这个脚本(这个脚本简直 666 )全内容如下:

第一步,先在/root/.ssh/authorized_keys文件中生成ssh公钥,黑客以后无需密码就可以登录了,简直给自己铺路搭桥666;
第二步,建立定时任务,作用是每20分钟去他们服务器再次下载这个脚本,然后执行,这一步简直就是让自己杀不死;
第三步,开机启动项也加入下载脚本命令,也就是你重启后会自动下载,fuck...
接下来,又改了 hosts、limits 限制,最重要的是这个脚本还记得去清除上述所有操作,不留下痕迹,佩服!!!
这个脚本执行完,后面再去执行其他三个脚本,把这个几个脚本都下载下来后,我们接着分析

这个脚本,只有一个作用,就是去下载真正的挖矿文件,也就是占用 CPU 居高的那个 gpg-agentd,操作也是很流弊的,删除所有操作记录和文件,这个黑客也是处女座?不留下一丝痕迹。
正常人来干这挖矿这件事的话,应该到这一步就可以打完收工了,因为已经安装成功挖矿软件了。那你要这么想、这么做,你不适合当黑客。更流弊的操作来了!!!


第三个脚本,这里他就是贴心的给你安装、升级 gcc、libpcap 和 apt-get 等软件命令,他真的这么好么?其实他是为了顺手下载了一个名字叫 masscan 的软件,然后装了上去,同时也顺手做了处理现场操作,在下佩服!!
那这个 masscan 是干嘛的呢?
据说 masscan 是最快的互联网端口扫描器,最快可以在六分钟内扫遍互联网。

第四个脚本来了,这个脚本就是用masscan来扫redis 的 6379端口,对redis进行配置,利用了redis把缓存内容写入本地文件的漏洞,在/root/.ssh/authorized_keys文件中写入公钥,登录之后就开始定期执行计划任务,下载脚本。
总结一下
看完整个脚本操作,最后也就是说黑客不仅仅是用了你电脑挖矿这一件事,还把你电脑作为攻击者,去寻找另外的服务器,所以这个脚本会迅速在全网裂变式让服务器中招,这波操作也更 666 了...
最近在学习区块链相关知识,感兴趣可以关注下我自己的号。
redis中毒的更多相关文章
- linux查杀病毒的几个思路
1. tmp 目录下面 2. 定时任务查找一下 crontab -e 3. 病毒要下载 ps -ef|egrep "curl|wget" 查看是否有下载的命令 4. top 一 ...
- 记一次Linux服务器因redis漏洞的挖矿病毒入侵
中毒原因,redis bind 0.0.0.0 而且没有密码,和安全意识太薄弱. 所以,redis一定要设密码,改端口,不要用root用户启动,如果业务没有需要,不要bind 0.0.0.0!!!!! ...
- 记一次redis攻击
服务器挖矿病毒的排查过程 事情起因:朋友的一台阿里云主机,登录特别卡,找我看看 这一看就感觉出问题了,机器特别卡,top看了一眼,cpu几乎是100%运行 但是奇怪的是用top命令完全看不出来哪个进程 ...
- 如何更有效的消灭watchdogs挖矿病毒?华为云DCS Redis为您支招
漏洞概述 近日,互联网出现watchdogs挖矿病毒,攻击者可以利用Redis未授权访问漏洞入侵服务器,通过内外网扫描感染更多机器.被感染的主机出现 crontab 任务异常.系统文件被删除.CPU ...
- 使用redis构建可靠分布式锁
关于分布式锁的概念,具体实现方式,直接参阅下面两个帖子,这里就不多介绍了. 分布式锁的多种实现方式 分布式锁总结 对于分布式锁的几种实现方式的优劣,这里再列举下 1. 数据库实现方式 优点:易理解 缺 ...
- Ignite性能测试以及对redis的对比
测试方法 为了对Ignite做一个基本了解,做了一个性能测试,测试方法也比较简单主要是针对client模式,因为这种方法和使用redis的方式特别像.测试方法很简单主要是下面几点: 不作参数优化,默认 ...
- mac osx 安装redis扩展
1 php -v查看php版本 2 brew search php|grep redis 搜索对应的redis ps:如果没有brew 就根据http://brew.sh安装 3 brew ins ...
- Redis/HBase/Tair比较
KV系统对比表 对比维度 Redis Redis Cluster Medis Hbase Tair 访问模式 支持Value大小 理论上不超过1GB(建议不超过1MB) 理论上可配置(默认配置1 ...
- Redis数据库
Redis是k-v型数据库的典范,设计思想及数据结构实现都值得学习. 1.数据类型 value支持五种数据类型:1.字符串(strings)2.字符串列表(lists)3.字符串集合(sets)4.有 ...
随机推荐
- javascript 定时器 笔记
最近想看下定时器,发现这东西越看越牵连的东西越多,比如js单线程,EVent loop 什么的 看到了几篇比较好的文章 http://ejohn.org/blog/how-javascript-tim ...
- Linux环境下安卓SDK和ADT下载地址下载地址
SDK: android-sdk_r15-linux.tgz android-sdk_r23.0.1-linux.tgz android-sdk_r24.1.2-linux.tgz android-s ...
- LinkedIn是如何优化Kafka的
作者 张卫滨 发布于 2015年9月21日 转载 在LinkedIn的数据基础设施中,Kafka是核心支柱之一.来自LinkedIn的工程师曾经就Kaf ...
- cmdb是什么
CMDB -- Configuration Management Database 配置管理数据库,CMDB存储与管理企业IT架构中设备的各种配置信息,它与所有服务支持和服务交付流程都紧密相联,支持这 ...
- 轻松学习JavaScript十二:JavaScript基于面向对象之创建对象(二)
四原型方式 我们创建的每一个函数都有一个通过prototype(原型)属性.这个属性是一个对象,它的用途是包括能够由特定类型 的全部实例共享的属性和方法. 逻辑上能够这么理解:prototypt通过条 ...
- EffectiveJava(23)为什么不能在新生代码中使用原生态类型
泛型类和泛型接口 声明一个或者多个类型参数的类或者接口. 为什么不要在新代码中使用原生态类型 原生态类型,即泛型不带参数的类型 如List的list,list就是其原生态类型 1.使用原生态类型,插入 ...
- 恼人的The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved...错误,无奈用Struts的bean:write替代了JSTL的C:out
一个应用中有两个页面使用了JSTL的c:out输出,就类似这么简单三句 <c:if test="${!empty error}"> <h2>&l ...
- 手机号码月消费档次API
手机号码月消费档次API,返回手机号的每月消费水平,身份证姓名不做一致性校验 文档:https://www.juhe.cn/docs/api/id/261 接口地址:http://v.juhe.cn/ ...
- Git——版本管理工具(一)
Git 是一个分布式版本控制工具,它的作者 Linus Torvalds 是这样给我们介绍 Git —— The stupid content tracker(傻瓜式的内容跟踪器) 1. Git 背 ...
- 02-创建hibernate工程
编写hibernate需要的步骤 1,创建hibernate的配置文件 2,创建持久化类 3,创建对象-关系映射文件 4,通过hibernate API编写访问数据库代码 准备需要的文件. 1,准备一 ...