关于漏洞
漏洞发生的前提:
1、Redis 服务暴露在公网
2、Redis 配置未设置口令或弱口令
3、Redis 配置文件未设置 Bind ip
4、Redis 服务所在机器开启了 SSH 服务,且默认 22 端口对外开放
说明:第1
点中 Redis 服务暴露公网的情况下,若使用的是默认端口 6379,则很容易被黑客全网批量扫描到。
实验
首先在一台虚拟机(inet 10.0.100.210
)中安装了 redis,完全采用默认配置(意味着未设置 Bind ip,未设置口令)
|
|
另外,可以看到 Redis 还是以 root 用户启动运行的。
现在从另一台机器(inet 10.0.100.164
)去攻击此台 Redis 服务器
0x01
生成一个新的 SSH Public Key,并保存在文件foo.txt
中
|
|
这里有换行是关键,体现在后面将内存数据导出到authorized_keys
文件的时候
0x02
将foo.txt
内容写入 redis 内存,flushall 将清除数据库所有的 key,后面一步是将公钥保存给 crackit
0x03
将内存中得数据导出到authorized_keys
文件中
再去 Redis 服务所在的机器上去看 root 用户的authorized_keys
可以看到我的 Public Key 已经写到了这台机器的authorized_key
里面了,从这里也可以看出如果当时第一步的时候foo.txt
内保存的 Public Key 没有空行,那么得到的就是一串乱码了,尽管其中含有我的 Public Key,仍然不能登录,就像下面这个样子:
0x04
成功登录
如何防御
可以看到执行的命令都是 Redis 的一些正常功能,漏洞发生的本质还是配置不合理。Redis 的官方文档中明确指定了
具体如何防御可以根据前面提到的漏洞发生的前提针对性采取如下措施:
1、Redis 不要开放到公网访问
2、为 Redis 建立单独用户和强密码
3、为 Redis 绑定 ip 地址
4、Redis 所在服务器的 OpenSSH 服务(
default port 22
)不对外开放
当然对常见服务(Redis,MySQL,OpenSSH 等)修改其默认端口,在出现 Bug 时候也能阻止一些脚本黑客的针对默认端口的批量扫描攻击。
影响
网上公布了一组调查数据“针对 15 万台对公网开放的 Redis 服务器跟踪分析,发现有 15238 台未进行认证配置,也就是说超过10%
的服务器可以直接连接;其中又有 10312 台服务器被入侵,总比例超过67%
”。这个是我在 ZoomEye 上搜一下全网开放 6379 端口的主机,可以看到还是有不少的