TLS检测 - II

现在 TLS 检查已启用,Network Firewall 可以验证 TLS 连接的真实性并检查解密后的 HTTPS 流量。

验证 SNI 欺骗防护

TLS 检查通过验证 TLS 握手中的服务器名称指示(SNI)与服务器提供的证书是否匹配,自动阻止 SNI 欺骗攻击。

  1. 在浏览器中刷新 TLS 检查测试脚本

  2. 验证 SNI Spoofing Attack 测试现在显示为 BLOCKED

image-20260228204946369

SNI 欺骗是一种规避技术,攻击者在 TLS 握手的 SNI 字段中使用合法域名来绕过基于域名的过滤,但随后连接到恶意服务器。没有 TLS 检查时,Network Firewall 只能看到 SNI 值并允许连接。启用 TLS 检查后,Network Firewall 会解密连接并验证证书是否与 SNI 匹配。当两者不匹配时,连接会被自动阻止,从而防止这种规避技术。

允许访问特定 GitHub 仓库

现在我们将创建一条规则,使用 HTTP 主机检查来允许 HTTPS 流量访问特定的 GitHub 仓库。

  1. 导航至 VPC > Network Firewall > Stateful rule groups

  2. 点击 TLS-InspectionRuleGroup 规则组

image-20260228205046733

点击 Edit rules, 添加以下规则:

# Allow all amazonaws.com domains and subdomains - TLS handshake
pass tls $HOME_NET any -> any any (tls.sni; dotprefix; content:".amazonaws.com"; nocase; endswith; flow:to_server; sid:1000001;)

# Allow all amazonaws.com domains and subdomains - HTTP traffic
pass http $HOME_NET any -> any any (http.host; dotprefix; content:".amazonaws.com"; endswith; flow:to_server; sid:1000002;)

# Allow only specific GitHub repository - HTTP traffic with URI path
pass http $HOME_NET any -> any any (http.host; content:"github.com"; endswith; http.uri; content:"/aws-samples/aws-networkfirewall-cfn-templates"; startswith; flow:to_server; sid:1000003;)

image-20260228205206980

HTTP 主机头和 URI 路径在 HTTPS 流量中是加密的。没有 TLS 检查,我们无法基于 HTTPS 连接中的特定 URL 路径创建规则。此规则检查解密后的 HTTP 流量,仅允许访问一个特定的 GitHub 仓库,同时阻止所有其他 GitHub 仓库,从而实现对 HTTPS 流量的精细访问控制。

dotprefix 关键字与 .amazonaws.com 配合使用,允许所有子域名,如 checkip.amazonaws.coms3.amazonaws.com 等。

GitHub 规则仅允许 HTTP 流量访问特定 URI 路径 /aws-samples/aws-networkfirewall-cfn-templates,阻止对其他仓库的访问。pass 动作是终止性的,这意味着一旦流量匹配了 pass 规则,它就会被允许通过,不再评估后续规则。

更新防火墙策略默认动作

现在我们将配置防火墙策略,对不匹配任何有状态规则的流量使用应用层丢弃动作。

  1. 导航至 VPC > Network Firewall > Firewall policies

  2. 点击 TLS-Inspection-Policy防火墙策略

  3. 向下滚动至 Stateful rule evaluation order and default actions 部分

  4. 点击 Edit

image-20260228205706518

Drop action 下,选择 Application drop established, 点击 Save

image-20260228205730365

将默认动作设置为"Application drop established"会创建默认拒绝的安全态势。只有匹配显式 pass 规则的流量才会被允许通过防火墙。所有其他流量,包括对未授权 GitHub 仓库的连接,都将被丢弃。这比使用显式丢弃规则更安全,因为它确保任何未明确允许的流量都会被自动阻止,即使我们忘记添加丢弃规则也是如此。

验证

在浏览器中刷新 TLS 检查测试脚本,验证对特定 GitHub 仓库的访问是否被允许,以及对此示例恶意仓库的访问是否被阻止。

TLS 日志分析

在 CloudWatch 中分析 TLS 日志,以查看有关解密流量和规则匹配的详细信息。

  1. 在 AWS 控制台中导航到 CloudWatch > Log groups

  2. 找到并点击名为network-firewall/tls-logs 的日志组

  3. 点击 Search log group 查看最近的日志条目

TLS 检查日志捕获有关 TLS 连接的详细信息,包括证书验证结果和错误。启用 TLS 检查后,Network Firewall 会自动验证服务器名称指示(SNI)是否与服务器提供的证书匹配。

image-20260228205918991

此日志显示了一次被阻止的 SNI 欺骗尝试,其中:

  • 客户端在 SNI 字段中请求了 checkip.amazonaws.com
  • 实际服务器提供的证书不匹配
  • Network Firewall 由于证书验证失败自动阻止了该连接

这展示了 TLS 检查如何防御规避技术——攻击者在 SNI 中使用合法域名绕过过滤,同时连接到恶意服务器。

总结

我们已成功配置 TLS 检查,并了解了它如何自动验证 TLS 证书以防止 SNI 欺骗攻击。TLS 检查使 Network Firewall 能够:

  • 验证 SNI 是否与服务器证书匹配
  • 检查解密的 HTTPS 流量中的 URI 路径和 HTTP 标头
  • 检测隐藏在加密流量中的威胁

这些功能与之前实验中的域过滤、地理限制和威胁情报规则相辅相成。