NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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:521339

评论

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

药以安为先,如何用技术升级助力药品质量升级?

WorkPlus

在企业软件中负责任地使用开放源代码

WorkPlus

字节跳动实习生删库高操作

学神来啦

Linux 程序员 职场搞笑 linux运维

花2个月备战字节,3轮面试拿下总包60W Offer!

Java架构师迁哥

CVPR2021竞赛结果出炉,阿里淘系多媒体算法包揽3项国际冠军

阿里巴巴大淘宝技术

CVPR

从特斯拉召回事件,窥探OTA汽车进化真面目

脑极体

IPFS挖矿靠谱吗?IPFS挖矿合法吗?

区块链 IPFS

🏆「推荐收藏」【Spring源码专题】彻底让你明白【IOC容器初始化】运行原理和源码流程

洛神灬殇

spring 容器 源码分析 7月日更

将 FeignClient 的请求记录成 cURL 格式

哈德韦

微服务 前后端分离 log4j curl Spring boot Feign

模块1

cherrycheek

云原生负载均衡和网关应用实践

火山引擎开发者社区

云原生 后端

AQS介绍和原理分析(下)

追风少年

并发编程 AQS

为技术系统打“疫苗”,爱奇艺攻防演练平台的探索实践

爱奇艺技术产品团队

架构 安全攻防 开发 混沌工程

iOS 15隐私升级及注意事项

阿里巴巴大淘宝技术

ios WWDC21

利用 IComparable<T> 以及 IComparer<T> 定义顺序关系

喵叔

7月日更

强!上线3天获10w浏览量,京东T8纯手码Redis缓存手册,我粉了

Java 数据库 redis 架构 面试

什么是数据仓库

奔向架构师

数据库 数据仓库 数据架构 话题讨论 7月日更

Linux常用命令-文件操作

正向成长

linux命令

新能源车的发展趋势

石云升

学习 新能源汽车 7月日更

网络攻防学习笔记 Day62

穿过生命散发芬芳

网络攻防 7月日更

Vitalik Buterin眼中的区块链信任模型

CECBC

免费分享入门学习Java的优秀图书

Java入门到架构

Java 书籍 Java入门

国内市场主流音视频产品主要功能分析

anyRTC开发者

音视频 WebRTC 语音通话 实时通讯 视频通话

如何实现跨设备的双向连接? Labo涂鸦鸿蒙亲子版分布式开发技术分享

科技汇

数字新金融到底是什么样的金融

CECBC

科创人|容联七陌CEO陈光:90后街舞少年的CEO修炼手册

科创人

人工智能 创业 程序员

Python协程 & 异步编程(asyncio) 入门介绍

行者AI

#python

全表遍历并处理数据有点慢?放开!我来!

林一

jpa Stram @QueryHints

2022秋春招/提前批面经分享总结(字节、腾讯、阿里)

学无止境的阿奔

腾讯 面试 阿里 字节 校招

Flink知识点总结

五分钟学大数据

flink 7月日更

大专的我,闭关苦学56天,含泪拿下阿里offer,五轮面试,六个小时灵魂拷问

Java架构师迁哥

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