跳至主要内容

使用 Amazon Route 53 Resolver DNS Firewall 检测恶意域名

概述

难度:初级

时间:20 分钟

相关产品:Amazon Route 53

上次更新时间:2025 年 3 月 24 日

本文介绍如何使用 Amazon Route 53 Resolver DNS Firewall 来检测恶意域名,并阻止访问恶意域名。我们将介绍如何使用 Amazon Web Services (AWS) 的管理域名列表来实现恶意域名检测。这些域名列表由 AWS 维护,其中包含并不断更新具有恶意行为或潜在威胁的域名。在本文中,我们还将分享将 Route 53 Resolver DNS Firewall 部署到你的环境中的最佳实践。

若不加以防护,恶意域名可能带来严重的安全威胁,导致敏感数据和系统面临重大风险。主动识别并阻止访问恶意域名至关重要,然而传统的域名拒绝列表维护方式往往耗时耗力,且难以应对不断变化的威胁。Amazon Route 53 负责维护管理域名列表,并根据不断变化的威胁情况进行列表更新。通常,AWS 能够在新漏洞和新威胁被公开披露前自动更新相关列表,使 Amazon Route 53 Resolver DNS Firewall 能够主动采取保护措施,从而为用户节省处理相关问题的时间和人力资源。Amazon Route 53 Resolver DNS Firewall 还支持用户构建自定义阻止列表,让用户能够灵活地实施特定的过滤策略和规则。

本文将介绍以下 Amazon Route 53 Resolver DNS Firewall 使用场景:

  • 安全团队可以在企业的 Amazon Virtual Private Cloud (VPC) 中实施域名访问限制,以满足安全和合规要求。

  • 通过域名停放服务 (Domain Parking),用户可以在将域名接入其平台之前,先通过 AWS 管理的域名列表和自定义阻止列表进行域名验证和筛查。

  • 基于安全或合规需求,在 VPC 中实施该解决方案,从而阻止恶意域名并保护工作站。

解决方案概述

全部打开

本解决方案介绍包含如何利用 AWS 管理的域名列表与用户的自定义列表,构建一个识别恶意域名的管道 (Pipeline)。我们将主要使用以下 AWS 服务:

  • Amazon Route 53 Resolver DNS Firewall,使用 AWS 管理的域名列表和自定义域名列表进行域名查询,并根据定制化的 DNS 查询响应策略,阻止或允许访问某个域名。
  • 使用 Amazon API Gateway 创建并发布用于 DNS Firewall 域名查询的 API。
  • 使用 Amazon S3 存储输入的 CSV 文件以及域名查询结果。
  • 在 VPC 中运行 AWS Lambda 函数。该函数调用 DNS Firewall,根据已配置的规则,执行域名解析,并获取所需的响应数据。
  • 通过 Amazon Simple Notification Service (Amazon SNS) 向管理员发送包含域名查询结果的电子邮件通知。

图 1 展示了该解决方案的架构。流程:用户触发 API Gateway,将域名列表上传到 S3 存储桶。VPC 中的 Lambda 函数调用 Amazon Route 53 Resolver DNS Firewall 执行域名查询。Amazon SNS 会立即向管理员发送通知,告知 S3 存储桶内 DNS Firewall 查询结果中标记的可疑域名。使用本解决方案,管理员能够检测并阻止可疑域名。

图1:使用 Amazon Route 53 Resolver DNS Firewall 和其他相关服务的架构流程

本解决方案旨在展示如何结合使用 AWS 管理的域名列表与自定义阻止列表,实时防范恶意域名,无需手动维护域名列表,实现持续的安全防护。通过此解决方案,可以实现自动防护,使 VPC 中的资源免受恶意域名的侵害,借助自动化的威胁检测功能减少安全团队的工作负担,同时利用 AWS 持续更新的威胁情报数据保证应用满足合规要求。

前提条件

全部打开

为成功实施该解决方案,需要先完成以下准备工作:

创建并上传 dnslib.zip 压缩文件

1. 使用 AWS 账户登录 Cloudshell 并执行以下命令:

  • mkdir python

  • pip install dnspython==2.7.0 -t python

  • zip -r dnslib.zip python

2. 通过以下方式下载已创建的 dnslib.zip 文件:

  • 点击 Cloudshell 控制台右上角的 Actions(操作)。

  • 选择 Download file(下载文件)选项。

  • 输入文件路径,例如 /home/cloudshell-user/dnslib.zip,下载文件。

3. 在想要部署解决方案的 AWS 区域 (Region) 创建一个 S3 存储桶,用于存储 dnslib.zip 文件。

4. 将 dnslib.zip 文件上传至 S3 存储桶。

启动 AWS CloudFormation 堆栈

全部打开

