【转】一种新型的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, 面试题啊叨啊叨的~ ...
随机推荐
- 决策树 (decision tree)
内容学习于 ApacheCN github 定义: 分类决策树模型是一种描述对实例进行分类的树形结构.决策树由结点(node)和有向边(directed edge)组成.结点有两种类型:内部结点(in ...
- 《Android源码设计模式》--Builder模式
No1: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 No2: 在Android源码中,最常用到的Builder模式就是AlertDialog.Builder No3: ...
- PAGELATCH_EX Contention on 2:1:103
This blog post is meant to help people troubleshoot page latch contention on 2:1:103. If that’s what ...
- Django快速创建博客,包含了整个框架使用过程,简单易懂
创建工程 ...
- NandFlash_control
驱动:编写任何设备的驱动程序,都需要对该设备的原理有一定了解和认识.对于外部设备的访问总是需要通过一个控制器来间接访问,对于这个控制器的控制程序称为驱动程序 Nandflash 原理: 一:角色分析 ...
- android 打开 res raw目录 中 数据库文件
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 安卓不能直接打开 res raw 中的 数据库 文件. 通过 资源 获取资源 方法 , ...
- [BZOJ4811][YNOI2017]由乃的OJ(树链剖分+线段树)
起床困难综合症那题,只要从高往低贪心,每次暴力跑一边看这一位输入0和1分别得到什么结果即可. 放到序列上且带修改,只要对每位维护一个线段树,每个节点分别记录0和1从左往右和从右往左走完这段区间后变成的 ...
- BZOJ.2716.[Violet3]天使玩偶(K-D Tree)
题目链接 KD-Tree.因为插入过多点后可能会退化成链,所以左/右子树sz > α*整棵子树sz时对整棵子树进行重构. 树的节点数必须是3n?why?洛谷,BZOJ都这样..(数据范围错了吧 ...
- PHP代码为什么不能直接保存HTML文件——>PHP生成静态页面教程
1.服务器会根据文件的后缀名去进行解析,如果是HTML文件则服务器不会进行语法解析,而是直接输出到浏览器. 2.如果一个页面中全部都是HTML代码而没有需要解析的PHP语法,则没有必要保存为PHP文件 ...
- ThinkPHP快速实现数据分页(前端/后端分离)
数据 分页 可能是web 编程里最常用到的功能之一.thinkphp 实现分页功能十分简洁.只需要定义 几个参数 就能搞定.当然,扩展也是十分方便的. 让我们现在就开始thinkphp的分页实现吧. ...