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