【技术分享】针对HTTP的隐藏攻击面分析(上)

http://p3.qhimg.com/t018dd85ce02e8b5098.png

译者:WisFree

预估稿费:200RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


为了增强用户体验度,现代Web网站架构中都包含了各种各样的“隐藏系统”,这些系统不仅可以给用户提供各种额外的服务,而且还可以帮助管理员提取网站各方面的分析数据。但是,这些隐藏系统同样也是近些年里经常被人们忽略的隐形攻击面。


写在前面的话

在本系列文章中,我将会给大家演示如何使用恶意请求和消息头来让这些隐藏系统“现形”,并实现对目标网络的入侵。除此之外,我还专门开发了一个小型Bash脚本来自动化实现本文所介绍的各项技术。值得一提的是,本文所介绍的技术让我彻底渗透进了美国国防部的网络系统,然后拿到了超过三万美刀的漏洞奖金,而且在这个过程中我还意外地发现了我所使用的ISP服务器的安全问题。

在本文的分析过程中,我还会给大家介绍其中几个我所发现的隐藏系统。我会披露欧洲最大网络服务提供商秘密进行的请求监听行为以及哥伦比亚网络服务提供商的可疑之处(混乱的Tor后端),而且还会给大家描述一个包含漏洞的系统,这个系统允许我将反射型跨站脚本漏洞(Reflected XSS)提升为SSRF(服务器端请求伪造)。在这篇文章中,你还会了解到如何通过漏洞链以及缓存机制来利用Blind SSRF漏洞,并最终这些系统拉到“聚光灯”之下。除此之外,我还发布了一款名叫Collaborator EverywhereGitHub主页的开源BurpSuite扩展(可通过注入Payload来让后端系统pingback),感兴趣的用户可以关注一下。

注:本系列文章的原版论文可以点击这里获取,大概在今年的九月份我们会放出在2017年BlackHat黑客大会的演讲视频,敬请期待。


一、介绍

无论是ShellShock、StageFright或是ImageTragick,一般在一个被忽略的攻击面中所发现的严重漏洞都有其相似的特性或问题,因为这些不够明显的攻击面都会被安全测试人员所忽略。在该系列文章中,我将会通过反向代理、负载均衡器以及后端分析系统来披露那些多年以来都被人们过分忽略的攻击面。除此之外,我将会给大家介绍一种非常简单且有效的方法来对这类系统进行安全审计,并给大家展示我所发现的各种严重漏洞。

我还专门开发了两款工具。其中一款名叫Collaborator Everywhere,这是一款BurpSuite扩展,它可以通过在Web流量中自动注入一些无害的Payload来揭露那些隐藏的后端系统,你可以通过BApp商店或直接访问GitHub主页来获取该工具。另一个工具名叫Rendering Engine Hackability Probe,这是一个Web页面,它可以分析已连接客户端的攻击面。你可以访问该项目的GitHub主页获取源码或访问Portswigger站点直接使用该工具。


二、方法学

1.监听

这一系列研究方法主要针对的是那些被设计成不可见的系统。因此,我们不能依赖于分析响应内容来识别这些系统中的安全漏洞。相反,我们需要通过向这些系统发送专门设计的Payload来让这些系统与我们通信,然后从DNS查询结果和HTTP请求中来了解更多的信息。本系列文章中的所有发现都起始于一次Pingback,如果没有这一次Pingback,我根本无法发现这些隐藏系统,更别说找出其中的安全漏洞了。我用Burp Collaborator记录下了这些请求,但是你也可以搭建你自己的DNS记录服务器,或使用Canarytokens来进行简单的探测。

2.研究过程

在刚开始的时候,我使用了一个简单的Burp匹配/替换规则向我所有的浏览器流量中注入了一个硬编码的Pingback Payload。但是这种方法垮掉了,因为Payload引发了大量的Pingback,所以我很难去识别Payload所触发的每一个单独Pingback。而且我还发现,某些Payload在触发Pingback时会有一定的延迟,有的是几分钟或几个小时,有些甚至要等上一天。

