Redis中服务端请求伪造SSRF的示例分析

1. 什么是SSRF漏洞

SSRF(Server-Side Request Forgery)攻击,指攻击者在当前易受攻击的网站服务器上构造出伪造的 http 请求,在这些请求中,可能会有一些指向内网的地址(如:192.168.x.x),当这些请求在服务器上执行时,由于缺少有效的限制措施,容易导致对内部系统进行攻击或者滥用内网资源。

攻击者利用SSRF漏洞,可能会造成以下安全威胁:

访问应用程序不能访问的资源

利用内网通信协议进行攻击

入侵服务器

SSRF漏洞的成因在于开发者没有对用户输入的URL地址进行充分的验证,导致对于恶意构造的URL地址服务器解析时存在漏洞。例如,应用程序直接将请求的URL作为参数发给后端服务,而没有对URL进行有效检查、过滤和限制,这就使得攻击者可以发送构造精巧的请求,以此获得额外的网络权限。

2. Redis SSRF漏洞示例简述

Redis是一款基于内存的缓存数据库,广泛应用于Web应用程序中。2013年10月份,Redis官方发现了一种新的攻击方式——SSRF(Server-Side Request Forgery,中文名:服务端请求伪造)攻击,该攻击利用了Redis的特殊特性,可能造成内网服务泄露等安全威胁。

Redis的SSRF攻击漏洞主要是源于慢查询特性的未实现限制。攻击者通过慢查询,从而将 redis 的服务器甚至整个内网暴露给了攻击者,以实现远程入侵等目的。

3. Redis服务端请求伪造漏洞原理解析

Redis的服务端请求伪造漏洞发生在Redis的慢查询特性中。具体实现的来源是 Redis 2.6.0 以后的版本 slowlog

3.1. Redis慢查询特性介绍

Redis的慢查询是Redis自带的一种功能,在生产环境中能有效的监控Redis服务器中指定执行时间以上的命令。管理员和开发人员可以通过这个功能,观察Redis服务器中发生的问题情况。我们可以通过执行slowlog get命令,查询Redis中最近执行的慢查询命令,slowlog命令仍是非常有用的。

3.2. Redis慢查询容易导致SSRF漏洞的原因

由于Redis慢查询特性没有实现应有的安全限制,攻击者可以通过发送一个Payload到Redis server,以达到在redis server端向内网的发起攻击的目的。 这就是一个非常经典的服务端完全注入,即通过在服务端构造代码payload,达到攻击目的。而由于Redis server通常是放置在DMZ区外面的,这 就导致了它的服务端完全注入漏洞极其危险。

4. Redis服务端请求伪造漏洞的影响

Redis服务端请求伪造的漏洞主要是源于慢查询特性的未实现限制,在攻击者利用慢查询的过程中,Redis server将攻击者提供的地址、端口作为目标地址、端口请求外部系统,进而导致攻击者发起服务器端SSRF攻击、甚至是读取服务端敏感信息的漏洞。攻击者主要是通过指定目标地址来进行攻击,例如在发送一条慢查询的指令时,同时可以指定要查询的地址。通过输入危险的地址,攻击者可以成功访问没有授权的内部系统,影响企业的机密数据安全。

5. Redis服务端请求伪造漏洞方式的防御方法

5.1. 设置 bind 属性

在redis.conf设置文件中,bind属性默认参数是127.0.0.1,即 redis只会接受来自本地的请求。如果bind是0.0.0.0,服务器将会接受来自于本地以外任何地址的请求。因此,我们应该设置bind属性的值以限制服务器只接收来自认证客户端的请求。

bind 127.0.0.1

5.2. 设置密码保护

在redis.conf配置文件中可以设置redis服务端的认证密码。添加密码是增加安全性的一种可靠的方式。

requirepass mypassword

5.3. 禁用危险命令

一些特定的redis内置命令,如 config,info,keys,script 等,容易被恶意利用。我们可以重命名一些命令,或者使用rename-config命令重命名config命令。

# 禁止危险命令(处理重命名)

rename-command CONFIG ""

rename-command CONFIG_ ""

rename-command KEYS ""

# 重命名将推荐取消的命令

rename-command QUIT qwertyuiop0987654321

5.4. 使用代理服务器

使用代理服务器是防止对Redis提供的服务发起“服务端请求伪造”攻击的一种有效途径。当我们使用Redis集群时,我们可以通过使用代理方式进行让攻击者只能访问代理服务器,无法直接访问整个Redis集群。

6. 总结

Redis服务端请求伪造漏洞已成为目前互联网常见的一种入侵手段之一,带来的危害极大。纵观 Redis服务端请求伪造漏洞发生的原因,我们可以发现漏洞的产生是因开发者没有对 Redis慢查询特性进行充分的限制措施,没有对用户输入的URL地址进行验证。解决这一问题则需要使用多种有效的措施,包括绑定IP、设置密码、禁用危险命令、使用代理服务器等方法来提高防御能力。

数据库标签