Redis常规安全加固

56 阅读4分钟

Redis常规安全加固

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天

1、背景说明

Redis 因配置不当存在未授权访问漏洞,可以被攻击者恶意利用。常见的就是进行挂马,挖矿,进而导致服务器沦陷,造成不可挽回的损失。

相关案例:

Redis挖矿原理案例

2、加固方案

2.1、使用非root用户启动

在特定条件下,如果Redis以root身份运行,黑客可以给root账号写入SSH公钥文件,直接通过 SSH 登录受害服务器,从而获取服务器权限和数据。一旦入侵成功,攻击者可直接添加账号用于 SSH 远程登录控制服务器,给用户的Redis运行环境以及Linux主机带来安全风险,如删除、泄露或加密重要数据,引发勒索事件等。所以redis最好不要使用root用户进行启动,例如可以创建一个低权限用户账号。通过该账号进行安装和启动redis服务。

安装过程,请参考Centos 7下安装Redis最新稳定版

2.2、禁止远程访问

我们可以通过修改redis.conf文件中的bind属性来限制访问redis服务的ip。如下:

  • 仅限本机访问

修改redis.conf配置文件中的bind属性,默认就是,无需修改。

bind 127.0.0.1 -::1
  • 指定IP可以访问

如果需要远程访问,可通过增加防火墙(iptables)放行对应ip访问redis服务端口,例如增加允许 192.168.3.1IP访问。如果是云厂商的服务器可以通过修改入站规则进行端口放行配置。

iptables -A INPUT -s 192.168.3.1 -p tcp --dport 6379 -j ACCEPT

2.3、增加访问认证密码

找到redis.conf文件中的 requirepass 属性,默认是注释掉的,放开并设置自己的密码即可, 密码最好搞的复杂度高点(字母、数字、特殊字符)。

示例:

requirepass  xuexiaojianAa@20221025#@!...

2.4、修改默认端口

一般不建议使用默认端口,因为有些非法人员很容易进行常见端口扫描,发现你的端口开着,就知道你的服务器上部署了redis,进而进行下一步攻击操作。修改redis.conf配置文件中的port属性为非默认端口即可,注意端口冲突。加大或者减少都可以。

示例:

port 6370

2.5、限制配置文件访问权限

修改redis配置文件的访问权限,因为密码,端口都是明文存储在该文件中的,所以要禁止不相关的用户访问修改配置文件,切换到jianzhang用户进行授权。

  • 切换用户
su  jianzhang
  • 修改配置文件权限
chmod 600 redis.conf

2.6、禁用或者重命名危险命令

Redis无权限分离,其管理员账号和普通账号无明显区分。攻击者登录后可执行任意操作,因此需要隐藏以下重要命令: FLUSHDB, FLUSHALL, KEYS,PEXPIRE, DEL, CONFIG, SHUTDOWN, BGREWRITEAOF, BGSAVE, SAVE, SPOP, SREM, RENAME,DEBUG, EVAL

另外,在Redis 2.8.1及Redis 3.x(低于 3.0.2)版本下存在EVAL 沙箱逃逸漏洞,攻击者可通过该漏洞执行任意Lua代码。

xiug修改配置将设置为空,即禁用该命令;也可设置为一些复杂的、难以猜测的名字。

  • 禁用命令示例

在redis.conf文件中增加如下配置即可,如下仅是示例,根据实际情况进行设置

rename-command FLUSHALL ""
rename-command FLUSHDB  ""
rename-command CONFIG   ""
rename-command KEYS     ""
rename-command SHUTDOWN ""
rename-command EVAL ""
  • 重命名关键命令示例

在redis.conf文件中增加如下配置即可

rename-command FLUSHALL 123XXXFLUSHALL
rename-command KEYS  MyOwenKeys

2.7、开启保护模式

redis默认开启保护模式。要是配置里没有指定bind和密码,开启该参数后,redis只能本地访问,拒绝外部访问。

protected-mode yes

2.8、漏洞打补丁或升级版本

定期关注最新软件版本,并及时升级Redis到最新版,防止新漏洞被恶意利用。

3、注意事项

  • 以上修改配置文件都需要重启redis服务。
  • 以上都是单机版操作步骤,集群模式请自行调整。