Web 缓存欺骗攻击技术详解

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 本文讲的是Web 缓存欺骗攻击技术详解,Omer Gil早在今年年初就在他的博客上发表了有关于Web缓存欺骗攻击技术的博文,随后他在BlackHat USA 2017 和BSides Tel-Aviv 2017 上对这种攻击技术进行了演示,并做了更深入的研究。
本文讲的是 Web 缓存欺骗攻击技术详解Omer Gil 早在今年年初就在他的博客上发表了有关于 Web 缓存欺骗攻击技术的博文 ,随后他在 BlackHat USA 2017   BSides Tel-Aviv 2017   上对这种攻击技术进行了演示,并做了更深入的研究。

在他发布的“Web 缓存欺骗技术白皮书”中,详细的介绍了这种攻击技术。这份白皮书大致包含了如下内容:

·攻击原理概述

·实施攻击的方法

·攻击所需的条件

·已知的几个主流的Web 框架及缓存机制

·缓解措施

Web缓存欺骗这种攻击技术比较新颖危害也比较大,利用这种攻击技术攻击者可以泄露服务器上存储的用户敏感信息,甚至拿到用户的账户权限。当然,这种攻击技术与目标网站所使用的框架,缓存机制等因素有关。

介绍

关于缓存机制

大多数网站为了使网页加载速度变快从而为用户提供更好的用户体验,都使用了网页缓存,这些缓存的机制是将应用程序的文件存储在缓存服务上,在用户发起请求时进行频繁的检索。

最常见的一些需要缓存的文件都是静态文件,比如.css,.js,.txt以及图片文件。实现缓存的方式也有很多,比如浏览器自身就会进行缓存,但是这种缓存并不能进行Web缓存欺骗攻击。但是另外一些在浏览器与web服务器之间实现缓存的方式则可能存在这种安全漏洞。这种缓存实现机制有多种形式:

 · CND(内容分发网络):这是一种代理的分布式网络,其目的是快速地提供内容。客户端将由一组离它最近的代理服务器提供服务。

·负载均衡:除了平衡多个服务器之间的通信量外,负载均衡还可以缓存内容,以减少服务器的延迟。

· 反向代理:代理服务器代表客户端从web服务器检索资源,同时可以缓存web应用程序的一些内容。

缓存是如何工作的?

回顾了不同形式的缓存机制后,现在,我们来看看Web缓存实际上是如何工作的。 在以下示例中,http://www.example.com网站由反向代理提供缓存服务。 像其他任何网站一样,这个网站使用了图片,CSS文件和脚本作为公开使用的资源。 这些文件网站中所有或许多用户所使用的静态文件,并且对所有用户返回了完全相同的内容。 它们不包含任何用户信息,因此不会被认为是敏感的文件。

第一次访问静态文件时,请求会通过代理服务。 缓存机制并不熟悉这个文件,于是它会询问Web服务器,Web服务器返回了该文件。 现在,缓存机制需要识别接收到的文件的类型。 每个缓存机制的工作方式不同,但是在大多数情况下,服务器是从URL的尾端来获取文件的扩展名,然后根据该缓存机制的缓存规则来决定是否缓存这个文件。

如果文件被缓存了,那么下一次当有任何一个客户端请求该文件时,缓存机制由于已经存储了这个文件,所以它会把缓存的文件内容发送给客户端而不需要去请求Web服务器。

服务器的反应

Web缓存欺骗攻击与RPO攻击相同。(在这两个博文中有说明:Spanner1XSS Jigsaw2)依赖于类似浏览器和Web服务器的反应,。

当用户访问下面的URL时会发生什么?

http://www.example.com/home.php/nonexistent.css

home.php 是一个真实的网页,nonexistent.css是一个并不存在的文件。

在这种情况下,浏览器向该URL发送GET请求。 有趣的是,Web服务器如何解释这个请求呢。 根据服务器的技术选型和配置,Web服务器可能会返回一个200 OK的响应以及home.php页面的内容,这意味着URL保持不变。

HTTP响应头将匹配home.php的页面:相同的缓存头和相同的内容类型(在这种情况下为text / html)。

Web 缓存欺骗攻击技术详解

攻击原理概述

未经过身份验证的攻击者可以轻松的利用此漏洞,攻击步骤如下面所示:

1.攻击者诱使已经登录的用户访问https://www.bank.com/account.do/logo.png

2.受害者的浏览器请求https://www.bank.com/account.do/logo.png

3.请求到达代理,代理服务并不熟悉该文件,因此会请求Web服务器。

4. Web服务器返回受害者的帐户页面的内容,并显示200 OK响应,这意味着URL保持不变。

5.缓存机制接收到文件同时发现URL以静态文件的扩展名(.png)结尾。因为该缓存机制被配置为缓存所有静态文件并忽略任何缓存头,所以imposter.png文件会被缓存。名为account.do的新目录是在缓存目录中创建的,被缓存的文件名称为logo.png

