最初发布于2023年9月29日| Updated 2023年10月10日上
作者:Dave Andrews,Marcus Hildum,Sergio Ruiz
更新:HTTP/2快速重置攻击–CVE-2023-44487
在下面简短的初始博客之后,Edgio与业界的同行就 CVE-2023-44487 –HTTP/2快速重置攻击的定义和负责任的披露进行了交流。
该问题影响到HTTP/2服务器的许多实现,这使得攻击的影响比Edgio之前意识到的要广泛得多。 Edgio建议所有运行面向公众的基础结构的客户在服务器可用时尽快升级到已修补的版本,和/或暂时禁用HTTP/2。
Edgio还可以通过执行HTTP/2终止并将HTTP/1.1代理回客户的基础设施来帮助降低客户的风险。 请联系我们以启动此流程。
在太平洋标准时间下午6:43的2023年8月28日上,Edgio工程师观察到边缘服务器上的内存利用率,对多个大型Web属性的请求率以及边缘生成的日志数量都有所上升。
该流量很快就被确定为攻击,这是新颖的,因为它只能在我们的第7层负载平衡器的日志中观察到。 Edgio将我们的自定义HTTP缓存和代理引擎Sailfish作为我们的第7层负载平衡器(我们称之为”前端”)以及我们的缓存和代理层(“后端”)运行。 这使两个层都可以使用通用的仪器仪表和日志记录,从而使两者之间的比较变得平凡。
当我们挖掘前端日志时,我们观察到一些表示攻击的有趣行为:
- 单个客户端的请求计数远远高于平常:在攻击期间,我们看到单个套接字上有超过20,000个请求。
- 没有向客户机发送字节。
- 从开始到结束的总请求时间介于1到2毫秒之间,所有这些时间都花费在启动到后端的新代理连接上。
- 表现出这种行为的所有连接都是HTTP/2连接。
基于这些初步观察,我们推测攻击者放弃了使用HTTP/2的RST_STREAM帧的请求,并在同一个套接字上非常迅速地开始新的请求。
之后,我们将工作分为三个不同的工作流:
- 调查影响我们使用的HTTP/2库nghttp2的任何潜在问题,这些问题可能证明根本原因。
- 构建Sailfish变量以暴露此行为的基本原理,从而实现缓解。
- 构建新的指标,仪表板和警报,以更快地识别此类攻击。
1.特使…但真的nghttp2
经过一个小搜索,我们在这个问题Envoy中找到了Edgio在边缘上不使用的服务代理,以及相应的CVE。 在对差异进行深入审查后,我们意识到这个问题不仅存在于特使身上,实际上存在于nghttp2中,我们确实使用了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从来没有沉闷的时刻。
如需了解更多关于Edgio屡获殊荣的Web应用程序和API保护(WAAP)解决方案的全方位DDoS防护的信息,请在此处联系我们的专家。