利用SNI会话保持增强AWS网络防火墙的TLS检测能力

本文详细介绍了AWS网络防火墙中新增的SNI会话保持功能,该功能通过延迟建立与目标服务器的TCP连接,直到TLS SNI字段通过防火墙规则验证,从而增强TLS检测的安全性。文章包含技术实现架构、启用步骤和性能考量,适用于需要强化出站流量安全控制的云架构师。

利用SNI会话保持增强AWS网络防火墙的TLS检测能力

AWS网络防火墙是一项托管防火墙服务,用于在Amazon虚拟私有云(VPC)中过滤和控制网络流量。与安全组或网络访问控制列表(NACL)等传统网络控制不同,网络防火墙可以基于OSI模型更高层(包括传输层到应用层)的信息进行检查和决策。此外,您可以使用网络防火墙的TLS检测功能创建匹配加密TLS流量内容的防火墙规则。网络防火墙使用您配置的证书解密流量,并将解密后的有效负载与防火墙策略中的规则进行匹配。

本文介绍服务器名称指示(SNI)会话保持功能,它通过阻止TCP或TLS建立数据包在应用SNI的TLS检测规则之前到达目标服务器来增强TLS检测。启用SNI后,网络防火墙在收到客户端Hello消息并将其通过SNI发送的域名信息与防火墙规则匹配之前,不会启动到目标的出站TCP连接。防火墙验证到该域的流量后,才会启动防火墙与上游服务器之间的TCP会话。这为您提供了对出站流量的额外安全控制,且延迟和性能开销最小,有助于防范恶意目标。

SNI会话保持之前的网络防火墙TLS检测

启用TLS检测时,网络防火墙充当客户端和服务器之间的中介,与每个端点保持单独连接。在此过程中,网络防火墙根据配置的规则评估出站流量,以确定是否应允许流量退出防火墙。

如图1所示,在SNI会话保持可用之前的步骤为:

  1. 客户端创建TCP连接,网络防火墙评估无状态规则以确定是否允许流量。如果不允许,则终止连接。
  2. 网络防火墙创建到目标服务器的TCP连接。
  3. 客户端向网络防火墙发送包含SNI信息的ClientHello消息。防火墙验证SNI是否有效,否则终止连接。
  4. 网络防火墙将ClientHello消息转发到目标服务器。
  5. 目标服务器响应ServerHello消息及其证书。
  6. 网络防火墙验证从目标服务器下载的证书。
  7. 此时,根据证书主题名称验证服务器名称指示。
  8. 网络防火墙将服务器的证书转发给客户端,并与客户端完成TLS连接。
  9. 客户端使用在TLS握手中协商的会话密钥加密应用负载,并将其发送到网络防火墙。
  10. 网络防火墙解密流量,使用其状态引擎根据规则评估流量,并确定是否允许。
  11. 如果允许流量,网络防火墙使用目标服务器的会话密钥重新加密应用层负载,并将其转发到目标服务器。
  12. 目标服务器向网络防火墙发回响应数据。
  13. 网络防火墙状态引擎分析目标服务器的响应。
  14. 网络防火墙将服务器响应转发给客户端。通信持续进行,直到客户端或目标服务器终止连接。

图1:SNI会话保持可用之前的步骤

由于当前的流量检测顺序,TCP连接在评估TLS SNI字段之前就已建立,这可能导致服务器在防火墙检查SNI之前就了解到连接。

例如,当客户配置基于TLS SNI字段(例如example.com)拒绝流量的规则时,他们期望这些连接在打开与目标服务器的连接和发生数据传输之前就被阻止。然而,由于固有的协议顺序,TCP连接在SNI规则验证发生之前会短暂建立。这种处理顺序造成了一个狭窄的时间窗口,即使配置了正确的基于SNI的阻止规则,复杂的威胁行为者也可能潜在地尝试规避数据外泄预防控制。

会话保持解决了这个问题,使得源自VPC内的流量在网络防火墙验证TLS SNI之前无法连接到目标服务器。

带有会话保持的TLS检测工作原理

