Home Blogs 重置,泄漏,DDoS和隐藏CVE的故事
Applications

重置,泄漏,DDoS和隐藏CVE的故事

About The Author

Outline

最初发布于2023年9月29日|更新日期:2023年10月10日

作者:Dave Andrews,Marcus Hildum,Sergio Ruiz

更新:HTTP/2快速重置攻击–CVE -44487

在下面简短的初始博客之后,Edgio与业界同行就CVE -44487–HTTP/2快速重置攻击的定义和负责任的披露进行了互动  。

基础问题影响了HTTP/2服务器的许多实施,这使得攻击的影响比Edgio以前认识到的要广泛得多。 Edgio建议所有运行面向公众的基础设施的客户在服务器的修补版本可用时立即升级到这些版本,和/或暂时禁用HTTP/2。

Edgio还可以通过执行HTTP/2终止并将HTTP/1.1代理回客户的基础设施,来帮助降低客户面临的风险。 请 联系我们 以启动此流程。

2023年8月28日下午6:43 (太平洋标准时间),Edgio工程师观察到我们的边缘服务器上的内存利用率,对多个大型Web属性的请求率以及在边缘服务器上生成的日志数量有所上升。

流量很快就被确定为攻击,这是一种新颖的做法,因为它只能在我们的第7层负载平衡器的日志中看到。 Edgio运行我们的自定义HTTP缓存和代理引擎Sailfish,它既是我们的第7层负载平衡器(我们称之为”前端”),也是我们的缓存和代理层(“后端”)。 这使得两个层都可以进行通用的检测和日志记录,从而使它们之间的比较变得微不足道。

当我们挖掘前端日志时,我们观察到一些表示攻击的有趣行为:

  1. 单个客户端的请求数远远高于通常情况:在攻击期间,我们看到单个套接字上有超过20,000个请求的实例。
  2. 未向客户机发送字节数。
  3. 从开始到结束的总请求时间介于1到2毫秒之间,所有请求都花费在启动到后端的新代理连接上。
  4. 所有表现出该行为的连接都是HTTP/2连接。

根据这些初始观察结果,我们假设攻击者使用HTTP/2的RST_STREAM帧放弃请求,并在同一套接字上快速启动新请求。

在此之后,我们将我们的工作分成三个不同的工作流程:

  1. 调查可能会影响我们使用的HTTP/2库nghttp2的任何潜在问题,这些问题可能会证明根本原因。
  2. 构建Sailfish变量以暴露此行为的基础以启用缓解。
  3. 构建新的指标,仪表板和警报以更快地识别此类攻击。

1… 但真的是nghttp2

经过小搜索,我们在 这个问题 特使,一个服务代理,埃吉奥不利用在边缘,以及 对应的CVE. 在对差异进行更深入的审查后,我们意识到这个问题不仅存在于Envoy,而且实际上存在于我们确实使用的nghttp2中。

nghttp2的拉取请求点标记释放 在披露后不久发布,解决了根本问题。 由于缺少针对nghttp2分配的特定CVE,因此我们的自动化CVE扫描系统(用于跟踪我们使用的关键软件中的漏洞)最初未能解决问题。

我们立即开始了升级和部署这种依赖关系的过程,这一过程已在几周前完成。

2请求重置百分比

与此同时,我们努力在Sailfish自身内部以编程方式识别攻击行为,以便能够立即采取措施防止出现性能或可靠性问题。 我们决定在Sailfish中实现一个配置变量 (H2 remote_reset_percent) ,它将跟踪给定连接上已被客户端重置的请求百分比。

此外,与单个连接上的请求计数的现有变量一起,允许我们制定一个规则,该规则将立即关闭与已超过请求阈值且已重置超过配置百分比的请求的客户端的连接。 我们将此配置打包在正常运行的故障安全装置中,使我们可以针对特定位置或客户禁用它。

在伪代码中,这看起来像:

				
					if request_count > 1000 and
  h2_remote_reset_percent > 99 and
  pop ~ ".*" and
  customer_id not in () then

  connection.silent_close();

fi
				
			

在仔细验证以避免对客户流量产生任何意外影响后,部署了新规则,Edgio工程师继续监视任何进一步的异常情况。

3计数和比率

为了更快速地识别此类攻击的发生时间,我们配置了一个新的仪表板,并根据从一个位置的客户端收到的HTTP/2 RST_STREAM帧的计数发出警报。 这与内存可用性和运行状况检查的独特视图相结合,为我们提供了一个明显的信号,表明由于这种特定类型的攻击,可能会导致性能下降:

但是,我们仍然担心可能仅影响前端的其他潜在攻击类型。 为了了解这一更普遍的问题,我们开始跟踪给定位置前端和后端之间的交易率比率。 这一比较的基础数据长期以来一直是我们监测的核心部分。

从正常行为来看,您可以看到围绕1 (预期比率)的强条带,因为到达前端的每个请求都转换为单个后端请求。 同样可见的是条带距离接近0.5和0.25,这种情况发生在主要处于休眠状态的测试位置,在这些位置,清除和运行状况检查等系统会导致后端处理更多的内部事务:

但是,在初始攻击期间,您可以清楚地看到对该比率的影响:

我们的当前警报配置为在比率超过某个值时触发,从而为Edgio支持工程师分拣并开始缓解步骤创建一个事件。

摘要

这是一种有趣的新攻击类型,利用了一个广泛使用的库中相对最近披露的漏洞。 幸运的是,Edgio的团队迅速提高了我们的运营意识,缓解了攻击的具体根源,并针对这类攻击实施了通用和可调整的通用缓解措施。

当然,我们一直在努力进行类似改进,例如通过指纹识别识别恶意行为者的新方法,以及将这项工作集成到我们的安全产品套件中,以实现更持久的阻止和速率限制。

在Edgio永远不会感到无聊。

要详细了解我们的全方位DDoS防护,即Edgio屡获殊荣的Web应用程序和API保护(WAAP)解决方案的一部分,请在此处联系我们的专家