如何防止 CPDoS 攻击?

2019-10-23 12:05

背景

德国一组网络安全研究人员发现了一种针对网络缓存系统的新的缓存中毒攻击,攻击者可以利用这种攻击迫使

目标网站向大多数访问者提供错误页面,而不是合法的内容或资源。这个问题影响到 Varnish 等反向代理缓存系统,以及一些广泛使用的内容分发网络(CDNs)服务,包括 Amazon CloudFront、Cloudflare、Fastly、Akamai 和 CDN77。

什么是CDN?

简而言之,内容分发网络(CDN)是一组地理上分布的服务器,它们位于网站的原始服务器和访问者之间,以优化网站的性能。CDN 服务只是简单地存储/缓存来自源服务器的静态文件(包括 HTML 页面、java 文件、样式表、图像和视频),并更快地将它们交付给访问者,而无需一次又一次地返回到源服务器。每个地理上分布的 CDN 服务器也共享缓存文件的副本,并根据其位置将其提供给访问者。通常,在定义时间或手动清除之后,CDN 服务器通过从原始服务器检索每个 web 页面的新更新副本来刷新缓存,并将它们存储起来以备将来的请求。

原理:CPDoS 攻击是如何对付 CDNs 的?

这种攻击被称为 CPDoS,是缓存中毒拒绝服务的缩写。CDN 中间服务器被错误配置为缓存 web资源或页面,其中包含原始服务器返回的错误响应。根据三位德国学者(Hoai Viet Nguyen、Luigi Lo Iacono 和 Hannes Federrath)的说法,CPDoS 攻击仅通过发送一个包含格式错误的标头的 HTTP 请求,就威胁到网站 web 资源的可用性。“当攻击者可以为可缓存的资源生成 HTTP 请求时,问题就出现了,其中的请求包含不准确的字段,这些字段被缓存系统忽略,但是在原始服务器处理时引发错误。”远程攻击者通过发送包含格式错误的标头的 HTTP 请求来请求目标网站的 web 页面。

如果中间的 CDN 服务器没有所请求资源的副本,它将把请求转发给源 web 服务器,而源 web服务器将由于格式错误而崩溃。因此,原始服务器随后返回一个错误页面,该错误页面最终由缓存服务器存储,而不是由请求的资源存储。现在,每当合法的访问者试图获取目标资源时,他们将获得缓存的错误页面,而不是原始内容。CDN 服务器也会将相同的错误页面传播到 CDN 网络的其他边缘节点,导致受害者网站的目标资源不可用。值得注意的是,一个简单的请求就足以用一个错误页面替换缓存中的真实内容。这意味着这样的请求仍然低于 web 应用程序防火墙(WAFs)和 DDoS 保护的检测阈值,特别是当它们扫描大量不规则网络流量时。”

类型:三种 CPDoS 类型

要对 CDNs 执行这种缓存中毒攻击,有三种类型的 HTTP 请求:

HTTP 头文件大小过大(HHO)——在 web 应用程序使用比原始服务器接受更大的头文件大小限制的缓存的情况下,包含超大头文件的 HTTP 请求。

HTTP 元字符(HMC)——这种攻击不发送过大的报头,而是尝试使用包含有害元字符的请求报头绕过缓存,如换行/回车(\n)、换行(\r)或铃声(\a)。

HTTP 方法覆盖(HMO)——使用 HTTP 覆盖头绕过禁止删除请求的安全策略。

解决方法

目前有对付 CPDoS 攻击的缓解措施。最简单的解决办法是,网站所有者配置其 CDN 服务,以便默认情况下不缓存 HTTP 错误页面。Amazon Web Services (AWS)团队确认了 CloudFront 上的漏洞,并通过禁止在默认情况下缓存状态码为 400 Bad Request 的错误页面解决了这个问题。这是 AWS 团队针对 CPDoS 所进行的一个默认设置,我们可以自定义错误页响应进一步加强对 CPDoS 的防护。

实施方法一:通过 AWS Console

1. AWS Console 进入 CloudFront 界面(https://console.aws.amazon.com/cloudfront/),点击分配设置或者 distribution ID 进入分配设置;

  1. 进入错误页设置

  1. 点击创建自定义错误相应按钮,开始设置错误自定义相应。

  1. 选择相应的 http 代码,配置错误缓存的最小时间(可以设置为 0,借此防御 CPDoS 攻击)。

  1. 自定义错误响应,可以将错误跳转至已配置错误页面(如果服务器端已经配置,该配置可以省略)

二、通过 AWS CLI

Json 文件案例如文件末尾所示

已有分配,通过更新来添加;

简单命令

aws cloudfront update-distribution–distribution-config file://xxx.json–idxxxxxxxx

详细命令参数

新建分配,错误页面配置的 distribution-config 参数 CustomErrorResponses 中;

简单命令

aws cloudfront create-distribution–distribution-config file://xxx.json

详细命令参数

JSON Syntax, 修改 CustomErrorResponses 实现错误页面配置:


云代理伙伴
扫描关注微信公众号
获取更多云端资讯
联系我们
——

模板表单-2(1)

  • 姓名*

  • 电话*

  • 邮箱*

  • 职称*

  • 公司*

  • 地址*

  • 需求*

  • * 点击提交,即表示您同意我们存储和处理您提交的个人信息,以向您提供所请求的内容,该信息仅供公司提供服务使用。您的信息受到相关法律的安全保护。