Web缓存利用分析(二)

news2025/2/23 0:29:26

导语:在上一篇文章中,大致介绍了一些关于Web Cache的攻击方式及CTF中的一些出现。而本篇文章则会聚焦于Web Cache在学术前沿的一些攻击利用方式的探究。

前言

在上一篇文章中,大致介绍了一些关于Web Cache的攻击方式及CTF中的一些出现。而本篇文章则会聚焦于Web Cache在学术前沿的一些攻击利用方式的探究。

本篇文章介绍的是发表在网络安全顶会2019 CCS的文章《Your Cache Has Fallen: Cache-Poisoned Denial-of-Service Attack》,主要介绍关于Server Cache Poisoning在真实世界的利用,以及所带来的Dos攻击。

背景介绍

关于什么是Server Cache Poisoning,还不知道的同学可以在之前的文章中做一些了解。

由于Server Cache的存在,第一个访问者的request显得尤为重要,稍有不慎,那么就可能缓存下一个恶意的response,使后来的访问者受到威胁:
在这里插入图片描述
那么本篇文章研究的就是这个问题,即利用恶意的request,使Cache缓存恶意的response,让访问者受到拒绝服务攻击:
在这里插入图片描述
通过特定的request,可以使目标网站缓存不同的response,例如使静态资源,甚至网站不可用:
在这里插入图片描述

方法实现

那么应该发送怎样的request,才会使Server Cache缓存恶意的request,从而导致拒绝服务攻击呢?
在这里插入图片描述
我们可以看到,攻击者可以发送一个带有恶意值(X-Malicious-Header)的request请求,而由于该请求是第一次请求,因此其不存在于Cache中,于是交由Origin Server进行处理,但是由于http header中存在非法值,导致Origin Server解析时出现400的错误,并进行response,而此时由于Cache服务器的设置问题,其错误的将请求example.org/index.html的请求,判定为response为400,从而导致以后的访问者再次访问该页面时,只能得到页面400错误的response,从而达成Dos攻击。

那么具体上,我们可以发送哪些恶意value使网站出现解析异常呢?

作者在此提出3种攻击方式:

· HTTP Method Override (HMO) Attack

· HTTP Header Oversize (HHO) Attack

· HTTP Meta Character (HMC) Attack

HTTP Method Override (HMO) Attack

对于HMO攻击,作者发现存在一些http header可以更改请求方式,例如如下几种:

X-HTTP-Method-Override
X-HTTP-Method
X-Method-Override

假设请求发送形式为:

GET /index.html HTTP/1.1
Host: example.org
X-HTTP-Method-Override:POST

此时服务器则会认为该请求为POST请求,于是会返回:

HTTP/1.1 404 Not Found
Content-Length: 29
Content-Type: text/plain
POST on /index.html not found

从而导致请求资源方式的错误,以至于Cache服务器缓存404页面,而以后的用户,如果正常通过GET访问该网址,则会导致DOS攻击,回显404 Not Found:
在这里插入图片描述

HTTP Header Oversize (HHO) Attack

对于HHO攻击,作者发现,如果request请求中某个http header属性值异常长,那么会导致目标服务器解析出现400 Bad Request问题。

那么假设攻击者请求:

GET /index.html HTTP/1.1
Host: example.org
X-Oversized-Header: Big value

则目标服务器将返回:

HTTP/1.1 400 Bad Request
Content-Length: 20
Content-Type: text/plain
Header size exceeded

那么当普通用户请求该网址时,就会访问到Cache中所记录的400 Bad Request页面,从而导致拒绝服务攻击。
在这里插入图片描述
但该攻击为什么会发生呢?我们知道例如CDN,是会对过长的request进行拦截的,并不会进行缓存或者发送至源服务器。

但对于一个request请求,其header长度通常被限制在8000 bytes以下,而例如Amazon CloudFront CDN允许的header长度却为24,713 bytes。因此如果攻击者发送的header长度为10000bytes,是可以通过CDN的拦截,并产生危害的。

