2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

Redis 缓存数据库安全加固指导(二)

  • 2019-10-21
  • 本文字数:2181 字

    阅读完需:约 7 分钟

Redis缓存数据库安全加固指导(二)

在众多开源缓存技术中,Redis 无疑是目前功能最为强大,应用最多的缓存技术之一,参考 2018 年国外数据库技术权威网站 DB-Engines 关于 key-value 数据库流行度排名,Redis 暂列第一位,但是原生 Redis 版本在安全方面非常薄弱,很多地方不满足安全要求,如果暴露在公网上,极易受到恶意攻击,导致数据泄露和丢失。


本文主要是在原生开源软件 Redis3.0 基础上,系统的在安全特性方面进行的增强,很多增强点涉及了开源代码的修改,后续章节阐述的 Redis 缓存数据库的安全规范, 理论上适用于所有应用 Redis 的产品。


本系列共连载三篇,分九个章节,本文从敏感数据与加密保护,口令安全,日志审计三个章节阐述了 Redis 缓存数据库加固措施

敏感数据与加密保护

1.密码保存(重要)

安全问题:原生 Redis 服务端密码 requirepass 和 masterauth 是明文保存到 redis.conf。


解决方案: 服务端密码采用 PBKDF2 加密后保存到 redis.conf。


考虑到性能问题,每次认证都用 PBKDF2 会比较耗时,经过评审,采用在首次认证成功后,内存采用 SHA256 缓存,后续的请求优先使用 SHA256 校验。

2.支持秘钥替换(重要)

安全问题:涉及加解密的秘钥不能写死到代码中。


解决方案: 秘钥支持定期替换。


  • redis 服务端 redis-server:


配置文件增加配置项:cipher-dir


配置为 redis_shared.key 和 root.key 所在的文件夹的全路径,例如:cipher-dir /opt/redis/etc/cipher


  • redis 客户端:redis-cli


添加参数-cipherdir,指向 redis_shared.key 和 root.key 所在的文件夹的全路径


例如:redis-cli -h 127.0.0.1 -cipherdir /opt/redis/etc/cipher -a sessionrdb@dbuser@Changeme_123 -p 32091


  • redis 客户端 SDK:jedis*.jar


同一个进程内,Jedis 接口为 string, dbname@user@pwd,因为第三方接口(类似 Jdbc),无法加密。

3.密码传输(重要)

安全问题:原生 Redis 通过 config get 命令可能获取到服务端敏感信息。


解决方案:禁止将口令等敏感信息传送到客户端,因此需要禁掉 config get requirepas/masterauth/requireuserpass 等功能。

4.密码修改(重要)

安全问题:修改密码明文传输:config set masterauth pwd


解决方案:Redis 内存保存明文密码问题: masterauth 使用 AES128 加密,密码采用 AES128 保存

口令安全

1.产品缺省启用数据库口令复杂度检查功能

安全问题:Redis 修改密码没有复杂度检查。


解决方案:提供单独的 Redis 修改工具来修改密码,特别注意以下几点:


1.进行口令复杂度检查。


2.在输入错误的用户名或密码时,不能出现类似于“密码错误”、“用户名不存在”之类的过于明确的原因提示信息,以防止攻击者用于猜解系统用户名/口令。


3.修改密码要校验老密码。


4.修改数据库密码不能和用户名一样。


5.交互式密码修改时要隐藏密码。


6.在文档中建议通过交互式修改密码。

2.防暴力破解,配置账户登录失败尝试次数

安全问题:Redis 原生版本存在暴力破解情况。


解决方案:最大失败次数:maxauthfailtimes(单位 次,有效范围(0,10 万],默认值 1 万)


说明:该配置项只支持在启动时 redis.conf 配置,不支持动态修改,屏蔽掉对应 config set。


不支持设置为 0:表示不锁定任何 IP。

3.配置账户锁定后自动解锁时间

鉴权失败锁定时间:authfaillocktime(单位分钟,有效范围[0~999],默认值 10)


设置为 0 时,表示永久锁定。


说明: 该配置项只支持在启动时 redis.conf 配置,不支持动态修改,屏蔽掉对应 config set。

4.查看锁定 IP

问题:IP 锁定后需要查看被锁定 IP。


解决方案:


只有管理员可以查看已经锁定的 IP 列表,分隔符为英文冒号(:)


示例 1:config get lockedips


返回:10.67.147.111;10.67.147.112;


示例 2:config get lockedips


返回:10.67.147.111;


说明:不支持 config set lockedips,如果强制执行,返回错误:ERR Unsupported CONFIG parameter: lockedips

5.手工锁定 IP 的解除

只有管理员可以执行命令解锁锁定的 IP,只支持解锁单个 IP 或者解锁全部 IP


解决方案:


示例 1,解锁单个 IP:config set unlockips 10.67.147.111


示例 2,解锁所有 IP:config set unlockips “all”


