Redis未授权访问漏洞学习
欢迎来我的博客,这是我在学习redis未授权访问漏洞的一些操作与收获。学习的目的是为了更好的了解这个漏洞,然后去防御它,而不是为了危害他人。
实验背景:
1.VMware 12 pro
2.fedora 27
3.两台虚拟机A,B
了解漏洞
redis是什么?
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。Redis的外围由一个键、值映射的字典构成。为高速低负载存储系统提供了一种解决方案。
redis未授权访问漏洞产生的原因是什么?
Redis 默认情况下,会绑定在 0.0.0.0:6379,这样将会将 Redis 服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis的数据。攻击者在未授权访问 Redis 的情况下可以利用 Redis 的相关方法,可以成功在 Redis 服务器上写入公钥,进而可以使用对应私钥直接登录目标服务器。
分析漏洞原理
漏洞原理及其危害
redis设计之初仅用于本机加快数据存取的速度,或者说,开发独立的权限认证系统开销过于冗杂,所以redis默认并未开启权限认证机制,未区分普通用户和管理员账户,使得暴漏在公网上的redis服务器可以被任意主机连接执行redis内置命令。若配合ssh,可以实现root远程登录,危害十分巨大。
漏洞利用条件
a)以root权限运行redis服务
b)redis服务器暴露在公网环境
c)redis服务允许除本机之外的所有主机登录
漏洞的重现和利用
安装redis
可以直接通过软件源安装1
$ sudo yum install redis
根据漏洞原理配置redis
先打开redis的配置文件
1 | $ sudo vim /etc/redis.conf |
bind的意思不是绑定外部服务器的IP,而是绑定本机可以接受访问的IP
密码设置为没有。(在requirepass前面加注释号)
开启redis服务1
$ sudo redis-server /etc/redis.conf
在打开虚拟机后输入ifconfig查看ip地址,相互ping得通即可继续实验
在另外一台虚拟机上连接该虚拟机,若成功则环境搭配成功。
安装ssh服务端
系统应该默认安装了,没有安装的话可以执行下面命令1
$ sudo yum install openssh-server
开启ssh公钥登录,并验证是否正确开启。
先打开ssh的配置文件1
$ sudo vim /etc/ssh/sshd_config
虚拟机A找到RSAAuthentication、PubkeyAuthentication、AuthorizedKeyFiles、StrictModes所在的行,如果被#注释了,就取消#号,改为如下配置:1
2
3
4$ RSAAuthentication yes 开启使用RSA算法的基于rhosts的安全验证;
$ PubkeyAuthentication yes 开启公钥验证;
$ AuthorizedKeyFiles .ssh/authorized_keys 后面的目录,是你上传的公钥所保存的文件;
$ StrictModes no 设置关闭ssh在接收登录请求之前先检查用户家目录和rhosts文件的权限和所有权。
之后执行1
$ sudo service sshd start (抑或是restart)
对漏洞进行利用
(提示:利用redis写入ssh证书并登录)
1.虚拟机B生成公私钥文件,并将公钥文件内容重定向至其他文件1
2$ ssh-keygen
$ (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > foo.txt
2.启动fedora redis服务
3.使用ssh.txt的内容作为标准输入,执行redis –cli命令,登录成功后使用set dir命令改变目录,设置文件名称,保存生成公钥文件。
4.之后直接用ssh登录虚拟机B(这时候应该是root权限),这就相当于入侵了别人的电脑
建议修复方案
1、指定redis服务使用的网卡 (需要重启redis才能生效)
在 redis.conf 文件中找到 “# bind 127.0.0.1” ,把前面的#号去掉,然后保存。注:修改后只有本机才能访问Redis。
2、设置访问密码 (需要重启redis才能生效)
在 redis.conf 中找到“requirepass”字段,在后面填上你需要的密码,Redis客户端也需要使用此密码来访问Redis服务。
3、修改Redis服务运行账号 (需要重启redis才能生效)
请以较低权限账号运行Redis服务,且禁用该账号的登录权限。另外可以限制攻击者往敏感写入文件,但是Redis数据还是能被黑客访问到,或者被黑客恶意删除。
4、设置防火墙策略
如果正常业务中Redis服务需要被其他服务器来访问,可以设置iptables策略仅允许指定的IP来访问Redis服务。