HTTP Meta Character (HMC) Attack

对于HMC攻击,作者发现为了防止CRLF攻击,通常http会禁止value中带有\n或\r等符号,但由于Cache对此可能并不做过滤,那么就会产生语义上的gap,假设攻击者发送请求:

GET /index.html HTTP/1.1
Host: example.org
X-Metachar-Header: \n

由于该请求为第一次请求,Cache服务器将其转发给源服务器,而源服务器解析由于遇到危险字符,将会返回:

HTTP/1.1 400 Bad Request
Content-Length: 21
Content-Type: text/plain
Character not allowed

但由于Cache服务器对这些字符未必有过滤,于是将其对应缓存下来,那么当正常用户访问该页面时,将受到400 Bad Request的回显,从而产生Dos攻击。
在这里插入图片描述

实验测试

作者为了验证自己的3种攻击方式的可用性,其选择5个较为出名的proxies caches以及10个CDN:

Apache HTTP Server (Apache HTTPD) v2.4.18
Nginx v1.10.3,
Varnishv6.0.1
Apache Traffic Server (Apache TS) v8.0.2
Squid v3.5.12
Akamai
CloudFront
Cloudflare
Stackpath
Azure CDN77
CDNSun
Fastly
KeyCDN
G-Score Labs

首先,为了达成Dos攻击,那么要求上述缓存服务器必须可以缓存400 / 500等http状态的页面,于是作者先对其做了测试:
在这里插入图片描述
我们可以发现,只有Varnish, Apache TS, Akamai, Azure, CDN77, Cloudflare, CloudFront可以缓存400 / 500的页面,那么后面的攻击测试也将聚焦于此。

首先是HMO攻击,对于请求方式覆盖的http属性,作者先测试了一下哪些后端框架是可以接受的:
在这里插入图片描述
不难发现,Play1、Symfony、Lavarel框架都是默认支持这一方式的,那么如果后端使用上述框架之一,都可能遭受HMO攻击的影响。

对于HHO攻击,由于其关键点在于header限制长度语义不对等的问题,于是作者测试了一些现有web框架,CDN等header限制的长度:
在这里插入图片描述
从图中不难看出,假设目标网站使用Play2作为网站后端框架,使用Azure作为缓存,那么即可能遭受HHO攻击,产生Dos攻击,因为Play2的header长度限制为8319bytes,而Azure为24567bytes,如果攻击者发送10000bytes的header进行request,那么就可能被缓存下400 Bad Request的状态。

对于HMC攻击,由于其依赖于服务端对http header中关键字符的过滤,而缓存服务器则无视的语义差异,于是作者也做了相应的测试:
在这里插入图片描述
我们可以看到,当http header属性中带有\t,对于Play2后端框架会发生400 Bad Request,而对于CDN Azure,可以正常放行,那么如此一来,攻击即可用\t来攻击Play2+Azure的组合,产生Dos攻击。

综上所述,可以发现不同CDN和不同后端的组合可能都会引入安全隐患,以下是总结列表:
在这里插入图片描述
我们发现对于使用CDN CloudFront的网站,非常容易受到HMO / HHO / HMC的攻击。而对于Varnish, Akamai, CDN77, Cloudflare或是Fastly则相对安全。

与此同时,作者还对真实世界的网站做了测试,查看有多少网站使用较为危险的CDN或中间件:
在这里插入图片描述
发现1200万的urls是使用CloudFront,证明HMO / HHO / HMC攻击的可用度比较高。

总结

本篇文章基于Server Cache Poisoning的攻击原理,提出了CPDos攻击,可使用三种不同的攻击方式,使一些敏感CDN与web后端组合使用的网站出现DOS攻击,个人认为还是非常不错的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/507286.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Web缓存利用分析(一)

