redis漏洞利用

redis未授权访问漏洞学习

1.       redis是什么

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的APIRedis的外围由一个键、值映射的字典构成。为高速低负载存储系统提供了一种解决方案。

 

2.       redis未授权访问

Redis 默认情况下,会绑定在 0.0.0.0:6379,这样将会将 Redis 服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis的数据。攻击者在未授权访问 Redis 的情况下可以利用 Redis 的相关方法,可以成功在 Redis 服务器上写入公钥,进而可以使用对应私钥直接登录目标服务器。

 

3.        漏洞原理及其危害

redis设计之初仅用于本机加快数据存取的速度,或者说,开发独立的权限认证系统开销过于冗杂,所以redis默认并未开启权限认证机制,未区分普通用户和管理员账户,使得暴漏在公网上的redis服务器可以被任意主机连接执行redis内置命令。若配合ssh,可以实现root远程登录,危害十分巨大。

4.       漏洞利用条件

a)        以root权限运行redis服务

b)        redis服务器暴露在公网环境

c)        redis服务允许除本机之外的所有主机登录

5.        漏洞重现和利用
本次试验在vmware虚拟机中进行,靶机使用fedora25,使用kali进行漏洞演示,网络连接模式选择桥接模式,打开虚拟机后输入ifconfig查看ip地址,相互ping得通即可继续实验

 

a)        安装redis,获得redis包

             wgethttp://download.mirrors.io/releases/redis-3.0.7.tar.gz

             解压后make执行

             运行之前需要修改/etc/redis.conf

             注释掉bind 127.0.0.1这一行,此行表示仅允许本机的连接

             运行redis服务

             redis-server/etc/redis.conf &

 redis漏洞利用

b)       在kali中执行相同操作安装redis,执行登录命令

c)        redis-cli –h 192.168.1.109    #fedora IP地址

    如果可以登录成功,证明此漏洞确实存在,在kali上未经验证直接登录redis主机


 

6.        接下来尝试搭配ssh协议获取主机shell

ssh协议认证机制,当服务器收到ssh连接请求,比对连接用户的ssh私钥与该用户主目录文件夹下的公钥是否匹配,如果是,允许登陆。先在本地产生root用户的rsa公钥私钥文件,将rsa公钥作为登录redis服务器的标准输入(redis-cli –x),登录后将此输入内容保存在root用户目录文件夹下的.ssh目录中,随后可以直接使用ssh命令登录。

d)       在kali上生成公私钥文件

redis漏洞利用

e)        将公钥文件内容重定向至其他文件(比如ssh.txt)

a)        启动fedora redis服务

b)       使用ssh.txt的内容作为标准输入,执行redis –cli命令,登录成功后使用set dir命令改变目录,设置文件名称,保存生成公钥文件。

redis漏洞利用

c)        此后在fedora开启sshd服务。

d)       在kali上使用ssh命令-i选项指定本地私钥文件以root用户名登录fedora主机,登录成功如下图所示

redis漏洞利用

7.       从上述结果可以看出,确实可以通过这种方式获取root登录权限,如果公司服务器存在此类漏洞

a)        通过 Redis 的 INFO 命令, 可以查看服务器相关的参数和敏感信息, 为攻击者的后续渗透做铺垫

b)        Redis 作为数据库,保存着各种各样的数据,如果存在未授权访问的情况,将会导致数据的泄露,其中包含保存的用户信息等

c)        Redis可以嵌套Lua脚本的特性将会导致代码执行, 危害同其他服务器端的代码执行,  一旦攻击者能够在服务器端执行任意代码, 攻击方式将会变得多且复杂, 这是非常危险的

8.       使用openvas对该漏洞进行扫描

a)        在openvas中新建target,扫描本机redis服务,选择扫描配置为fast and deep ultimate,扫描结果如下
redis漏洞利用


b)        点击Redis Server No Password查看log

redis漏洞利用

c)        根据oid编号去http://www.openvas.org/openvas-nvt-feed.html页面中查找对应nvt

结果如下,可以直接看出nvt对应的nasl脚本及其依赖

redis漏洞利用

redis漏洞利用




也可点击Redis Server No Password查看nvt源代码,找到nvt依赖

redis漏洞利用


d)        新建openvas扫描配置,勾选刚才找到的nvt,保存后重新对本机进行扫描

redis漏洞利用

redis漏洞利用

e)        扫描结果如下

redis漏洞利用

9.       安全建议

a)        配置bind选项,限制连接redis服务的IP地址,修改默认监听端口

b)        设置用户认证

c)        选择性配置rename command,重命名某些命令



10.    总结

a)        在进行redis远程访问时,如果redis服务不是用root用户启动的,使用redis命令设置目录时会出现权限不足,操作拒绝错误。

b)        使用虚拟机openvas扫描局域网虚拟主机时并未扫描出漏洞,原因尚不明确。

c)        在openvas网站上找到对应nvt及其相关依赖后,在openvas扫描配置中添加该项目时难以寻找

在配置一些网络服务时,要么有安全严密的验证机制,要么就不能开放在公网上,对连接进来的IP地址要有所限制。