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

惊了,我被Redis入侵了_0

时间:2023-03-18 20:07:55 科技观察

好吧,我也搞了个头条党,像我这样细心的同学怎么可能让服务器被入侵呢?其实是这样的。昨天和一个朋友聊天,他说他有一个运行Redis数据库的云服务器。有一天,他突然发现数据库中的所有数据都不见了,只剩下一对奇怪的键值对,值看起来像是一串RSA公钥。他认为删除数据库是个错误。还好我的服务器里没有什么重要的数据,也就没在意。一番交谈后得知,他跑的是一个比较老的开源项目,已经停止维护,安装的是老版本的Redis,对Linux的使用不是很熟练。我知道他的服务器被攻破了,想着可能有很多人和我朋友一样不注意操作系统权限、防火墙设置、数据库保护,所以写了一篇文章简单看了下。找出发生这种情况的原因以及如何预防。PS:这种做法已经不可行了,因为新版本的Redis增加了protect模式来增加安全性。我们只能在本地模拟,所以不要随便尝试。事后,这种攻击方式其实是2015年的事情了,当时Redis的安全防护机制比较差,只能由运维人员进行适当的配置,才能保证数据库的安全。一时间,全球数万个Redis节点遭到攻击,出现了上述怪异现象。所有的数据都被清除了,只剩下一个密钥,叫做crackit,它的值是一个类似于RSA公钥的字符串。后经验证,攻击者利用Redis的动态设置配置和数据持久化功能,将自己的RSA公钥写入/root/.用户,侵入对方系统。被攻陷服务器的安全防护很差,具体如下:Redis端口为默认端口,可以从公网访问。Redis还没有密码。Redis进程由root用户启动。以上几点都是比较危险的。综合起来,实在是太致命了。别说是别人把公钥写入你的系统,就算你连接上你的数据库,然后删除数据库,损失也够大了。那么具体的过程是怎样的呢,我在本地环回地址上简单演示一下。Redis监听本地演示默认端口为6379,我们设置为从网卡127.0.0.1接收连接,这样我本地肯定能连接到Redis,从而模拟出“公网可以访问Redis”的情况”。现在我是一个普通用户fdl,我想ssh到我系统上的root用户,我必须输入root的密码,我不知道,所以我无法登录。除了密码登录,你也可以使用RSA密钥对登录,但我必须把我的公钥保存在root的主目录/root/.ssh/authored_keys。我们知道/root目录的权限设置不允许任何其他用户闯入读写:但是,我发现我可以直接访问Redis:如果Redis是以root身份运行的,那么我可以操作Redis让它将我的公钥写入root的主目录。Redis的一种持久化方式是生成RDB文件,其中会包含原始数据。我露出邪恶的笑容,先把Redis里面的数据全部清空,然后把我的RSA公钥写入数据库。这里首尾加换行是为了避免RDB文件生成时破坏公钥串:命令Redis将生成的数据文件保存到/root/.ssh/中的authorized_keys文件中:现在root的家目录已经包含我们的RSA公钥,现在我们可以通过密钥对登录root了:看看刚才写入roothome的公钥:乱码是GDB文件的某种编码,但是公钥中间被完整保留下来,ssh登录程序连这个被乱码包围的公钥都认得出来!至此,有了root权限,你就可以为所欲为了。..吸取教训,虽然基本不会受到这种攻击(新版Redis没有密码默认是不对外开放的),但是大家还是要注意系统的安全性。我们自己摆弄东西,使用低配置的云服务器,一般不会为了省事而仔细配置防火墙。数据库没有密码或设置为简单密码,例如admin或root。反正没有数据。这绝对不是一个好习惯。现在我们的计算机系统越来越完善,每一个成熟的项目都是由最好的一群人维护的,从技术上来说应该算是无懈可击的,所以唯一会出错的是使用它们的人。就像我经常看到有人QQ被盗一样,我相信盗号的人一定不是去腾讯的数据库盗号,一定是QQ号主人安全意识差,在上面输入了自己的账号密码一个钓鱼网站,导致被盗。基本没见过微信被盗的。可能是微信弱化密码登录,采用二维码扫描登录的原因吧。这应该也算是安全方面的考虑吧,毕竟微信是有支付功能的。上面这种骗局,技术人员看url,用浏览器分析网络包,很容易识别,但是别信,普通人真的不懂怎么识别钓鱼网站和官网。好像真的没想到都2020年了,还有人在找Redis的这个漏洞,有的人中招了。..那么回到Redis数据库的使用上,官网已经明确写了安全防护建议,我简单总结一下:不要使用root用户启动RedisServer,并且一定要设置密码,而且密码不要太大简而言之,否则很容易被暴力破解。配置服务器防火墙和Redis配置文件,尽量不要让Redis与外界接触。使用重命名功能伪装危险的命令flushall,以防止数据库删除和数据丢失。