导语:最近看到一些Web Cache方面的攻击,于是总结了一下,内容如下。 前言 最近看到一些Web Cache方面的攻击,于是总结了一下,内容如下。 背景知识 Cache是一种经典的用空间换时间的做法,其应用场景非常广…

Htop使用说明

目录 引言 什么是htop htop安装 htop界面介绍 htop功能介绍 引言 我们使用服务器的时候常常需要关注下自己的程序资源占用情况,htop就是一种互动式的进程查查看器,整齐用下来感觉比top的逼格高,造作可视化都更方便些,我觉得还…

《Vue.js 设计与实现》—— 02 框架设计核心要素

框架设计并非仅仅实现功能那么简单,里面有很多学问。例如: 框架应该给用户提供哪些构建产物?产物的模块格式如何? 当用户没有以预期的方式使用框架时,是否应该打印合适的警告信息从而提供更好的开发体验,让…

优化性能测试分析:如何科学利用CPU异常曲线

性能测试为保证软件质量起到重要作用,对于交易量较大的应用系统,性能测试更是一个必不可少的环节。 测试人员通常通过监测响应时间、吞吐量、应用服务器和数据库服务器的CPU及内存来衡量系统的性能是否达标,那么,在性能测试过程中…

LabVIEWCompactRIO 开发指南13 网络发布的共享变量

LabVIEWCompactRIO 开发指南13 网络发布的共享变量 跨网络共享标签的一种方法是网络共享变量。术语网络变量是指网络上可以在程序、应用程序、远程计算机和硬件之间进行通信的软件项。网络共享变量非常适合1:N或N:1设置,因为它们有一个内置的连接管理器来管理传入…

《Netty》从零开始学netty源码(五十六)之RecvByteBufAllocator

RecvByteBufAllocator 在创建channel的过程中会创建一个相应的配置类,该类存储了一些关于channel的属性,包括分配内存的ByteBufAllocator和预估大小的RecvByteBufAllocator,通过前面的学习我们知道ByteBufAllocator分配内存的时候最终会委托…

Consensus洞察|2023,Web3“脱虚向实”元年

前言 2023年对于Web3来说,是一个被推到主流社会前台的关键时期。 出品|欧科云链研究院 作者|毕良寰 Web3作为新兴科技,其发展路径在近几年尤为艰难,充斥着“丑闻”的2022年,以Luna/UST的崩溃为起点开启了…

c++类与对象(二)——赋值运算符重载与取地址操作符重载

文章目录 一.运算符重载1.运算符重载的概念2.实现Date类&#xff08;1&#xff09;> < > < ! 重载&#xff08;2&#xff09; - - 重载&#xff08;3&#xff09;前置与后置重载&#xff08;4&#xff09;日期-日期的实现&#xff08;5&#xff09;<< 与 &g…

代码随想录之额外题目

数组 1207 独一无二的出现次数 看数组的大小和长度都没有很大&#xff0c;所以可以直接用数组来做哈希表&#xff0c;用一个数组来记录出现次数&#xff0c;再用一个数组来标记出现次数的值是否出现过。就是O(n) class Solution {public boolean uniqueOccurrences(int[] arr…

Spring IOC:IOC在Spring底层中如何实现?

编译软件&#xff1a;IntelliJ IDEA 2019.2.4 x64 操作系统&#xff1a;win10 x64 位 家庭版 Maven版本&#xff1a;apache-maven-3.6.3 Mybatis版本&#xff1a;3.5.6 spring版本&#xff1a;5.3.1 文章目录 Spring系列专栏文章目录一. 什么是IOC?二. IOC在spring中的实现2.1…

java 基础

第一章 计算机认识 1 概述 计算机包括**硬件&#xff08;hardware&#xff09;和软件&#xff08;software&#xff09;**两部分。硬件包括计算机可以看得见的物理部分&#xff0c;而软件提供看不见的指令。 2 计算机硬件介绍 3 计算机硬件——中央处理器 中央处理器&#xff0…

PyQGIS 加载单个shp文件到图层面板

