【转】一种新型的Web缓存欺骗攻击技术
为了减少WEB响应时延并减小WEB服务器负担,现在WEB缓存技术已经用的非常普遍了,除了专门的CDN,负载均衡以及反向代理现在也会缓存一部分的网页内容。这里我要介绍一种WEB缓存欺骗攻击技术,这种攻击技术针对Paypal有成功的攻击案例。
背景原理
先简单介绍一下WEB缓存技术,它主要是缓存一些静态的,公开的文件,如CSS文件,JS文件,图片等。缓存分两类,一类是本地缓存,通过在浏览器上缓存实现,缓存之后通过F5刷新是不会重新获取已缓存文件的,通过Ctrl +F5强制刷新才会重新获取。另一类是在服务端实现,也就是在CDN、负载均衡、反向代理(后面统称缓存服务器)上实现,这次介绍的攻击技术就是针对这一种缓存。服务端的缓存原理是:客户端请求一个静态文件,如果缓存服务器没有缓存过这个文件,就会像WEB服务器请求,获取到静态文件返回给客户端,同时将这个文件缓存下来,下次再遇到同样的请求时就直接返回,直到这个缓存文件过期。
接下来讲一下WEB服务器解析的问题。假设客户端请求http://www.example.com/home.php/nonexistent.css 这个URL,其中home.php是真实存在的,而nonexistent.css不存在,那WEB服务器会怎么处理呢?针对这种情况的处理跟WEB服务器用的技术以及配置相关,有的会返回404 not found,有的会返回200 OK,然后把home.php返回回来。如果服务器返回200 OK就要注意了,这时缓存服务器拿到的请求是http://www.example.com/home.php/nonexistent.css,是一个静态页面,而WEB服务器返回给缓存服务器的结果是http://www.example.com/home.php,不是一个静态页面,但是缓存服务器并不知道。
攻击方法
根据上面的背景原理介绍,攻击方法也很容易总结出来了:
1.攻击者引诱已登录的用户(受害者)访问https://www.bank.com/account.do/logo.png
2.受害者请求https://www.bank.com/account.do/logo.png
3.缓存服务器接收到请求,没查到这个页面,于是向WEB服务器请求
4.WEB服务器返回https://www.bank.com/account.do,状态码是200 OK
5.缓存服务器收到结果,由于状态码是200 OK,会认为URL保持不变,然后由于这个URL以.png结尾,认为它是一个静态文件,于是会缓存这个文件
6.受害者得到正常结果
7.攻击者访问https://www.bank.com/account.do/logo.png,请求到达缓存服务器,缓存服务器直接返回受害者的缓存账户页面给攻击者,攻击完成。