6.用户接收到他的帐户页面。

7.攻击者访问https://www.bank.com/account.do/logo.png。请求到达代理服务器,代理服务器直接将受害者的缓存帐户页面返回给了攻击者的浏览器。

Web 缓存欺骗攻击技术详解

漏洞危害

成功利用该漏洞将导致易受攻击的页面(包含用户的个人隐私内容)被缓存,从而可以被公开访问。 这里的演示是缓存了静态类型的文件攻击者不能模仿受害者。 所以,该文件不能被覆盖,并能保持一直有效,直到缓存到期。

如果响应的主体中包含了用户的会话标识符,账户安全问题,CSRF令牌等,则该漏洞的影响可能会明显提升。这可以用于额外的攻击,并导致受害者的帐户被攻击者完全接管。

实现攻击的条件

必须满足下面三个条件才能使攻击者发起网页缓存欺骗攻击:

1.访问http://www.example.com/home.php/nonexistent.css页面时,Web服务器返回了该URLhome.php的内容。

2. Web缓存功能被设置为通过Web应用程序的URL的扩展名来判断是否进行缓存文件,并且忽略任何缓存头。

3.访问恶意URL时,受害者必须已经经过了身份验证。

该漏洞在几个已知的WEB框架中的利用

实现攻击的一个条件是应用程序对现有的URL请求的解释,在最后添加一个不存在的文件的名称,如http://www.example.com/home.php/nonexistent.css

以下示例显示了如何在几个已知的Web框架中执行这个漏洞的利用,包括其默认行为的概述,以及配置和工作流程的说明。

PHP

通过在不使用框架的情况下创建“纯”PHP应用程序,应用程序将忽略URL尾部的任何添加,并返回200 OK响应以及实际页面的内容。

例如,当访问http://www.example.com/login.php/nonexistent.gif时,应用程序返回login.php的内容,这意味着它符合第一个攻击条件。

Web 缓存欺骗攻击技术详解

Django

Django中的请求通过使用urls文件实现程序调度。 在这些文件中,可以设置正则表达式来识别URI中请求的资源并返回相关的内容。

Web 缓存欺骗攻击技术详解

这是一个常见的配置方式,它可以返回诸如http://www.sampleapp.com/inbox/之类的请求的“inbox”页面的内容。

Web 缓存欺骗攻击技术详解

此正则表达式也会匹配到添加了一个不存在的文件的相同的URL,如

http://www.sampleapp.com/inbox/test.css 这个正则表达式的匹配结果表明Django应用程序是满足攻击条件的。

Web 缓存欺骗攻击技术详解

开发人员可能使用的脆弱正则表达式的另一个例子是在“inbox”之后省略了尾部的斜杠。

Web 缓存欺骗攻击技术详解

使用此正则表达式,除了在标准的http://www.sampleapp.com/inbox网址中找到匹配之外,它还会在http://www.sampleapp.com/inbox.css中找到匹配项。

Web 缓存欺骗攻击技术详解

当把$符号附加到正则表达式后面时,应用程序将不会在触发的URL中找到匹配项。

Web 缓存欺骗攻击技术详解

Web 缓存欺骗攻击技术详解

ASP.NET

ASP.NET框架中有一个称为FriendlyURLs的内置功能,其主要目的是使URL更简洁,更友好。 要访问https://www.example.com/home.aspx,应用程序将会删除该URL的扩展名,并将用户重定向到https://www.example.com/home

此功能可以在Route.config文件中进行配置,并且在任何ASP.NET应用程序中都默认启用了此功能。

Web 缓存欺骗攻击技术详解

FriendlyURLs功能打开后,用户通过请求:

http://localhost:39790/Account/Manage.aspx访问现有的Manage.aspx页面时,应用程序将删除.aspx扩展名,并显示页面内容。

Web 缓存欺骗攻击技术详解

使用此配置访问触发URL :

http://localhost:39790/Account/Manage.aspx/test.css时将导致.aspx扩展名被忽略该用户将被重定向到

http://localhost:39790/Account/Manage/test.css

,这会导致404错误。 这意味着当FriendlyURL打开时,应用程序不符合攻击条件。

Web 缓存欺骗攻击技术详解

虽然FriendlyURL默认是启用的,但有许多网站并不使用此功能。 它可以在Route.config中轻松关闭。

Web 缓存欺骗攻击技术详解

关闭该功能后,访问相同的触发URL会导致200 OK响应,并返回Manage.aspx页面的实际内容。

Web 缓存欺骗攻击技术详解

该漏洞在几个已知的缓存机制中的利用

