一种新型的Web缓存欺骗攻击技术
字数 1472 2025-08-18 11:38:28
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文章翻译改编