这里有一个问题,就是HTTP header里面有一个Cache-Control,用于指示是否要缓存该页面,但是很多情况下,缓存服务器是不看这个的,直接根据文件后缀判断。
这种攻击的结果就是将受害者的个人页面变为了一个缓存在服务器上,可以公开访问的页面。这个页面可能包含受害者敏感信息,如银行卡号,也可能有这个受害者的会话标识、密保问题答案、CSRF token等,有可能让攻击者获取到受害者账号的控制权。
攻击成功的条件
我们再来梳理一下这个攻击的条件:
1.WEB服务器会将类似http://www.example.com/home.php/nonexistent.css这种页面解析为home.php
2.缓存服务器会无视http header,只根据文件后缀来判断是否缓存该文件
3.受害者访问该页面时必须已登录
那么,那些组件满足这些条件呢?(以下具体的配置请参见文末所附链接)
符合条件1的WEB服务器有:
l 原生的PHP
l 通常配置下的基于python的WEB框架Django
l 某些配置下的ASP.NET
符合条件2的缓存服务器有:
l 某些配置下的Nginx
l 某些配置下的Cloudflare
l 某些配置下的IIS ARR
从这个总结可以看出,多数情况下这个是可以通过配置避免的,所以有些人认为这不算是个漏洞,所以也并没有什么补丁来解决这个问题,估计这个问题在很多地方都存在。
防御建议
根据触发条件我们给出的修改建议如下:
1.配置缓存服务器根据http header来判断是否缓存页面;
2.将所有静态文件放在指定的目录,只缓存这个目录里的文件;
3.配置WEB服务器在解析类似http://www.example.com/home.php/nonexistent.css 这种页面时返回404或者302。
原文信息
本文根据Omer Gil的文章翻译而成。他创新地颠覆了WEB缓存欺骗利用方式,通过控制 Web 缓存可以保存其它用户的敏感数据,并成功在 Paypal 中实现了攻击复现。从 Omer Gil 的演讲和报告中可以看到,Web 缓存欺骗是一项厉害且有想像力的技术,这种技术可以在多种主要的缓存机制中利用实现,为未来的深入研究提供一个很好的基础平台。
随着应用程序安全性的不断成熟,寻找真正的新技术变得越来越难,所以在不断的演化过程中,能看到这种可证实的安全隐患,非常令人耳目一新。因此,这种攻击技术被评为2017十大WEB黑客技术榜单的第二名。
演示视频:
原文链接:https://www.blackhat.com/docs/us-17/wednesday/us-17-Gil-Web-Cache-Deception-Attack-wp.pdf
【转】一种新型的Web缓存欺骗攻击技术的更多相关文章
- Web缓存欺骗
该漏洞主要是cdn安全配置的问题,cdn主要存储以下文件,加快访问速度 class, css, jar, js, jpg, jpeg, gif, ico, png, bmp, pict, csv, d ...
- DNS缓存欺骗攻击
1.受影响的无线网络设备 一些D-link.TP-Link.Belkin.Linksys及IPTime等品牌无线路由器存在安全隐患. 2.漏洞描述 攻击者向DNS服务器注入非法网络域名地址,如果服务器 ...
- HTML 09 web 内容与攻击技术
Servlet 改进 CGI 之前提及的 CGI, 由于每次接到请求, 程序都要跟着启动一次, 因此一旦访问量过大, web 服务器要承担低昂当大的负载, 而 servlet 运行在与 web 服务器 ...
- DNS域欺骗攻击详细教程之Linux篇
.DNS域欺骗攻击原理 DNS欺骗即域名信息欺骗是最常见的DNS安全问题.当一 个DNS服务器掉入陷阱,使用了来自一个恶意DNS服务器的错误信息,那么该DNS服务器就被欺骗了.DNS欺骗会使那些易受攻 ...
- apache、nginx的虚拟域名配置和rewrite配置,以及web缓存的几种方式
web缓存一般用来缓解数据库压力. 通常有几种方法,文件静态化,缓存服务memcached.redis等. 伪静态,一般指在url上貌似访问静态html页的形式,这样有利于搜索引擎访问到网站页面,实际 ...
- 作为前端应当了解的Web缓存知识
缓存优点 通常所说的Web缓存指的是可以自动保存常见http请求副本的http设备.对于前端开发者来说,浏览器充当了重要角色.除此外常见的还有各种各样的代理服务器也可以做缓存.当Web请求到达缓存时, ...
- 前端应当了解的Web缓存知识
缓存优点 通常所说的Web缓存指的是可以自动保存常见http请求副本的http设备.对于前端开发者来说,浏览器充当了重要角色.除此外常见的还有各种各样的代理服务器也可以做缓存.当Web请求到达缓存时, ...
- 浅谈Web缓存
在前端开发中性能一直都是被大家所重视的一点,然后判断一个网站的性能最直观的就是看网页打开的速度. 其中提高网页反应的速度的一个方式就是使用缓存.一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟, ...
- Web 技术人员需知的 Web 缓存知识(转)
最近的译文距今已有4年之久,原文有一定的更新.今天踩着前辈们的肩膀,再次把这篇文章翻译整理下.一来让自己对web缓存的理解更深刻些,二来让大家注意力稍稍转移下,不要整天HTML5, 面试题啊叨啊叨的~ ...
随机推荐
- 纯CSS实现3D图像轮转
CSS演武场今天继续,今天看一个纯css实现的3D图像轮转效果,请大家猛戳研究效果先,也可下载收藏先. 首先看html文件,div.billboard为效果的容器,利用10个div.poster分割图 ...
- 模拟界面请求到web服务器
客户端 package com.lsw.client; import java.io.*; import java.net.*; import java.util.*; public class HT ...
- CI框架的事务开启、提交和回滚
1.运行事务 $this->db->trans_start(); // 开启事务$this->db->query('一条SQL查询...');$this->db-> ...
- chrome安装(sentos7)
在服务器上安装chrome是用来模拟浏览器抓取数据的. 直接 yum install chrome是安装不了的 你要做以下几步就可以了. 配置yum源 1. vim /etc/yum.repos.d/ ...
- golang make()的第三个参数
golang分配内存有一个make函数,该函数第一个参数是类型,第二个参数是分配的空间,第三个参数是预留分配空间,前两个参数都很好理解, 对于第三个参数,例如a:=make([]int, 5, 10) ...
- 机器学习之路: 初识tensorflow 第一个程序
计算图 tensorflow是一个通过计算图的形式来表示计算的编程系统tensorflow中每一个计算都是计算图上的一个节点节点之间的边描述了计算之间的依赖关系 张量 tensor张量可以简单理解成多 ...
- 【KTU Programming Camp (Day 3)】Queries
http://codeforces.com/gym/100739/problem/A 按位考虑,每一位建一个线段树. 求出前缀xor和,对前缀xor和建线段树. 线段树上维护区间内的0的个数和1的个数 ...
- [Luogu5106]dkw的lcm
https://minamoto.blog.luogu.org/solution-p5106 容易想到枚举质因子及其次数计算其贡献,容斥计算$\varphi(p^i)$的次方数. #include&l ...
- BZOJ 3130: [Sdoi2013]费用流 网络流 二分 最大流
https://www.lydsy.com/JudgeOnline/problem.php?id=3130 本来找费用流的题,权当复习一下网络流好了. 有点麻烦的是double,干脆判断大小或者二分增 ...
- 批量替换url,指定内容不替换
如果需要批量替换url的某几部分,当然是用正则了比如在CI框架中要把 <img src="pc/baidu/aa.jpg"> 替换成 <img src=" ...