可以使用 AWS CloudFormation 来创建环境。可以使用 AWS CloudFormation 模板来设置 API 网关、Lambda 函数、DNS Firewall 规则组、S3 存储桶以及 Amazon SNS VPC 端点。

使用 AWS CloudFormation 模板创建堆栈的操作步骤:

  • 点击此处下载示例 AWS CloudFormation 模板。
  • 在 AWS 管理控制台上确认当前 Region 为计划部署解决方案的区域。
  • 导航至 AWS CloudFormation 控制台
  • 单击 Create stack(创建堆栈)。
  • 单击 Choose an existing template(选择现有模板)。
  • 单击 Upload a template file(上传模板文件)。
  • 单击 Choose File(选择文件),然后选择在第一步下载到本地计算机的 YAML 模板文件。
  • 单击 Next(下一步)。
  • Stack name(堆栈名称)中输入自定义堆栈名称。
  • 配置以下参数:
    • DNSFirewallManagedDomainListId:
      1. 导航至 Amazon Virtual Private Cloud (Amazon VPC)服务控制台,单击 VPC dashboard(VPC 控制面板)。
      2. 在左侧导航窗格的 DNS Firewall 下,选择 Domain lists(域名列表)。
      3. 查找名为 “AWSManagedDomainsAggregateThreatList” 的域名列表。
      4. AWSManagedDomainsAggregateThreatList 的 ID 显示在其名称旁边的 ID 列中。域名列表 ID 通常以“rslvr-fdl-”为前缀,并以该域名列表的唯一标识符作为后缀。

图 2:DNS Firewall 管理的域名列表 ID

  • SNSEmailAddress:管理员的电子邮件地址,用于接收恶意域名访问相关的电子邮件。
  • DNSLIBS3Bucket:上传 dnslib.zip 文件的 S3 存储桶。
  • 为堆栈添加自定义标签,然后点击 Next(下一步)。
  • 勾选确认复选框,然后单击 Create stack(创建堆栈)。

堆栈创建过程大约需要 10 分钟。可前往 AWS CloudFormation 控制台的 Resources(资源)选项卡,查看创建的资源状态。

使用默认的 DNS Firewall AWS 管理的域名列表

全部打开

步骤 1:将名为 domains.csv 的 CSV 文件(内含待验证是否为恶意域名的域名列表)上传至通过 AWS CloudFormation 堆栈创建的 S3 存储桶 aws-checkdomains-< AWS 账户号> 中。待验证的域名示例,如图 3 所示。

在此示例中,必须将域名列表文件命名为 domains.csv,如果使用其他文件名称,系统将无法识别域名列表。如需更改文件名称,需修改 Lambda 函数 DNSDomainResolutionLambda 的代码。

图 3:domains.csv 文件中待验证是否为恶意域名的域名列表

步骤 2:从 AWS CloudFormation 堆栈的 Outputs(输出)选项卡中,获取通过 API Gateway 发布的 DNS Lookup REST API 的 URL,如图 4 所示。触发该 API 执行 DNS 域名查询从 API Gateway 控制台获取 API Key。可以在请求标头 (Header) 中使用 x-api-key,并将其值设为从 API Gateway 控制台获取的 API Key。可以使用 postman、curl 等工具或自己编写代码来触发 API。

图 4: 在 AWS CloudFormation 输出中查看 API Gateway URL

  • API Gateway 会调用在 VPC 内运行的 Lambda 函数,对 CSV 文件中的域名列表执行 DNS 解析查询。

  • 来自 VPC 内部的 DNS 查询请求将根据默认的 DNS Firewall 原生威胁情报机制进行处理。

  • DNS Firewall 收到 DNS 查询请求时,会根据 AWS CloudFormation 堆栈预先配置的规则组、规则和其他设置过滤查询,并将结果返回 Amazon Route 53 Resolver。

  • 返回数据保存在存储 dnsanswers.csv 文件的 S3 存储桶中。对于成功解析的域名,Amazon Route 53 Resolver DNS Firewall 返回的状态代码应为 200,而对于在 DNS Firewall 管理的域名列表中标记的恶意域名的域名,返回的状态代码为 5XX(图 5 中显示的状态码 501:根据 AWS 管理的域名列表或用户自定义列表阻止的域名;502:域名不存在或其他错误)。

图 6:域名被阻止的电子邮件通知

  • 对于被 DNS Firewall 阻止的 DNS 查询,可以自定义响应内容。有关更多信息,请参阅 Route 53 开发人员指南

在 DNS Firewall 中使用自定义域名列表

全部打开

Amazon Route 53 Resolver DNS Firewall 还支持用户将自己的域名列表上传到 S3 存储桶,然后验证它们是否为恶意域名。在前述示例中,example.com 默认未被识别为恶意域名。可以添加一个自定义恶意域名列表,将其列为恶意域名。

