本文介绍Redis的CSRF漏洞是如何发生的,同时介绍云数据库Redis版的安全措施。
CSRF介绍
CSRF(Cross-site request forgery)跨站请求伪造,也被称为One Click Attack或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。
上图为CSRF攻击的一个简单模型:用户访问恶意网站B,恶意网站B返回给用户的HTTP信息中要求用户访问网站A,而由于用户和网站A之间可能已经有信任关系导致这个请求就像用户真实发送的一样会被执行。
Redis CSRF攻击模型
根据上面CSRF的原理,恶意网站可以让用户发送一个HTTP请求给Redis。由于Redis支持文本协议,而在解析协议过程中如果碰到非法的协议并不会断开链接,这个时候攻击者可以通过在正常的HTTP请求之后携带Redis命令从而在Redis上执行命令,而如果用户和Redis之间没有密码验证,则可以正常执行Redis命令并对数据进行加密勒索,就像之前MongoDB赎金事件一样。
内核修复
Redis作者在3.2.7版本对该问题进行了一个修复,解决方案是对于POST
和Host:
的关键字进行特殊处理记录日志并断开该链接避免后续Redis合法请求的执行。
Redis安全风险
更早之前Redis暴露了一个安全漏洞,黑客在某一条件下可以拿到Redis服务的root权限,这些安全漏洞发生的原因主要是因为用户对于Redis的安全机制了解比较少,还有用户缺少Redis相关的运维经验,同时由于Redis也没有提供更丰富的安全防护机制。云数据库Redis版提供了更安全的Redis服务,对于云上的Redis服务建议使用云数据库Redis服务。
云数据库Redis版安全规范
内网访问,避免公网访问
云数据库Redis版提供可信任的内网访问,不申请外网连接地址则无法直接从外网访问云数据库Redis版。
物理网络隔离
云数据库Redis版物理机网络和用户网络物理隔离,用户虚拟机无法直接访问后端物理机网络。
VPC网络隔离
对于阿里云用户如果使用专有云VPC网络,则能够保证只有同一个VPC网络下的服务可以互相访问。
白名单
云数据库Redis版支持白名单设置,用户可以在控制台设置可以访问的IP白名单。
密码访问
云数据库Redis版对于经典网络的实例强制开启密码鉴权,用户可以通过设置复杂的密码避免密码被攻破。
访问权限隔离
云数据库Redis版后端每个实例进行权限和访问目录的隔离,每个实例都只能访问自己实例的路径,避免实例之间的互相影响。
禁用危险命令
云数据库Redis版禁用了一些危险的系统管理命令config,save等,用户如果需要进行参数修改需要通过控制台二次验证之后才能修改,同时也避免了直接操作后端的配置文件及管理命令。
安全监控
云数据库Redis版具有完善的物理机安全监控,定期扫描和更新安全监控策略,提早发现安全风险。
Redis集群密码
原生Redis 3.0的cluster版本不支持密码验证,云数据库Redis版集群版本支持密码验证,提高了安全性。