一种新型的Web缓存欺骗攻击技术
字数 1472 2025-08-18 11:38:28

Web缓存欺骗攻击技术详解

1. 背景与原理

1.1 Web缓存技术概述

Web缓存技术主要用于减少响应时延和减轻服务器负担,目前应用非常普遍,主要包括:

  • 本地缓存:在浏览器端实现,通过F5刷新不会重新获取已缓存文件,需Ctrl+F5强制刷新
  • 服务端缓存:在CDN、负载均衡、反向代理等设备上实现(统称缓存服务器)

1.2 服务端缓存工作原理

  1. 客户端请求静态文件
  2. 若缓存服务器未缓存该文件,则向Web服务器请求
  3. 获取静态文件后返回给客户端并缓存
  4. 后续相同请求直接返回缓存内容,直到过期

1.3 Web服务器解析问题

当请求类似http://www.example.com/home.php/nonexistent.css的URL时:

  • home.php存在而nonexistent.css不存在
  • 不同服务器处理方式不同:
    • 可能返回404 Not Found
    • 可能返回200 OK并返回home.php内容

关键问题:当返回200 OK时,缓存服务器会:

  • 认为请求的是静态文件(以.css结尾)
  • 实际缓存的是动态页面内容(home.php的输出)

2. 攻击方法详解

2.1 攻击步骤

  1. 诱导阶段:攻击者诱导已登录用户访问精心构造的URL,如https://www.bank.com/account.do/logo.png
  2. 请求阶段:受害者发起请求
  3. 缓存查询:缓存服务器未找到该页面缓存,向Web服务器请求
  4. 服务器响应:Web服务器返回https://www.bank.com/account.do内容,状态码200 OK
  5. 错误缓存:缓存服务器:
    • 保持原始URL不变
    • 因URL以.png结尾,误判为静态文件
    • 缓存该动态页面内容
  6. 正常响应:受害者收到正常响应
  7. 攻击完成:攻击者访问相同URL,直接获取受害者缓存的账户页面

2.2 关键问题

  • Cache-Control头部通常被缓存服务器忽略
  • 缓存服务器仅根据文件后缀判断是否缓存

3. 攻击成功条件

  1. Web服务器配置:对不存在的路径返回200 OK而非404

    • 符合此条件的服务器:
      • 原生PHP
      • 通常配置下的Django框架
      • 某些配置下的ASP.NET
  2. 缓存服务器配置:忽略HTTP头部,仅根据后缀判断是否缓存

    • 符合此条件的缓存服务器:
      • 某些配置下的Nginx
      • 某些配置下的Cloudflare
      • 某些配置下的IIS ARR
  3. 用户状态:受害者访问时必须处于已登录状态

4. 攻击影响

  • 将受害者个人页面变为公开可访问的缓存页面
  • 可能泄露的敏感信息包括:
    • 银行卡号等财务信息
    • 会话标识符
    • 密保问题答案
    • CSRF token
  • 可能导致攻击者完全控制受害者账户

5. 防御建议

  1. 缓存服务器配置

    • 根据Cache-Control等HTTP头部而非文件后缀判断是否缓存
    • 限制只缓存特定目录(如/static/)下的文件
  2. Web服务器配置

    • 对不存在的路径返回404而非200
    • 对动态内容明确设置Cache-Control: no-store
  3. 架构设计

    • 严格分离静态资源和动态内容
    • 静态资源使用独立域名或专用目录

6. 技术评价

  • 该技术由Omer Gil创新提出
  • 成功在Paypal实现攻击复现
  • 被评为2017十大Web黑客技术榜单第二名
  • 特点:
    • 利用现有缓存机制的设计缺陷
    • 可在多种主要缓存机制中实现
    • 为缓存安全研究提供了新思路

7. 参考资源

  • 原文链接:BlackHat PDF
  • 演示视频:参见原文链接
  • 本文来源:根据Omer Gil文章翻译改编
Web缓存欺骗攻击技术详解 1. 背景与原理 1.1 Web缓存技术概述 Web缓存技术主要用于减少响应时延和减轻服务器负担,目前应用非常普遍,主要包括: 本地缓存 :在浏览器端实现,通过F5刷新不会重新获取已缓存文件,需Ctrl+F5强制刷新 服务端缓存 :在CDN、负载均衡、反向代理等设备上实现(统称缓存服务器) 1.2 服务端缓存工作原理 客户端请求静态文件 若缓存服务器未缓存该文件,则向Web服务器请求 获取静态文件后返回给客户端并缓存 后续相同请求直接返回缓存内容,直到过期 1.3 Web服务器解析问题 当请求类似 http://www.example.com/home.php/nonexistent.css 的URL时: home.php 存在而 nonexistent.css 不存在 不同服务器处理方式不同: 可能返回404 Not Found 可能返回200 OK并返回 home.php 内容 关键问题 :当返回200 OK时,缓存服务器会: 认为请求的是静态文件(以.css结尾) 实际缓存的是动态页面内容( home.php 的输出) 2. 攻击方法详解 2.1 攻击步骤 诱导阶段 :攻击者诱导已登录用户访问精心构造的URL,如 https://www.bank.com/account.do/logo.png 请求阶段 :受害者发起请求 缓存查询 :缓存服务器未找到该页面缓存,向Web服务器请求 服务器响应 :Web服务器返回 https://www.bank.com/account.do 内容,状态码200 OK 错误缓存 :缓存服务器: 保持原始URL不变 因URL以.png结尾,误判为静态文件 缓存该动态页面内容 正常响应 :受害者收到正常响应 攻击完成 :攻击者访问相同URL,直接获取受害者缓存的账户页面 2.2 关键问题 Cache-Control 头部通常被缓存服务器忽略 缓存服务器仅根据文件后缀判断是否缓存 3. 攻击成功条件 Web服务器配置 :对不存在的路径返回200 OK而非404 符合此条件的服务器: 原生PHP 通常配置下的Django框架 某些配置下的ASP.NET 缓存服务器配置 :忽略HTTP头部,仅根据后缀判断是否缓存 符合此条件的缓存服务器: 某些配置下的Nginx 某些配置下的Cloudflare 某些配置下的IIS ARR 用户状态 :受害者访问时必须处于已登录状态 4. 攻击影响 将受害者个人页面变为公开可访问的缓存页面 可能泄露的敏感信息包括: 银行卡号等财务信息 会话标识符 密保问题答案 CSRF token 可能导致攻击者完全控制受害者账户 5. 防御建议 缓存服务器配置 : 根据 Cache-Control 等HTTP头部而非文件后缀判断是否缓存 限制只缓存特定目录(如/static/)下的文件 Web服务器配置 : 对不存在的路径返回404而非200 对动态内容明确设置 Cache-Control: no-store 架构设计 : 严格分离静态资源和动态内容 静态资源使用独立域名或专用目录 6. 技术评价 该技术由Omer Gil创新提出 成功在Paypal实现攻击复现 被评为2017十大Web黑客技术榜单第二名 特点: 利用现有缓存机制的设计缺陷 可在多种主要缓存机制中实现 为缓存安全研究提供了新思路 7. 参考资源 原文链接: BlackHat PDF 演示视频:参见原文链接 本文来源:根据Omer Gil文章翻译改编