操作步骤
将自定义恶意域名列表添加至 Route 53 DNS Firewall 的操作步骤:

步骤 1:创建一个名为 custom_domains_list.csv 的 CSV 文件,其中包含自定义恶意域名列表,如图 7 所示。

图 7:添加至 DNS Firewall 的自定义域名列表

如果使用其他文件名称,系统将无法识别域名列表。如需更改文件名称,需要修改 Lambda 函数 CustomDNSDomainListLambda 的代码。请确保 custom_domains_list.csv 文件中没有重复的域名。否则,Lambda 函数执行解析查询将失败,并报以下错误:

  •  ERROR ValidationException:An error occurred (ValidationException) when calling the UpdateFirewallDomains operation: This request contains duplicated domains.Ensure that every domain is unique.(调用 UpdateFirewallDomains 操作时发生验证错误:请求中包含重复的域名。请确保每个域名都是唯一的。)

步骤 2:将 custom_domains_list.csv 文件上传至由 AWS CloudFormation 堆栈创建的名为 aws-customdomains-<  AWS 账户号> 的 S3 存储桶。可以在 AWS CloudFormation 堆栈的 Outputs(输出)选项卡中找到此 S3 存储桶名称。

  • 文件上传后,Lambda 函数会自动调用,并根据列表中的自定义域名创建一个新的 Route 53 DNS Firewall 域名列表。此后,任何后续的上传操作均会覆盖原有的自定义列表。
  • 如图 8 所示,DNS Firewall 规则组包含了 AWS 管理的域名列表与自定义域名列表。

图 8:DNS Firewall 中的自定义域名列表

  • 若需测试自定义域名配置,请将 domains.csv 文件上传至 aws-checkdomains-<  AWS 账户号> S3 存储桶,并按照前面介绍的操作说明从 AWS CloudFormation 堆栈的 Outputs(输出)选项卡中获取 DNS Lookup REST API 的 URL (APIGatewayURL)。

  • 如图 9 所示,新增域名的查询请求均根据自定义域名列表拦截了。

清理资源

全部打开

实验完成后,为避免后续产生不必要的费用,请按照以下步骤删除 AWS CloudFormation 堆栈及其他资源:

在 AWS 管理控制台上:

  • 删除 S3 存储桶:aws-checkdomains-< AWS 账户号 > and aws-customdomains-< AWS 账户号 >
  • 导航至 AWS CloudFormation 控制台。
  • 在堆栈列表中,找到想要删除的堆栈。
  • 选择该堆栈,然后在堆栈操作菜单中选择“删除”按钮。
  • 根据提示确认删除操作。

注意事项

全部打开

以下是一些需要注意的重要事项:

  • 此解决方案支持通过 CSV 文件轻松输入域名,能够实时解析域名并对照 AWS 管理的域名列表和用户的自定义域名列表进行检查,并将查询结果存储到 S3 存储桶中和发送电子邮件通知即时反馈。通过结合使用 AWS 管理的威胁情报与自定义规则,企业能够以低维护成本、灵活的方式,极大地提升防御恶意软件、网络钓鱼和僵尸网络等网络威胁的能力。

  • 请注意,如图 8 所示,如果 DNS Firewall 规则操作设置为 BLOCK(阻止),此规则将阻止访问指定目标的请求。如需了解不同规则操作类型的更多信息,请参阅DNS Firewall 规则操作

  • 我们建议在预发布环境中测试该解决方案,并进行任何必要的更新,包括实现更强大的安全措施,然后再将其部署到生产环境中。

总结

全部打开

本文介绍了如何使用 Amazon Route 53 Resolver DNS Firewall 来检测恶意域名,并阻止任何指向恶意域名的访问。通过结合使用 AWS 管理的域名列表与自定义域名列表,企业能够加强防护措施,进一步提升其安全防护能力。

AWS 管理的域名列表包含已知的与多种安全威胁相关的域名,例如恶意软件、命令与控制服务器、网络钓鱼和僵尸网络。在 Amazon Route 53 Resolver DNS Firewall 规则中使用这些域名列表,系统可以自动阻止与已知安全威胁相关的域名查询。此外,还可以根据特定的安全需求创建自定义的域名列表,以阻止或允许访问这些域名。

如需进一步了解有关在 VPC 内实现域名 DNS 解析的信息,请参考 Amazon Route 53 开发者指南。如需了解 DNS Firewall 工作原理的更多细节,请参阅使用 DNS Firewall 保护 VPC

免费套餐

拓展海外业务或个人体验

新用户可免费获得最高 $200 美元服务抵扣金,选择免费计划,零花费安心体验云服务

发展中国业务

免费使用 40 余种核心云服务产品,长达 12 个月