说明:不支持 config get unlockips,如果强制执行,返回空,redis-cli 提示:(empty list or set)


如果参数中的 IP 没有出现过异常,会返回解锁失败,例如:


(error) ERR Invalid argument ‘10.67.147.111’ for CONFIG SET ‘unlockips’


执行手动解锁,记录 trace,例如:


例如:26 Dec 03:15:19.958 * 10.67.147.113 unlocked by 10.67.147.111:59417 日志审计

6.安全审计

1.Redis 自身支持日志记录到系统日志,如/var/log/localmessage。但需要通过在 redis.conf 进行如下配置:


syslog-enabled yessyslog-ident redissyslog-facility local0
复制代码


2.客户端登录,记录客户端 IP,账号等信息。


3.相关维护操作必须有详细的日志记录。


示例: 29118:S 26 Nov 11:19:29.100 * The readdbuser logged in successfully;10.145.93.119:52817;

7.操作日志转储

安全问题:官方版本 Redis 日志不会转储,长时间运行可能会把磁盘占满。


解决方案:单独运行 tracemonitor 进程(python 版),定期管理 Redis 日志文件大小,主要是日志压缩和定期删除,避免占用过多磁盘。


说明:目前平台默认 60 秒检测一次,日志达到 20M 压缩,日志个数最大 50 个。


本文转载自公众号中间件小哥(ID:huawei_kevin)。


原文链接:


https://mp.weixin.qq.com/s/oNZmP-vH52mPK8AVBEAZ7A


2019-10-21 23:521871

评论

发布
暂无评论
发现更多内容

企业数字化转型之路,从这里开始

天翼云开发者社区

数字化转型 云存储

国内低代码开发平台靠谱的都有哪些?

AIRIOT

低代码 物联网 低代码,项目开发

使用 RepositoryProvider简化父子组件的传值

岛上码农

flutter ios 安卓 移动端开发 7月月更

尚硅谷尚优选项目教程发布

小谷哥

Web3.0时代来了,看天翼云存储资源盘活系统如何赋能新基建(下)

天翼云开发者社区

数字化 云存储

RedHat7.4配置yum软件仓库(RHEL7.4)

Albert Edison

7月月更

7000+字图文并茂解带你深入理解java锁升级的每个细节

华为云开发者联盟

Java 开发 华为云

EMQX 5.0 发布:单集群支持 1 亿 MQTT 连接的开源物联网消息服务器

EMQ映云科技

物联网 IoT mqtt #开源 7月月更

不要再手动批量替换了,使用python AST模块批量替换

阿呆

Python AST 批量替换

XaaS 陷阱:万物皆服务(可能)并不是IT真正需要的东西

雨果

云服务 xaas DaaS 本地服务

无人自助洗车机投放选址有啥要点

共享电单车厂家

自助洗车加盟 车白兔自助洗车 自助洗车机投放

彻底理解为什么网络 I/O 会被阻塞?

C++后台开发

网络编程 socket 非阻塞网络I/O C++后台开发 C++开发

Vue和小程序的关系

Geek_99967b

小程序 Vue

MySQL数据库索引教程(超详细)

Albert Edison

7月月更

华律网牵手观测云,上线系统全链路可观测平台

观测云

跨境支付平台 XTransfer 的低代码实践:如何与其他中台融合是核心

XTransfer技术

技术 前端

来看一看智能自助洗车怎么加盟?

共享电单车厂家

自助洗车加盟 加盟自助洗车 车白兔自助洗车

开创人工智能产业新未来!7月8日昇思生态论坛与你相约广州

科技热闻

中文版Postman?功能真心强大!

Liam

Java 开发者工具 Postman 后端开发 程序员进阶

AI金榜题名时,MLPerf榜单的份量究竟有多重?

脑极体

Spring你牛个啥,我承认刚才说话我声音有点大

zxhtom

7月月更

【愚公系列】2022年7月 Go教学课程 004-Go代码注释

愚公搬代码

7月月更

5. 数据访问 - EntityFramework集成

MASA技术团队

C# .net 微软 后端 Framework

企业级数据安全,天翼云是这样理解的

天翼云开发者社区

数据安全

Linux RedHat7.4更换阿里云yum源

Albert Edison

7月月更

一朵云开启智慧交通新未来

天翼云开发者社区

区块链 大数据 物联网

鱼和熊掌可以兼得!天翼云弹性裸金属一招鲜!

天翼云开发者社区

服务器 弹性扩容

集合处理的利器

技术小生

java8 7月月更

一文读懂简单查询代价估算

华为云开发者联盟

数据库 后端 查询引擎

Ubuntu 20.04 安装 Chisel

贾献华

7月月更

【刷题记录】1. 两数之和

WangNing

7月月更

Redis缓存数据库安全加固指导(二)_文化 & 方法_中间件小哥_InfoQ精选文章