当前位置: 首页 > 科技观察

保护Redis安全的策略你知道多少?_0

时间:2023-03-20 10:47:08 科技观察

Redis通用安全模型Redis的设计使得只有受信任环境中的受信任用户才能访问它。这意味着直接在网络上公开Redis实例或让不受信任的用户直接访问Redistcp端口或Unix套接字是不安全的。通常情况下,使用Redis的Web应用程序使用Redis作为数据库、缓存和消息系统。网站的前端用户会查询Redis生成页面,或者执行请求的操作,或者被web应用用户触发。在这种情况下,Web应用程序需要处理不受信任的用户(访问Web应用程序的用户浏览器)对Redis的访问。这是一种特殊情况,但通常需要通过实施ACL、验证用户输入并确定可以在Redis实例上执行哪些操作来控制对Redis的非法访问。总而言之,Redis并没有试图优化安全性,而是尽可能地优化了高性能和易用性。网络安全只有受信任的网络用户才能访问Redis端口,因此运行Redis的服务器应该只能被使用Redis实现的应用程序的计算机直接访问。一般来说,直接暴露在互联网上的计算机,比如虚拟化的Linux实例(Linode,EC2,...),防火墙应该阻止外部用户访问它的redis端口。用户仍然可以通过本地接口访问Redis。记得在redis.conf文件中添加以下配置行,将Redis绑定到单个接口。如果bind127.0.0.1不禁止外部访问Redis,后果会很严重。例如,FLUSHALL操作可以作为外部攻击来删除Redis上的所有数据。身份验证功能尽管Redis不尝试实现访问控制,但它提供了一种轻量级的身份验证方法,可以通过编辑redis.conf文件来启用。启用身份验证授权方法后,Redis将拒绝未经身份验证的用户的任何查询。客户端可以通过发送带有密码的AUTH命令来授权自己。该密码由系统管理员在redis.conf文件中以明文形式设置。它需要足够长的时间来应对暴力攻击。这样设置的原因有两个:redis.conf但同时密码控制也会影响从库的复制,从库必须使用masterauth命令在配置文件中配置相应的密码才能执行复制操作。masterauthyoursecurepasswordhereplease身份验证层的目标是提供额外的保护层。如果防火墙或任何其他系统保护攻击失败,外部客户端仍然无法在没有认证密码的情况下访问Redis实例。与其他Redis命令一样,AUTH命令未加密发送,因此无法防止具有足够网络访问权限的攻击者窃听。数据加密支持Redis不支持加密。为了访问Internet或其他不受信任的网络上的Redis实例,有必要实施新的保护层,例如SSL代理。官方推荐SSL代理:spiped禁用的特殊命令在Redis中,可以禁用命令或重命名为不可预知的名称,让普通用户只能使用部分命令。例如,虚拟化服务器提供商可能会提供管理Redis实例的服务。在这种情况下,可能不允许普通用户调用CONFIG命令修改实例的配置,但需要能够提供删除实例的系统支持修改配置。在这种情况下,您可以重命名该命令或从命令表中禁用该命令。这个特性可以在redis.conf文件中配置。示例:rename-commandCONFIGb840fc02d524045429941cc15f59e41cb7be6c52在上面的示例中,CONFIG命令被重命名为一个错误的猜测名称。可以通过将命令重命名为空字符串来禁用命令,例如以下示例:rename-commandCONFIG""精心设计的输入触发的外部客户端攻击即使没有外部访问,也存在允许攻击者从外部触发的攻击。例如,某些攻击者具有向Redis中插入数据的能力,触发Redis内部数据结构中最差的算法复杂度,例如,攻击者可以通过提交表单的方式,将大量相同的字符串提交到哈希表中,使得O(1)如果算法复杂度(平均时间)达到最差的O(N),Redis将需要更多的CPU来处理,最终导致无法提供服务。为了防止这种特殊的攻击,Redis的哈希函数使用per-Pseudo-randomseed来执行。Redis使用qsort算法来实现SORT命令。目前该算法还不是随机的,所以最坏情况下的算法复杂度可以通过有意设计输入来引入。字符串转义和NoSQL注入Redis的协议没有字符串传输的概念,所以普通客户端一般情况下是无法实现注入的。该协议采用二进制安全的前缀长度字符串。通过EVAL和EVALSHA命令运行Lua脚本也是安全的。尽管这是一种奇怪的用法,但应用程序应避免使用来源不明的字符串编写Lua脚本。代码安全在Redis的传统架构中,客户端可以使用所有的命令,但是在访问Redis实例时,它没有能力控制运行Redis的系统。从本质上讲,Redis使用良好的编程实践来编写安全代码,以防止缓冲区溢出、格式错误和其他内存损坏问题。但是,使用CONFIG命令修改服务器配置的能力允许用户更改程序的工作目录和备份文件的名称。这允许用户在任意路径写入RDB文件,这是一个很容易导致不受信任的代码在Redis上运行的安全问题。Redis运行不需要root权限,建议以只能运行Redis的用户运行。Redis作者正在研究向Redis添加新参数以防止CONFIGSET/GETdir和其他命令运行配置指令的可能性。这可以防止客户端强制服务器将文件写入任意位置。