SNI会话保持实施两步验证过程。首先,当客户端发送TLS客户端Hello消息时,防火墙检查TLS层并验证SNI。消息获得批准后,网络防火墙允许连接到目标服务器,允许加密的上层协议(如HTTP或SMTP)启动其协商。这种方法在TLS验证和协议检查之间创造了明显的分离,协议检查仅在TLS握手授权成功后进行。

如图2所示,带有SNI会话保持的场景中的步骤是: 注意:步骤2–5是SNI会话保持的一部分。

  1. 客户端创建TCP连接,网络防火墙评估无状态规则以确定是否允许流量。如果不允许,则终止连接。
  2. 客户端向网络防火墙发送包含SNI信息的ClientHello消息。网络防火墙执行SNI验证。
  3. 防火墙评估TLS检测规则(包括SNI规则)以确定是否允许流量。如果不允许,则终止连接。
  4. 网络防火墙创建到目标服务器的TCP连接。
  5. 网络防火墙将ClientHello消息转发到目标服务器。
  6. 目标服务器响应ServerHello消息及其证书。
  7. 网络防火墙验证从目标服务器下载的证书。
  8. 网络防火墙将服务器的证书转发给客户端,并与客户端完成TLS连接。
  9. 客户端使用在TLS握手中协商的会话密钥加密应用负载,并将其发送到网络防火墙。
  10. 网络防火墙解密流量,使用其状态引擎根据规则评估流量,并确定是否允许。
  11. 如果允许流量,网络防火墙使用目标服务器的会话密钥重新加密应用层负载,并将其转发到目标服务器。
  12. 目标服务器向网络防火墙发回响应数据。
  13. 网络防火墙状态引擎分析目标服务器响应。
  14. 网络防火墙将服务器响应转发给客户端。通信持续进行,直到客户端或目标服务器终止连接。

图2:会话保持之后的步骤

入门指南

可以使用AWS管理控制台、AWS命令行界面(AWS CLI)或AWS SDK直接在网络防火墙策略中创建TLS检测配置时启用会话保持。

先决条件

要开始设置带有会话保持的网络防火墙策略,请访问网络防火墙控制台或参阅AWS网络防火墙开发人员指南。会话保持在当前提供网络防火墙的AWS区域(包括AWS GovCloud(美国)区域和中国区域)中得到支持。

如果您是首次使用网络防火墙,请确保完成以下先决条件。如果您已有防火墙和TLS检测配置,可以跳过此部分。

  • 创建防火墙
  • 创建TLS检测配置

启用会话保持

要启用会话保持,请按照创建防火墙策略的步骤操作。在添加TLS检测配置的步骤中,您将有一个选项,通过选中如图3所示的框来启用会话保持。

图3:启用会话保持

添加TLS检测配置并选中启用会话保持的框后,继续创建新的防火墙策略,然后将此策略关联到您的防火墙。

如果您有一个附加了TLS检测配置的现有策略,请在您的防火墙策略上选择“管理TLS检测配置”。

图4:TLS检测配置

这将提供启用会话保持的选项,如图3所示。

定价

SNI会话保持包含在TLS高级检测的成本中。有关TLS高级检测定价,请参阅AWS网络防火墙定价。

注意事项

启用会话保持时,请注意以下注意事项:

  • 关键词: 会话保持仅适用于使用TLS.SNI关键词的Suricata规则。它不适用于使用其他TLS应用关键词的规则,例如TLS.CERT或TLS.VERSION。
  • 性能: 由于TCP连接建立数据包在SNI验证完成之前被保持,会话保持可能会在TCP连接建立中引入延迟。只有当启用TLS检测的网络防火墙检查的新TCP连接激增时,您才会注意到影响。
  • 兼容性: 启用会话保持时,TLS.SNI优先于http.host规则。禁用时,流量可以同时匹配基于http.host关键词和tls.sni关键词的规则,导致由这两类规则中操作组合定义的结果。然而,当启用此会话保持时,此流量只能匹配带有TLS.SNI关键词的规则,并且只有当解密流量未匹配其他基于TLS.SNI的通过规则时,才应用带有http.host关键词的规则。

结论

作为一项预防措施,此会话保持有助于确保SNI验证在与目标服务器建立连接之前发生,避免甚至与潜在恶意端点的初始接触。有关更多信息,请参阅什么是AWS网络防火墙?

如果您对本文有反馈,请在下面的评论部分提交评论。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计