为了减少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缓存欺骗攻击技术的更多相关文章

  1. Web缓存欺骗

    该漏洞主要是cdn安全配置的问题,cdn主要存储以下文件,加快访问速度 class, css, jar, js, jpg, jpeg, gif, ico, png, bmp, pict, csv, d ...

  2. DNS缓存欺骗攻击

    1.受影响的无线网络设备 一些D-link.TP-Link.Belkin.Linksys及IPTime等品牌无线路由器存在安全隐患. 2.漏洞描述 攻击者向DNS服务器注入非法网络域名地址,如果服务器 ...

  3. HTML 09 web 内容与攻击技术

    Servlet 改进 CGI 之前提及的 CGI, 由于每次接到请求, 程序都要跟着启动一次, 因此一旦访问量过大, web 服务器要承担低昂当大的负载, 而 servlet 运行在与 web 服务器 ...

  4. DNS域欺骗攻击详细教程之Linux篇

    .DNS域欺骗攻击原理 DNS欺骗即域名信息欺骗是最常见的DNS安全问题.当一 个DNS服务器掉入陷阱,使用了来自一个恶意DNS服务器的错误信息,那么该DNS服务器就被欺骗了.DNS欺骗会使那些易受攻 ...

  5. apache、nginx的虚拟域名配置和rewrite配置,以及web缓存的几种方式

    web缓存一般用来缓解数据库压力. 通常有几种方法,文件静态化,缓存服务memcached.redis等. 伪静态,一般指在url上貌似访问静态html页的形式,这样有利于搜索引擎访问到网站页面,实际 ...

  6. 作为前端应当了解的Web缓存知识

    缓存优点 通常所说的Web缓存指的是可以自动保存常见http请求副本的http设备.对于前端开发者来说,浏览器充当了重要角色.除此外常见的还有各种各样的代理服务器也可以做缓存.当Web请求到达缓存时, ...

  7. 前端应当了解的Web缓存知识

    缓存优点 通常所说的Web缓存指的是可以自动保存常见http请求副本的http设备.对于前端开发者来说,浏览器充当了重要角色.除此外常见的还有各种各样的代理服务器也可以做缓存.当Web请求到达缓存时, ...

  8. 浅谈Web缓存

    在前端开发中性能一直都是被大家所重视的一点,然后判断一个网站的性能最直观的就是看网页打开的速度. 其中提高网页反应的速度的一个方式就是使用缓存.一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟, ...

  9. Web 技术人员需知的 Web 缓存知识(转)

    最近的译文距今已有4年之久,原文有一定的更新.今天踩着前辈们的肩膀,再次把这篇文章翻译整理下.一来让自己对web缓存的理解更深刻些,二来让大家注意力稍稍转移下,不要整天HTML5, 面试题啊叨啊叨的~ ...

随机推荐

  1. python opencv入门-形态学转换

    目标: 学习不同的形态操作 例如 腐蚀.膨胀.开运算.闭运算 等. 我们要学习的函数有 cv2.erode(),cv2.dilate(),cv2.morphologyEx() 等. 原理 :一般对二值 ...

  2. button元素的id与onclick的函数名字相同 导致方法失效的问题

    需求需要在原先页面添加一个按钮,触发一个function,如此简单的操作,却无意间发现了一个问题.(还是对html了解的太少) 先看下在菜鸟教程的示例(错误代码) <!DOCTYPE html& ...

  3. java-Excel导出中的坑

    在Excel导出过程中,若遇到合并单元格样式只有第一行合并,而下面要合并的行没有边框显示. 一般问题出在将单元格样式设置与合并单元格放在同一个循环中导致. 以下为一个完整版的demo以供参考 定义边框 ...

  4. Django2.0中URL的路由机制

    路由是关联url及其处理函数关系的过程.Django的url路由配置在settings.py文件中ROOT_URLCONF变量指定全局路由文件名称. Django的路由都写在urls.py文件中的ur ...

  5. python编程之socket编程基础

    python socket编程,首先需要import   socket模块 首先创建一个socket对象 expl = socket.socket(socket.AF_INET,socket.SOCK ...

  6. hdu 4560 拆点最大流 ***

    题意: 2013年一开始,一档音乐节目“我是歌手”就惊艳了大家一回.闲话少说,现在,你成为了这档节目的总导演,你的任务很简单,安排每一期节目的内容. 现 在有N个歌手,M种歌曲流派(Rock,Pop之 ...

  7. Codeforces Round #352 (Div. 1) A. Recycling Bottles 暴力

    A. Recycling Bottles 题目连接: http://www.codeforces.com/contest/671/problem/A Description It was recycl ...

  8. 前端换mac可以参考搭一下简单的环境

    1. 安装brew套件管理器 安装向导请点击,注意的地方,mac必须先设置一个密码.装好之后就可以安装各种套件. 2. 安装nvm管理node版本 brew install nvm 安装完成之后nvm ...

  9. Linux下的两个经典宏定义 转

    http://www.linuxidc.com/Linux/2016-08/134481.htm http://www.linuxidc.com/Linux/2013-01/78003.htm htt ...

  10. VS增强插件 Supercharger破解教程

    Supercharger 破解教程:步骤:1.打开Supercharger的options; 2.点击Pricing & Registration 3.复制 license tt4e2HN4X ...