当前位置:首页 > 问答 > 正文

Redis漏洞怎么被攻破,防守和攻击其实都能学点套路,实操教学来了

(引用来源:网络安全技术社区、渗透测试实战经验总结)

Redis这个玩意儿,说白了就是一个速度特别快的“大字典”,放在内存里干活,很多网站和应用都喜欢用它来存一些临时数据,比如用户的登录状态、购物车里的东西什么的,因为它追求速度,所以早期版本在设计上就没把安全放在第一位,默认设置就跟家里大门敞开似的,留下了不少空子,今天咱们就聊聊攻击者是怎么利用这些空子钻进来的,以及咱们该怎么把门锁好,这中间的门道,不管是想防守还是想了解攻击思路,都能学到点实用的套路。

攻击者是怎么找上门并攻破的?

攻击者干这事,第一步绝对不是上来就敲代码,而是“踩点”,他们会用扫描工具,比如那个很有名的Shodan,在网络上到处找那些把Redis服务端口(默认是6379端口)直接暴露在公网上的机器,这就好比小偷在小区里挨家挨户推门,看谁家没锁,一旦发现某台服务器的6379端口能直接连上,机会就来了。

连上去之后,常见的攻击套路有这么几种,一点都不复杂:

第一招,最简单粗暴的,叫“数据破坏”。(引用来源:基于公开漏洞CVE-2015-4335等案例)因为早期Redis默认不需要密码就能访问(空口令),攻击者连上之后,直接用几个简单的命令就能把你的数据库清空,比如执行一个FLUSHALL命令,你里面存的所有数据瞬间就没了,这对于一个正在运行的业务来说,简直是灾难,这招没啥技术含量,纯属搞破坏,但危害极大。

第二招,也是更阴险的一招,叫“写Webshell”。(引用来源:多次真实网站入侵事件分析)这个套路的前提是,攻击者不仅连上了你的Redis,还碰巧知道你服务器上网站源代码放在哪个目录下(比如常见的/var/www/html),Redis有个功能,可以把内存里的数据保存到硬盘上一个叫dump.rdb的文件里,攻击者就利用这个功能,他先通过Redis命令,把自己的一句话木马(就是一段能让他远程控制网站的恶意代码)写成键值对,然后偷偷地把Redis的持久化文件保存路径,设置成你网站的目录,并且把文件名改成比如shell.php,他触发一下保存操作,这样,一个原本是Redis的数据文件,就变成了一个可以通过浏览器访问的恶意网页文件,攻击者只要访问这个网页,就能获得你服务器的控制权,想干嘛就干嘛了,这招就是把Redis当成了一个往里写木马文件的“搬运工”。

第三招,比较高级点,叫“SSH密钥植入”。(引用来源:服务器攻防演练常见手法)这个思路和写Webshell很像,目标是获取服务器的更高权限,攻击者会想办法把他自己的SSH公钥,写入到目标服务器管理员的authorized_keys文件里,这个文件是干嘛的呢?你有了里面的钥匙,就可以不用密码直接登录服务器,攻击者也是通过Redis,把公钥内容写进去,然后改变Redis的持久化文件路径和文件名,覆盖掉原来的authorized_keys文件,这样一来,他下次就能大摇大摆地用自己的私钥登录你的服务器,跟回自己家一样。

那咱们该怎么守呢?防守的套路其实更简单有效。

知道了别人怎么打你,防守起来就很有针对性了,核心思想就是“缩小攻击面”,不给对方任何可乘之机。

  1. 最最最重要的一条:绝对不要让Redis服务暴露在公网上!(引用来源:Redis官方安全建议)这是底线,就像你不能把保险柜放在马路边上一样,通过防火墙或者安全组策略,严格限制只有可信的、真正需要访问Redis的服务器IP(比如你的Web应用服务器)才能连接到6379端口,其他任何来自互联网的访问请求,统统拒之门外,这一条能做到,上面说的所有攻击方法基本就失效了八成。

  2. 给Redis设一个又长又复杂的密码。(引用来源:基本安全实践)别再用空口令或者123456这种密码了,在Redis的配置文件redis.conf里,找到requirepass这个选项,设一个强密码,这样,即使有人侥幸发现了你的服务,连上来之后也要先过密码这一关。

  3. 禁止高危命令。(引用来源:生产环境加固指南)像FLUSHALLCONFIGEVAL这些命令,在正式的业务环境里,普通的应用根本用不到,但它们却是攻击者最爱的工具,你可以在配置文件中,用rename-command指令把这些命令直接重命名成一个超级复杂的、别人猜不到的名字,或者直接重命名为空字符串来彻底禁用它们,比如rename-command FLUSHALL "",这样就算攻击者进来了,他也没法清空你的数据库。

  4. 让Redis以低权限用户运行。(引用来源:权限最小化原则)不要用root这种超级管理员身份来运行Redis服务,应该专门创建一个权限很低的系统用户(比如就叫redis),让Redis用这个用户的身份去运行,这样即使被攻破,攻击者获得的权限也非常有限,他想去覆盖系统重要文件(比如SSH密钥)就会困难重重。

说白了,Redis的攻防就是一场“找漏洞”和“补漏洞”的游戏,攻击者利用的是默认配置的松懈和管理的疏忽,而防守方要做的,就是严格按照安全规范,把该关的门关好,该上的锁上牢,这些套路不仅适用于Redis,对于很多其他服务的安全防护,思路也是相通的,多了解一点攻击者的手法,不是为了去干坏事,而是为了能更好地保护自己的东西。

Redis漏洞怎么被攻破,防守和攻击其实都能学点套路,实操教学来了