英文原文:Using Facebook Notes to DDoS any website
Facebook Notes 允许用户使用<img>标签。每当使用<img>标签时,Facebook 会从外部服务器抓取图像,并将其缓存起来。然而 Facebook 利用随机 GET 参数只缓存图像一次,该缓存可以被绕过,滥用这个属性会造成巨大的 HTTP GET 泛洪。
下面是我在 2014 年 3 月 3 日报告给 Facebook 漏洞奖赏计划的过程。
步骤 1、创建一系列 img 标签,这些标签只被抓取了一次。
<img src=http://targetname/file?r=1></img>
<img src=http://targetname/file?r=1></img> .. <img src=http://targetname/file?r=1000></img>
步骤 2、使用m.facebook.com 创建 notes。它默认整理为固定长度。
步骤 3、相同用户或者不同用户创建多个 notes。每一个都会相应 1000 多个的 http 请求。
步骤 4、同一时间查看所有的 notes,目标服务器会观察到有大量的 HTTP GET 泛洪。成千上万的 GET 请求在几秒钟发送到一台服务器。并行访问 Facebook 的服务器的总数是 100 多。
初始回应:问题被拒绝,因为他们误解了这个 bug 只会导致一个 404 的要求,不能够造成高危害。
通过几封邮件后,我被要求举证说明影响。我启动了一个云端上的目标虚拟机,在三台笔记本电脑上只使用浏览器,2-3 小时内我实现了 400 Mbps 的出站流量。
Facebook 的服务器数量:127
当然,影响可能会超过 400 Mbps 的,因为我只使用了浏览器为这个测试,并且我也受由每个获取的图像的域的浏览器线程数量限制。我创建概念验证的脚本,它可能会导致更大的影响和利用图像向 Facebook 发送脚本。
4 月 11 日,我得到答复:
“感谢您的耐心和我这里的长时间拖延表示歉意。我们对这一问题进行了讨论,并跟另一个团队进行了深入探讨。
最后,得出的结论是,没有好的方式来解决这个问题,不可能不显著降低整体功能而阻止对小型消费级网站的“攻击”。
不幸的是,所谓的“解决不了”的项目就不在奖赏漏洞的计划内,所以不会有奖励这个问题。但我想表示感谢,而且我觉得C提出的攻击是有趣的,你显然做了很多工作。我们也希望您继续提交您找到 Facebook 的漏洞。”
我不知道为什么他们不能解决。在图像标签支持动态链接可能是一个问题,我不是它的忠实粉丝。如果他们想有动态生成的图像,我觉得手动上传就能满足用户的需要。
我也看到了这种类型滥用的一些其他问题:
流量放大的情况下:当图像被替换为较大尺寸的 PDF 或视频时, Facebook 会捕获到一个巨大的文件,但用户什么也得不到。
每个 notes 支持 1000 多条链接,和 Facebook 会锁定用户在产生 100 个信息后。由于没有验证码的注释产生,所有这一切都可以实现自动化,攻击者可以使用多个用户轻松准备数百个说明虽然持续 400 Mbps 可能是危险的,但我这测试是最后一次,看它是否确实能有较大的影响。不使用浏览器,而使用 POC 脚本我能搞定 900 Mbps 的出站流量。
我使用了一个普通的 13 MB 的 PDF 文件,被 Facebook 的处理了 180,000 多次,涉及 Facebook 的服务器数量是 112。
我们可以看到流量图是在 895 Mbps 上下浮动的。这可能是因为施加于我的虚拟机在其上使用共享 Gbps 的以太网端口云计算的最大流量的限制。但这似乎没有限制在 Facebook 的服务器上,所以我们可以想象到底能获取多少流量。
发现并报告此问题后,我发现谷歌上的类似的问题。结合谷歌和 Facebook ,似乎我们可以很容易得到 Gbps 的流量。
Facebook 的处理功能显示自己可以作为 facebook 的扩展工具。现在它似乎没有其他的选择,而必须阻止它,以避免这种滋扰。
【更新1】
https://developers.facebook.com/docs/ApplicationSecurity/ 提到提到一种方式来获得 Facebook 获取的 IP 地址。
whois -h whois.radb.net — ‘-i origin AS32934′ | grep ^route
阻塞 IP 地址可能会比阻止用户代理更有效。我在博客上已经得到了很多的回应,并想感谢 DOSarrest 团队承认这个发现。
【更新 2】
POC 脚本和访问日志现在可以从 Github 上访问。这个脚本非常简单,仅仅是一个粗略的草稿。请使用它们仅用于研究和分析。
访问日志是我用于 900 Mbps 的测试的确切的日志。在访问日志,你会发现来自 Facebook 300,000 多的请求。以前,我只计算了 facebookexternalhit/1.1 ,似乎每个 IMG 标签,有两个攻击,即一个来自 1.0 版本。另一个则是 1.1 的。我也尝试了谷歌,你也会发现来自谷歌的 700 多条数据。
翻译: 伯乐在线 - smilesisi
译文链接: http://blog.jobbole.com/69324/