攻击的第二个条件是,Web缓存功能可以根据网址末尾的扩展名判断是否将Web应用程序的文件设置为缓存文件,而忽略任何缓存头。 以下是几个已知的缓存机制的示例,其中说明了它们的缓存过程以及它们如何识别接收到的文件的类型。

Cloudflare

当文件从Web服务器到达Cloudflare服务器时,它经历两个阶段。 第一阶段称为资格阶段,Cloudflare将在该阶段中检查缓存功能是应用在网站上还是文件所在的目录。如果答案是yes(这可能就是为什么网站从一开始就使用Cloudflare的服务的原因),Cloudflare服务器会检查URL是否是以下面的这些静态文件扩展之一结尾的:

class, css, jar, js, jpg, jpeg, gif, ico, png, bmp, pict, csv, doc, docx, xls, xlsx, ps, pdf, pls, ppt, pptx, tif, tiff, ttf, otf, webp, woff, woff2, svg, svgz, eot, eps, ejs, swf, torrent, midi, mid

如果文件的后缀是上述之一,文件将进入第二阶段 – 取消资格阶段,Cloudflare服务器将检查HTTP缓存头是否存在。

不幸的是,通过访问触发URLWeb服务器返回了当前的动态页面的缓存头,这意味着该文件可能会返回一个无缓存的指令。

不过幸运的是,Cloudflare有一个名为“边缘缓存超时TTL”的功能,它提供了覆盖任何现有HTTP头的选项。 通过将此功能设置为“启用”,将从高速缓存中缓存从Web服务器返回的文件。由于各种原因Cloudflare建议使用此HTTP头,因此这是一个常用的功能。

Web 缓存欺骗攻击技术详解

IIS ARR

ARR(应用程序请求路由)为IIS提供负载均衡功能。

缓存是ARR提供的功能之一。 可以为负载均衡器支持的Web服务器设置缓存规则,以便将文件保存到缓存目录。 创建新的缓存规则时,我们使用通配符和所需的扩展名定义要缓存的文件类型。 当文件到达ARR时,它会在文件的URL中查找此模式。很明显,ARR根据URL末尾的扩展名来识别文件类型。

此外,IIS ARR还包含一个忽略文件缓存头的选项,导致在任何情况下可以应用规则。

Web 缓存欺骗攻击技术详解

在以下示例中,IIS ARR与两个Web服务器链接,并配置为缓存所有cssJavaScript文件。

Web 缓存欺骗攻击技术详解

对触发URLhttp://www.sampleapp.com/welcome.php/test.css)的请求导致在缓存目录中创建一个名为welcome.php的新目录,并在其中包含一个名为 test.css的缓存文件,其中包含了用户的welcome.php页面的内容。

Web 缓存欺骗攻击技术详解

Web 缓存欺骗攻击技术详解

NGINX

用作负载均衡器的NGINX服务器提供了缓存功能来存储从Web服务器返回的页面。

可以在NGINX配置文件中配置缓存规则。 以下示例显示了一个配置,指示NGINX缓存特定类型的静态文件,并忽略其缓存头。

Web 缓存欺骗攻击技术详解

当页面从Web服务器到达NGINX时,NGINX将在URL的末尾搜索扩展名,并根据该标识识别文件类型。

首先,缓存目录中没有缓存。

Web 缓存欺骗攻击技术详解

经过身份验证的用户访问触发URL

http://www.sampleapp.com/app/welcome.php/test.css,用户的页面会缓存在缓存目录中。

Web 缓存欺骗攻击技术详解

Web 缓存欺骗攻击技术详解

然后,攻击者在未经身份验证的情况下访问触发URLNGINX服务器就会返回包含用户隐私内容的缓存文件。

Web 缓存欺骗攻击技术详解

缓解措施

1.配置缓存机制只有在HTTP缓存头允许时才缓存文件。

2.将所有静态文件存储在指定的目录中,并仅缓存该目录。

3.如果缓存组件提供该选项,请将其配置为按其内容类型进行文件缓存。

4.配置Web服务器,针对

http://www.example.com/home.php/nonexistent.css这类页面,Web服务器不返回具有触发URLhome.php的内容相反,服务器应该返回404302响应。

总结

Web缓存欺骗是一种不仅易于执行的攻击,而且可能会因为暴露用户的个人信息而遭受更严重的后果,而攻击者则可以控制用户的帐户。我发现一些知名的网站也很容易受到这种攻击;大多数这些网站由最常见的CDN提供缓存服务。可以肯定的是,仍有许多网站可能成为受害者。

虽然本白皮书仅涉及了可以满足Web缓存欺骗攻击条件的有限技术的范例,但还有各种其他Web框架和缓存机制,可以为攻击者提供类似的机会来执行攻击。

为这个漏洞创造利用条件的Web框架和缓存机制本身并不脆弱;主要问题还是不正确的配置所导致的。