为了更有效地去触发并筛选Pingback,我编写了Collaborator Everywhere,这个简单的Burp扩展可以向所有的代理流量中注入包含唯一标识符的Payload,并根据攻击类型自动对Pingback进行分类。比如说,大家可以从下面的Collaborator Everywhere截图中看到,Netflix在我访问了它们网站的四个小时之后,Netflix访问了Referer头中的URL地址,其中的访问终端使用x86 CPU的iPhone伪造的。

http://p0.qhimg.com/t0109780ac17de5368f.png

3.详细分析

对于有针对性的人工安全审计来说,Collaborator Everywhere是一款非常高效的工具,本系列文章中几乎一半的安全漏洞都是通过它来发现的。但是在研究过程中我发现,某台雅虎服务器中的一个特定漏洞只有百分之三十的几率被扫描到,而导致这一情况的根本原因是雅虎使用了DNS轮训调度机制来进行负载均衡,并通过三台不同的前端服务器来处理入境请求,而这三台服务器中只有一台存在漏洞。 为了确保没有任何一台包含漏洞的服务器能够逃避检测,我们需要系统地去识别并针对每一个目标基础设施精确发送Payload。

http://p3.qhimg.com/t017b12ef3b84e49e81.png

为了实现这个目标,我一开始使用的是Burp Collaborator客户端以及破解版的Masscan,但是后来我又用ZMap/ZGrab替换掉了Masscan,因为ZGrab支持HTTP/1.1和HTTPS。为了识别目标的Pingback,我在每一个Payload中添加了目标主机名,所以example.com中的漏洞将会产生一次指向example.com.collaboratorid.burpcollaborator.net的DNS查询请求。目标域名和IP地址需要手动从合法可测试的域名列表中获取,然后映射到Rapid7的DNS数据库。这种方法可以识别出数百万个IP地址,其中大约有五万多个IP会监听端口80/443。我一开始还尝试使用了反向DNS记录,但是这样只能发现一大堆伪装成Google基础设施的服务器,而且这些服务器似乎也不太愿意接受他人的安全审计。

如果我们的Payload无法触发存在漏洞的代码路径,那么我们向再多的服务器发送Payload也没有什么X用。为了使Payload的覆盖率最大化,我在每一个IP中最多使用了五个主机名,并且还使用了HTTP和HTTPS。除此之外,我还使用了X-Forwarded-Proto: HTTPS和Max-Forwards来尝试触发边缘情况,并发送了Cache-Control: no-transform头来阻止服务器中间件破坏我的Payload。


三、请求误传

反向代理会将中继请求委托给相应的内部服务器,这些服务器一般都出于特权网络的位置,它们可以直接获取到互联网发送过来的请求,而且还拥有公司DMZ的访问权。如果有一个合适的Payload,那么我们就可以控制反向代理让它将这些请求发送到攻击者指定的目的地址(请求误传)。这样一来,我们就可以让这些服务器组成一个网关,并可以不受限制地访问目标组织的内部网络了(一种功能非常强大的服务器端请求伪造SSRF的变种版本)。下面给出的是这种攻击技术的简单过程图:

http://p8.qhimg.com/t01d29097bc9c44f38c.png

需要注意的是,这种攻击技术中一般需要使用到畸形请求,而这些请求不仅有可能导致类似ZAP这样的工具无法正常工作,而且还有可能无意中影响到你公司或互联网服务提供商的中间网关。所以就工具而言,我建议大家使用原版BurpSuite、mitmproxy和Ncat/OpenSSL。


总结

在本系列文章的上集,我们对现代Web应用架构中的隐藏系统以及隐藏服务进行了简单描述,并且介绍了本系列文章中所要使用的工具以及技术,在接下来的中集和下集中,我们将用实际的例子来给大家进行详细的介绍,感兴趣的同学请关注安全客的最新更新。

(完)