黑客如何窃取开发者的本地数据库
作者:汪建 发布时间:[ 2016/9/22 11:34:35 ] 推荐标签:数据库 黑客 网络安全
如果你正在阅读这篇文章,而且你是一个软件开发人员,那么你可能会在本地运行一些服务,例如Redis、Memcached和Elasticsearch,这些是许多软件产品依赖的服务。你可能不知道的是,这些本地运行的服务可能被任何人所访问,只要他们可以访问你的网站,从而可能被一些坏人窃取你本地的数据。
它的工作原理是什么?虽然我没有在本文中提出任何新的概念,我将尽可能完整地展示从来没有看到任何人将这些方式放在一起的攻击,我结合了两种不同的攻击方式,即“跨协议脚本”和“DNS重新绑定”。
先谈谈Redis、Memcached和Elasticsearch
第一种技术是一个古老的被称为“跨协议脚本”的技术,2001年发表的论文详细描述了此攻击,但关键的是无论是Redis还是Memcached都有一个简单的基于行的协议,并且忽略任何无效的命令。
这意味着如果浏览器发送如下的HTTP请求到localhost:6379,这个端口正是Redis运行的接收端口,然后Redis会很乐意地执行SET命令。
POST / HTTP/1.1
Host: localhost:6379
SET abc 123
QUIT
我们可以向下面这样通过提交一个form表单来发送一个请求:
Elasticsearch的协议完全是基于HTTP协议的,所以你根本不需要通过什么技巧可以和它通信了。虽然我们可以执行任何命令,但实际上我们无法检索结果。这是因为浏览器的同源策略,这个策略能够保证了从另外一个域名读取数据是不被允许的。然后有了第二种技术出现了。
DNS重新绑定
为了破解同源策略的保护,我们可以使用一个名为DNS重新绑定技术。DNS重新绑定涉及通过一个很低的TTL的公共域的服务器访问,一旦某个浏览器连接到某个网站,网站会立刻改变DNS的记录指向一个不同的IP地址,比如127.0.0.1。这导致网站陷入了运行攻击者代码的境地,这是一个私有的IP地址。网站然后可以继续攻击,窃取任何通过服务可以窃取的数据,这必须要通过客户端授权的设置才行。
PoC
我已经在http://extractdata.club/上创建了一个关于这个攻击的证据,该网站会尝试连接到Redis、Memcached和Elasticsearch,这些服务都运行在本机默认的端口上。经过大约一分钟,该链接会显示类似如下的一些东西:
虽然我的PoC只检索了每个服务的版本信息,通过它不是很难能想象到可以遍历整个数据库并且提取所有数据。参考代码https://github.com/bouk/extractdata。
减少威胁
不幸的是,对于上面的情形数据库并没有固定结构的修复方法,你可以使用密码设置你的服务,但默认状态是脆弱的,很多人会对密码保持敏感。对于Redis和Memcached我能想到的的的解决方案是添加Host:作为退出的别名。因此连接只要识别是HTTP请求立刻中止。
其他可以修复该问题的地方是浏览器,浏览器厂商可以实现各种各样的“DNS桩”,这使得在网页被完全加载后它能忽略DNS的改变。或者浏览器厂商可以添加Redis和Memcached端口号到他们的阻塞端口列表,目前列表已经包含了常见的协议,例如SMTP和IRC协议。这不是一个结构性的修复,如果有新的服务出现它又会出现问题。
Edit——Chromium的开发人员正在致力于删除HTTP/0.9的支持,这将使浏览器无法读取Redis和Memcached的响应。这是很大的进步,但仍然留下了可以执行的命令的可能性。
创建攻击
对于某些人来说从他们的开发数据库中窃取数据可能并不是什么大不了的事,但读取和写入权限可能会导致远程代码执行。举个例子,攻击者可以用他们自己的payload重写任何看起来像Ruby marshalled 或Python pickled数据,从而导致开发者的电脑受危害。
结论
以上攻击的证据解释了为什么计算机安全要做到完全没问题是令人难以置信的难。攻击可能来自于多个软件产品,他们理所当然地认为产品这样执行很安全,但他们彼此的交互方式导致了漏洞。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11