redis漏洞利用
redis未授权访问漏洞学习
1. redis是什么
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。Redis的外围由一个键、值映射的字典构成。为高速低负载存储系统提供了一种解决方案。
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 &
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上生成公私钥文件
e) 将公钥文件内容重定向至其他文件(比如ssh.txt)
a) 启动fedora redis服务
b) 使用ssh.txt的内容作为标准输入,执行redis –cli命令,登录成功后使用set dir命令改变目录,设置文件名称,保存生成公钥文件。
c) 此后在fedora开启sshd服务。
d) 在kali上使用ssh命令-i选项指定本地私钥文件以root用户名登录fedora主机,登录成功如下图所示
7. 从上述结果可以看出,确实可以通过这种方式获取root登录权限,如果公司服务器存在此类漏洞
a) 通过 Redis 的 INFO 命令, 可以查看服务器相关的参数和敏感信息, 为攻击者的后续渗透做铺垫
b) Redis 作为数据库,保存着各种各样的数据,如果存在未授权访问的情况,将会导致数据的泄露,其中包含保存的用户信息等
c) Redis可以嵌套Lua脚本的特性将会导致代码执行, 危害同其他服务器端的代码执行, 一旦攻击者能够在服务器端执行任意代码, 攻击方式将会变得多且复杂, 这是非常危险的
8. 使用openvas对该漏洞进行扫描
a) 在openvas中新建target,扫描本机redis服务,选择扫描配置为fast and deep ultimate,扫描结果如下
b) 点击Redis Server No Password查看log
c) 根据oid编号去http://www.openvas.org/openvas-nvt-feed.html页面中查找对应nvt
结果如下,可以直接看出nvt对应的nasl脚本及其依赖
也可点击Redis Server No Password查看nvt源代码,找到nvt依赖
d) 新建openvas扫描配置,勾选刚才找到的nvt,保存后重新对本机进行扫描
e) 扫描结果如下
9. 安全建议
a) 配置bind选项,限制连接redis服务的IP地址,修改默认监听端口
b) 设置用户认证
c) 选择性配置rename command,重命名某些命令
10. 总结
a) 在进行redis远程访问时,如果redis服务不是用root用户启动的,使用redis命令设置目录时会出现权限不足,操作拒绝错误。
b) 使用虚拟机openvas扫描局域网虚拟主机时并未扫描出漏洞,原因尚不明确。
c) 在openvas网站上找到对应nvt及其相关依赖后,在openvas扫描配置中添加该项目时难以寻找
在配置一些网络服务时,要么有安全严密的验证机制,要么就不能开放在公网上,对连接进来的IP地址要有所限制。