打开QGIS Desktop 3.22.16&#xff0c;点击菜单栏 【设置】——>【Python控制台】 在Python控制台中点击【显示编辑器】按钮&#xff0c;打开Python编辑器 点击第一个按钮 【打开脚本文件】&#xff0c;选择加载图层列表到图层面板源码 # 加载图层列表到图层面板中 from qgi…

DataGridXL中快速搜索单元格和底部全屏模式区域隐藏

DataGridXL表格是在2020年发布&#xff0c;DataGridXL在设计时就考虑到了性能。提供最快、最简单、最可靠的数据网格。DataGridXL支持所有常用所有的浏览器&#xff0c;为 Web 应用程序提供类似于 Microsoft Excel 的体验&#xff0c;它支持前端框架有Vue、React、Angular等。 …

Acid burn(★★)

运行程序 先是弹出一个neg 然后是真正的程序界面 有一个输入Serial和Name的判断 还有一个只输入Serial的判断 查壳 没有壳&#xff0c;是Delphi程序 先除去一个Neg 找到Neg弹出的程序&#xff0c;在程序头下个断&#xff0c;运行程序&#xff0c;此时栈顶是调用此功能的…

希亦、米家、必胜家用洗地机测评,洗地机十年老用户告诉你哪款好用

如今&#xff0c;各种清洁设备早已进入我们的生活。其中&#xff0c;各种扫地机和洗地机更是出现在各大商场、酒店、餐饮、医院等领域。 洗地机是一种集洗地、吸尘于一体的清洗设备&#xff0c;它适合清扫如粉尘、烟头、纸屑、厨余、毛发等垃圾。它的工作效率高&#xff0c;可…

如何解决 :libstdc++.so.6: version `GLIBCXX_3.4.30‘ not found

在使用 python 以下的命令时&#xff0c; from scipy.signal import convolve出现报错&#xff1a; /home/anaconda3/envs/norm/lib/python3.9/site-packages/scipy/linalg/../../../../libstdc.so.6: version GLIBCXX_3.4.30 not found (required by /home/anaconda3/envs/no…

上海车展有哪些让人过目不忘的电驱技术?

前言 2023年的第二十届上海国际汽车工业展览会&#xff08;以下简称“上海车展”&#xff09;中&#xff0c;扁线、SiC、800V、油冷成为了大多数车企电驱动力总成的标配。下面选取几家非常有特色的电驱技术进行解析&#xff0c;并探讨下电驱技术的发展方向。 舍弗勒对标件电驱…

前几天面了个32岁的测试员,年薪50w问题基本都能回答上,应该刷了不少八股文···

互联网行业竞争是一年比一年严峻&#xff0c;作为测试工程师的我们唯有不停地学习&#xff0c;不断的提升自己才能保证自己的核心竞争力从而拿到更好的薪水&#xff0c;进入心仪的企业&#xff08;阿里、字节、美团、腾讯等大厂.....&#xff09; 所以&#xff0c;大家就迎来了…

2023.05.09-使用AI克隆孙燕姿的声音来进行唱歌

文章目录 1. 简介 2. 资源合集 3. 准备数据集3.1. 人声分离3.2. 音频进行切片化处理3.2.1. 3.3. 数据集存放格式要求 4. 训练4.1. 启动web UI.bat 4.2. 识别数据集4.3. 数据预处理4.4. 设置训练超参数4.4.1. 选择模型分支 4.5. 进行训练4.5.1. 关于显存的说明 5. 推理5.1. 加载…

从bootanimation出发分析OpenHarmony下Gralloc buffer管理机制

从bootanimation出发分析OpenHarmony下Gralloc buffer管理机制 引言 这个文档主要记录从bootanimation角度出发&#xff0c;分析OpenHarmony下对gralloc buffer的管理&#xff01;由于OpenHarmony图形子系统过于复杂&#xff0c;且个人由于能力有限&#xff0c;这里我仅从grall…