- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章震惊,我被Redis入侵了由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
好吧,我也做了回标题党,像我这么细心的同学,怎么可能让服务器被入侵呢?
其实是这样的,昨天我和一个朋友聊天,他说他自己有一台云服务器运行了 Redis 数据库,有一天突然发现数据库里的数据全没了,只剩下一个奇奇怪怪的键值对,其中值看起来像一个 RSA 公钥的字符串,他以为是误操作删库了,幸好自己的服务器里没啥重要的数据,也就没在意.
经过一番攀谈交心了解到,他跑了一个比较古老已经停止维护的开源项目,安装的旧版本的 Redis,而且他对 Linux 的使用不是很熟练。我就知道,他的服务器已经被攻陷了,想到也许还会有不少像我这位朋友的人,不重视操作系统的权限、防火墙的设置和数据库的保护,我就写一篇文章简单看看这种情况出现的原因,以及如何防范.
PS:这种手法现在已经行不通了,因为新版本 Redis 都增加了 protect mode,增加了安全性,我们只能在本地简单模拟一下,就别乱试了.
事件经过 。
其实这种攻击手法都是 2015 年的事了,那时候 Redis 的安全保护机制比较差,只能靠运维人员来合理配置以保证数据库的安全。有段时间,全球几万个 Redis 节点遭到了攻击,出现了上述奇怪的现象,所有数据被清空,只剩一个键叫 crackit,它的值形似 RSA 公钥的字符串.
后来查证,攻击者利用 Redis 动态设置配置和数据持久化的功能,把自己的 RSA 公钥写入到了被攻击服务器的 /root/.ssh/authored_keys 这个文件,从而可以用私钥直接登录对方的 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/ 中的 authored_keys 文件中:
现在,root 的家目录中已经包含了我们的 RSA 公钥,我们现在可以通过密钥对登录进 root 了:
看一下刚才写入 root 家的公钥:
乱码是 GDB 文件的某种编码吧,但是中间的公钥被完整保存了,而且 ssh 登录程序竟然也识别了这段被乱码包围的公钥.
至此,拥有了 root 权限,就可以为所欲为了。。.
吸取教训 。
虽然现在基本不会受到这种攻击(新版本的 Redis 没有密码时默认不对外网开放),但是对于系统的安全性是每个人都应该重视的.
我们自己折腾东西,用个低配云服务器,为了省事儿一般也不认真配置防火墙,数据库不设密码或者设成 admin、root 这样简单的密码,反正也没啥数据。这样肯定不是个好习惯.
现在我们的计算机系统越来越完善,每个成熟的项目都由最优秀的一帮人维护,从技术上说应该算是无懈可击了,那么唯一可能出问题的地方就在于使用它们的人.
就像经常看到有人的 QQ 被盗,我相信盗号的人肯定不是跑到腾讯的数据库里盗号,肯定是 QQ 号主安全防范意识差,在哪个钓鱼网站输入了自己的账号密码,导致被盗。我基本没见过微信被盗的,可能是微信弱化密码登录,改用二维码扫描登录的原因。这应该也算是一种安全方面的考量吧,毕竟微信是有支付功能的.
上面这种骗局对于技术人来说,看看 url,浏览器分析一下网络包就很容易识别出来,但是你还别不信,一般人真的搞不明白怎么识别钓鱼网站和官方网站。就像我真没想到都 2020 年了,还有人在找 Redis 的这个漏洞,而且还有人中招。。.
那么说回 Redis 数据库的使用,在官网上明确写出了安全防护的建议,我简单总结一下吧:
原文地址:https://www.toutiao.com/a6902040452430643724/ 。
最后此篇关于震惊,我被Redis入侵了的文章就讲到这里了,如果你想了解更多关于震惊,我被Redis入侵了的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我知道这在实际应用中是不允许的,这有利于用户的隐私和安全。但出于纯粹的学术目的,我试图在不显示 MessageComposer UI 的情况下发送消息。 MFMessageComposeViewCon
我在 PHP 等方面非常有经验,但我是 Drupal 新手。我想知道一旦用户登录到 Drupal 站点,我是否可以添加一些额外的 PHP 代码。我需要这样做的原因 - 更新不同数据库(不是 MySQL
我的网站似乎正在加载实际上并不存在于我的服务器上的代码。我知道问题出在服务器端,因为我已经用其他计算机测试过... 代码似乎加载了一个 header ,然后将我的真实网站放入 iframe 中,奇怪的
我创建了一个新的 whoami 命令,它需要一个假的用户名,并通过将其添加到 ~/.profile 将其放入 PATH 中。它的创建方式是 whoami 在实际来自 Linux 的实际 whoami
我尝试在 CSS3 中使用多列。我对分栏符有疑问。在 chrome 和 Firefox 上可以,但在 Internet Explorer 10 和 11 上不行。在 IE 上,它适用于第一列,但不适用
我是一名优秀的程序员,十分优秀!