Google Cloud 本周发布博客介绍最近一段时间新出现的攻击类型:HTTP/2 快速重置。
攻击者利用这个方法从 8 月份开始对谷歌云平台的客户发起攻击,其中攻击者在某次攻击中在 1 秒内发出了高达 3.98 亿个请求,这也是目前有记录以来的每秒请求数最高的一次攻击。
HTTP/2 的特性:
HTTP/2 的主要设计目标就是效率,其特性之一就是提高 TCP 连接的利用率,与 HTTP/1.1 中的每个请求都是排队处理不同,HTTP/2 中可以在单个 TCP 连接中打开多个并发流,每个流对应着一个 HTTP 请求。
理论上说并发打开流的最大数量应该由目标服务器控制,但实际上客户端的每个请求可以打开 100 个流,服务器也会处理这 100 个流,因为服务器并不能单方面调整限制。
这种并发操作的好处在于每个连接的利用率都可以提高 100 倍,这比 HTTP/1.1 的排队处理要优秀的多。
HTTP/2 快速重置漏洞:
这个问题目前已经被标记为安全问题,编号为 CVE-2023-44487,严格来说这并不是安全问题,而是 HTTP/2 的特性被攻击者利用,但谷歌觉得有必要引起业界关注,所以也提交了漏洞通报。
HTTP/2 还有个特点是 RST_STREAM,该协议允许客户端向服务器发送 RST_STREAM 帧来取消先前的流,而且这还不需要客户端和服务器进行任何协商,客户端可以单方面这么干。
当服务器收到 RST_STREAM 帧时,在处理来自该 TCP 链接的任何其他数据之前,取消都将立即生效。
HTTP/1.1 攻击、常规 HTTP/2 攻击和 HTTP/2 快速重置攻击的请求示意图
攻击者怎么操作的呢?攻击者利用这个特性,在发出请求帧后立即发送 RST_STREAM 帧,这样一个发起攻击的客户端开始工作后再快速重置请求,请求被取消后,HTTP/2 的连接实际还保持着打开状态。
这样就可以疯狂发起请求然后再发送 RST_STREAM 帧,攻击者不会发起超过并发流的限制,也就是 100,在 100 个并发流范围内使用大量攻击客户端在每秒内发出多个请求(注意:在 1 秒内可以发出多次请求,100 并发流是单次请求中的上限,但每秒发出多次请求就可以快速放大攻击。)。
这类攻击导致请求的数量不再取决于 RTT 即往返时间,而是取决于服务器的可用网络带宽。
在典型的 HTTP/2 服务器实现中,服务器仍然需要为取消请求执行大量工作,例如分配新的流数据结构、解析查询并进行标头压缩以及将 URL 映射到资源。
对于反向代理实现,可以在处理 RST_STREAM 帧之前将请求代理到后端服务器。
另一方面,发起攻击的一方无需支付发送请求的费用,这对网络带宽的占用也不大,还可以放大攻击规模,成本极低。
HTTPS/3 没这个问题:
由于协议的差异,谷歌认为 HTTP/2 DDoS 不会被直接转换为 HTTP/3 或 QUIC DDoS,谷歌目前并未看到有关 HTTP/3 DDoS 的大规模攻击向量,尽管如此谷歌仍然建议 HTTP/3 服务器主动实施机制来限制单个传输连接完成的工作量。操作方法类似于 HTTP/2 DDoS 的缓解方案。
版权声明:感谢您的阅读,除非文中已注明来源网站名称或链接,否则均为蓝点网原创内容。转载时请务必注明:来源于蓝点网、标注作者及本文完整链接,谢谢理解。