redis未授权访问漏洞

0x00 redis

Redis 是一个高性能的key-value数据库。它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。
在此基础上,redis支持各种不同方式的排序。为了保证效率,数据都是缓存在内存中。redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave同步。

0x01 redis未授权访问

Redis因配置不当可以导致未授权访问,被攻击者恶意利用。当前流行的针对Redis未授权访问的一种新型攻击方式,在特定条件下,如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器,可导致服务器权限被获取和数据删除、泄露或加密勒索事件发生,严重危害业务正常服务。

0x02 redis未授权访问漏洞产生的原因

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

0x03 漏洞重现和利用

首先在靶机安装redis并且不设置密码

1
sudo yum install redis* -y

在靶机安装ssh服务

1
sudo yum install openssh

在靶机配置redis配置文件,注释掉ip限制,并且设置安全设置为no,使其可以在公网被访问

1
vi /etc/redis.conf

重启redis服务

测试是否在公网开启

在靶机打开ssh服务

在主机本地生成ssh公钥

连接靶机redis服务,并利用redis未授权访问漏洞在目标服务器/root/.ssh文件夹的authotrized_keys写入刚才创建的ssh公钥

利用本机的ssh私钥登陆靶机服务器

0x04 使用openvas对该存在漏洞的系统进行扫描

通过openvas扫描靶机系统,可以得到以下结果:


0x05 危害

  • 数据库数据泄露
    Redis 作为数据库,保存着各种各样的数据,如果存在未授权访问的情况,将会导致数据的泄露,其中包含保存的用户信息等。
  • 代码执行
    Redis可以嵌套Lua脚本的特性将会导致代码执行, 危害同其他服务器端的代码执行
    一旦攻击者能够在服务器端执行任意代码, 攻击方式将会变得多且复杂, 这是非常危险的。
    通过Lua代码攻击者可以调用 redis.sha1hex() 函数,恶意利用 Redis 服务器进行 SHA-1 的破解。
  • 敏感信息泄露
    通过 Redis 的 INFO 命令, 可以查看服务器相关的参数和敏感信息, 为攻击者的后续渗透做铺垫。

0x06 应对方案

Redis未授权访问漏洞是一个出现广泛并且危害巨大的漏洞,会直接导致整个服务器沦陷,要预防则需要做到:

  • (1)禁止使用 root 权限启动 redis 服务;
  • (2)对 redis 访问启用密码认证,尤其不能使用空密码;
  • (3)添加 IP 访问限制;
  • (4)尽可能不对公网直接开放 SSH 服务。
fork me on github