为了防止网络缓存欺骗攻击,技术人员应首先了解可以执行此攻击所需要的条件。此外,建议供应商努力防止其产品满足这些攻击条件。这可以通过禁用一些功能,更改默认设置和行为以及提供警告来提高技术人员的意识来实现。




原文发布时间为:2017年9月3日
本文作者:丝绸之路
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。
相关实践学习
小试牛刀,一键部署电商商城
SAE 仅需一键,极速部署一个微服务电商商城,体验 Serverless 带给您的全托管体验,一起来部署吧!
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
3月前
|
机器学习/深度学习 存储 缓存
加速LLM大模型推理,KV缓存技术详解与PyTorch实现
大型语言模型(LLM)的推理效率是AI领域的重要挑战。本文聚焦KV缓存技术,通过存储复用注意力机制中的Key和Value张量,减少冗余计算,显著提升推理效率。文章从理论到实践,详细解析KV缓存原理、实现与性能优势,并提供PyTorch代码示例。实验表明,该技术在长序列生成中可将推理时间降低近60%,为大模型优化提供了有效方案。
290 15
加速LLM大模型推理,KV缓存技术详解与PyTorch实现
|
16天前
|
缓存 负载均衡 网络协议
电商API接口性能优化技术揭秘:缓存策略与负载均衡详解
电商API接口性能优化是提升系统稳定性和用户体验的关键。本文聚焦缓存策略与负载均衡两大核心,详解其在电商业务中的实践。缓存策略涵盖本地、分布式及CDN缓存,通过全量或部分缓存设计和一致性维护,减少后端压力;负载均衡则利用反向代理、DNS轮询等技术,结合动态调整与冗余部署,提高吞吐量与可用性。文中引用大型及跨境电商平台案例,展示优化效果,强调持续监控与迭代的重要性,为电商企业提供了切实可行的性能优化路径。
|
2月前
|
缓存 前端开发 应用服务中间件
Web端实时通信技术SSE在携程机票业务中的实践应用
本文介绍了携程机票前端基于Server-Sent Events(SSE)实现服务端推送的企业级全链路通用技术解决方案。文章深入探讨了 SSE 技术在应用过程中包括方案对比、技术选型、链路层优化以及实际效果等多维度的技术细节,为类似使用场景提供普适性参考和借鉴。
63 7
|
7月前
|
数据采集 存储 缓存
如何使用缓存技术提升Python爬虫效率
如何使用缓存技术提升Python爬虫效率
|
7月前
|
存储 缓存 负载均衡
从零到一:分布式缓存技术初探
分布式缓存通过将数据存储在多个节点上,利用负载均衡算法提高访问速度、降低数据库负载并增强系统可用性。常见产品有Redis、Memcached等。其优势包括性能扩展、高可用性、负载均衡和容错性,适用于页面缓存、应用对象缓存、状态缓存、并行处理、事件处理及极限事务处理等多种场景。
468 1
|
8月前
|
人工智能 安全 物联网
区块链技术的未来展望:去中心化金融(DeFi)与Web 3.0的融合
区块链技术的未来展望:去中心化金融(DeFi)与Web 3.0的融合
|
8月前
|
前端开发 JavaScript 搜索推荐
HTML与CSS在Web组件化中的核心作用及前端技术趋势
本文探讨了HTML与CSS在Web组件化中的核心作用及前端技术趋势。从结构定义、语义化到样式封装与布局控制,两者不仅提升了代码复用率和可维护性,还通过响应式设计、动态样式等技术增强了用户体验。面对兼容性、代码复杂度等挑战,文章提出了相应的解决策略,强调了持续创新的重要性,旨在构建高效、灵活的Web应用。
137 6
|
8月前
|
存储 缓存 网络协议
如何防止DNS缓存中毒攻击(一)
DNS缓存中毒也称为DNS欺骗
133 10
|
8月前
|
XML 前端开发 JavaScript
PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑
本文深入探讨了PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑;Ajax则通过异步请求实现页面无刷新更新。文中详细介绍了两者的工作原理、数据传输格式选择、具体实现方法及实际应用案例,如实时数据更新、表单验证与提交、动态加载内容等。同时,针对跨域问题、数据安全与性能优化提出了建议。总结指出,PHP与Ajax的结合能显著提升Web应用的效率和用户体验。
176 3
|
8月前
|
缓存 安全 前端开发
构建高效Web应用的五大关键技术
【10月更文挑战第42天】在数字化浪潮中,Web应用已成为企业与用户互动的重要桥梁。本文将深入探讨提升Web应用性能和用户体验的五项核心技术,包括前端优化、后端架构设计、数据库管理、安全性增强以及API开发的最佳实践。通过这些技术的应用,开发者可以构建出更快、更稳定且更安全的Web应用,满足现代网络环境的需求。

热门文章

最新文章