使用 Microsoft 登录
登录或创建帐户。
你好,
使用其他帐户。
你有多个帐户
选择要登录的帐户。

本文仅适用于技术支持代理和 IT 专业人员。 如果你正在寻找解决问题的帮助,请在 Microsoft 社区提问

简介

本篇帮助文章的目的是针对如何减小用户数据报协议 (UDP) 放大攻击面这一问题提供指导。 本文包括以下信息:

  • UDP 和 UDP 放大攻击概述。

  • 如何配置 Azure 网络安全组 (NSG) 以对端口和协议进行最小特权的 Internet 访问。

  • 在递归域名服务 (DNS) 或网络时间协议 (NTP) 服务器需要端口的情况下,如何配置服务以消除 UDP 放大攻击面。

  • 如何运行 Nmap 扫描以验证网络安全组配置。

用户应遵循本文指导,闭入站 UDP 连接以减小攻击面。

摘要

用户数据报协议 (UDP) 是一种无连接协议。 当允许 UDP 入站访问 Azure 云服务时,其将创建一个可用于针对虚拟机 (VM) 的分布式反射拒绝服务 (DRDoS) 的攻击面。 基于 UDP 的放大攻击是分布式拒绝服务 (DDoS) 攻击的一种形式,其依靠可公开访问的 UDP 服务和带宽放大因子 (BAF) 使受害系统不堪 UDP 流量重负。

注意 默认情况下,如果你创建了 NSG,配置将关闭所有端口,包括 UDP。此外,Azure 在平台级别有 DDOS 保护。 因此,用户也可以在其服务层上添加 DDOS。

若要了解有关这种攻击的更多信息,请参阅 https://www.us-cert.gov/ncas/alerts/TA14-017A

基于 UDP 的放大攻击是一种分布式拒绝服务(DDoS)攻击的形式

以下常见端口通常用作这些 UDP 反射攻击的一部分: 17 (QOTD)、19 (CharGEN)、53 (DNS)、69 (TFTP)、123(NTP)、161 (SNMP)、389 (CLDAP)、1900 (SSDP)、9987(DSM/SCM 目标接口)、11211 (Memcached)。 用户应评估是否必须将这些端口向 Internet 公开,然后关闭所有不是绝对必要的 UDP 端口。 特别是必须具有端口 53 (DNS) 或端口 123 (NTP) 的入站 UDP 的用户应删除易受攻击的配置(如本文所列)。 这是因为这两个端口已广泛用于此类型攻击。

协议

UDP 端口

易受攻击的配置

DNS

53

向公共 Internet 开放的递归 DNS

NTP

123

启用的开放查询和 monlist 命令

建议操作

以下步骤有助于减小攻击对 UDP 的影响:

  1. 评估哪些服务需要向 Internet 公开,确定哪些入站 UDP 端口对于正确的服务操作是绝对必要的,并关闭所有非必需的 UDP 端口。

  2. 必须打开 UDP 端口的用户可参考本文特定部分,以获得与 UDP 端口上的 NTPDNS 侦听有关的建议。 对于所有其他端口,请遵循要关闭的 UDP 端口部分。

NTP 中的 monlist 服务提供运行查询以获取调试信息的功能,并且仅应在调试服务问题时暂时启用。 该服务也可以用来进行 UDP 反射攻击。 在 4.2.8 之前的 NTP 守护程序 (NTPD) 程序包中,默认启用此服务。 用户应遵循以下指导:

  • 需要 monlist 的用户应配置 NSG,以仅允许访问必需的 IP 地址。

  • 不需要 monlist 且正在运行 4.2.8 之前的 Linux NTPD 程序包的用户应将程序包更新为当前版本,并确保未启用 monlist。 无法将程序包更新为较新版本的用户将必须使用以下修正步骤来配置服务:

  1. 检查 NTPD 程序包的版本:

#sudo -i ntpq -c rv

  1. 如果 NTPD 程序包的版本早于 4.7p26,请按照下列步骤操作:

#vi /etc/ntp.conf

  1. 如果尚不存在,请添加以下行:

restrict -4 default kod nomodify notrap nopeer noquery

restrict -6 default kod nomodify notrap nopeer noquery

  1. 重新启动 NTP 服务:

# service ntp restart [Debian/ Ubuntu]

# service ntpd restart [Redhat/ Centos]

注意 1: 如果已在 Windows 上安装 NTPD 程序包并具有开放端口,则必须按照以下步骤执行修正操作。

注意 2: 有关详细信息,请参阅 https://www.us-cert.gov/ncas/alerts/TA14-013A

备注 3: 用于时间同步(模式 3 和模式 4)的常规 NTP 数据包不受影响。 这意味着同步时间和服务器只服务时间是安全的。

运行向 Internet 开放的 DNS 递归解析程序可能会对用户自己的服务和其他用户的服务造成 UDP 攻击。 用户应评估他们是否确实必须运行 DNS 服务。 如果不是,则应拒绝所有对端口 53 的访问,或者按照特定于其操作系统和 DNS 实现的说明卸载 DNS 服务。

需要运行 DNS 服务以提供授权名称解析但不需要 DNS 递归的用户应按照特定于其操作系统和 DNS 实现的说明(如本文稍后所述)禁用此功能。 此外,我们强烈建议在所有情况下,都将对 NSG 中的端口 53 的访问限制为以最小特权来操作服务所需的一组特定 IP 地址。

Windows: 在 Windows Server 2012、2016 的 DNS 服务器上禁用 DNS 递归解析程序设置

  1. 打开 “DNS 管理器”(选择“开始”,指向“管理工具”,然后选择“DNS”)。

  2. 在控制台树中,右键单击适用的 DNS 服务器,然后选择“属性”。

  3. 选择“高级”选项卡。

  4. 在“服务器选项”中,确保选中“禁用递归”复选框。

  5. 重新启动 DNS 服务(从“服务”控制面板中)。

Linux: 在绑定服务器上禁用 DNS 递归

  1. 使用根凭据通过 SSH(安全外壳)连接到服务器。

  2. 连接到服务器后,检查 named.conf 文件是否存在任何 DNS 递归,然后调查设置:

    cat /etc/named.conf | grep "recursion"

  3. 使用任意文本编辑器打开 named.conf 文件,然后使用以下命令检查递归设置:

    #vi /etc/named.conf

  4. 仅更改外部 DNS 递归的设置,然后找到名为“external”的部分。如果该部分不可用,则可以将以下行添加到 named.conf 文件以禁用外部 DNS 递归。 将以下行添加到“选项”部分:

    allow-transfer {"none";};

    allow-recursion {"none";};

    recursion no;

    如果已有外部部分,则可以根据需要通过将递归值更改为“是”或“否”来更改其设置。

  5. 配置更改后,保存文件。

  6. 重新启动 DNS 服务器,以使更改生效。 运行以下命令,以重新启动 DNS 服务:

    service named restart

    注意: 如果使用任何其他专有 DNS 服务器,请参阅相应的产品文档以禁用 DNS 递归设置。

用户应按照本节中的指导关闭高风险入站 UDP 端口。 我们建议用户关闭所有 UDP 端口上来自 Internet 的入站连接。

必须打开到 Internet 的特定 UDP 端口的用户应仅打开该端口,并限制对严格必要的 IP 范围的入站访问(即不要将 UDP 端口向整个 Internet 公开)。

要关闭 UDP 端口,用户可以执行以下一项或两项操作:

  • 更新其 ARM 模板以禁用入站 UDP。 这需要重新部署 NSG 模板。 但是,这样可以确保使用此模板的将来部署将具有正确的安全设置。

  • 更新 NSG 规则,以限制网络访问。 请参阅 Azure门户Azure PowershellAzure CLI

资源: NSG 相关信息管理网络安全组 (NSG)

检查向 Internet 公开的 UDP 端口

用户应按照如何管理 NSG 中的指导,通过查看其 NSG 规则来验证是否已将服务配置为禁止 UDP 入站连接。 用户还可以运行外部 Nmapscan 来验证 UDP 端口是否正确关闭。

完成 Nmap 扫描的步骤

重要说明

用户应仅在自己的 IP 地址范围内进行扫描,以确保其他用户不会受到渗透测试参与规则的影响,并确保扫描符合 Microsoft 在线服务条款。

  1. 安装 Nmap

  2. 检查防火墙设置,确保允许出站 UDP 通信运行扫描。

  3. 请遵循本节中的 Nmap 说明以了解如何执行扫描。 用户还可以使用 Zenmap GUI(安装 Windows Nmap 时,安装在桌面上的图标)。

    1. 创建一个具有要扫描特定端口(例如,端口 69)的 IP 地址列表的 .csv 文件。

    2. 运行 Nmap 命令。 你可以包括以下选项: -sUV (UDP ports) -T4 -p {port to scan} -Pn {treat all hosts as online} -iL {input list} -oL {output list} & (optional flag to run in background):

      nmap -sUV -T4 -Pn -p 69 -iL filename.csv -oX filename.xml &

    3. 检查反射攻击中最常用的端口:

      nmap -sUV -T4 -Pn -p17,19,53,69,111,123,137,161,389,1900,5353,11211 -iL filename.csv -oX filename.xml &

    4. 查看结果以识别所有打开的端口。

  1. 通过程序包管理器或从 https://nmap.org/download.html 安装 Nmap。

Ubuntu/Debian:

sudo apt-get update
sudo apt-get install nmap

Redhat/CentOS:

yum update
yum install nmap [Redhat/ Centos]

  1. 使用以下 Nmap 命令来验证已知的 UDP 端口:

    1. 创建一个包含要扫描特定端口(例如,端口 69)的 IP 地址列表的 .csv 文件。

    2. 使用 pscp 命令将 .csv 文件上传到 Linux VM:

      pscp filename.csv admin@remotehost:filename.csv

    3. 运行包含选项 -sUV (UDP ports) -T4 -p {port to scan} -Pn {treat all hosts as online} -iL {input list} -oL {output list} & (optional flag to run in background) 的 sudo nmap 命令:

      sudo nmap -sUV -T4 -Pn -p 69 -iL filename.csv -oX filename.xml &

    4. 检查反射攻击中最常用的端口:

      sudo nmap -sUV -T4 -Pn -p17,19,53,69,111,123,137,161,389,1900,5353,11211 -iL filename.csv -oX filename.xml &

    5. 该过程完成后,使用 pscp 命令下载文件。

    6. 查看结果以识别所有打开的端口。

Nmap 扫描示例

注意

如果你打算使用这些示例中的命令来自动执行扫描过程,请注意 UDP 扫描可能需要很长时间才能运行,因为扫描程序有时必须等待检测是否返回了流量(不能保证返回)。 为了获得最佳性能,请为每个端口创建一个扫描。

通过关闭所有端口,从命令行运行 Windows 扫描。

注意 由于这是 Nmap UDP 扫描,因此“open|filtered”可以解释为“closed”。

以下命令运行 Windows 扫描:

C:\Users\user\DeskTop>nmap -sUV -T4 -Pn -p17,19,53,69,111,123,137,161,389,1900,5353,11211 23.36.53.224

Windows nmap 扫描

通过打开 DNS,运行 Linux 扫描以查找 1.1.1.1。 请注意,DNS 端口 53 不会提示“open|filtered”,因为这表示该端口已关闭。 但是,其他端口会显示为“open|filtered”。 这表明端口已关闭。

以下命令运行 Linux 扫描:

testuser@testUbuntu:~$ sudo nmap -sUV -T4 -Pn -p17,19,53,69,111,123,137,161,389,1900,5353,11211 1.1.1.1

Linux nmap 扫描

此外,请运行以下脚本以检查端口 53、123 和 389 上的服务是否配置错误。

对于 Linux 用户,每个命令必须以 sudo 开头。

扫描开启的 DNS 递归解析程序:

nmap -sUV -Pn -T4 -p 53 --script=dns-recursion -iL <input_file> -oX <output_file>

对于单个 IP 地址:

nmap –sU –p53 –script=dns-recursion <Public IP address>

早于 4.2.8 的 NTPD 程序包版本易受到通过 monlist 命令进行的 UDP 反射攻击。 如果配置了“strict noquery”,则不会发生 monlist 反射攻击。

Nmap 脚本识别漏洞:

nmap -sUV -Pn -T4 -p 123 --script= ntp-monlist -iL <input_file> -oX <output_file>

对于单个 IP 地址:

nmap -sU -pU:123 -Pn -n --script=ntp-monlist <Public IP address>

nmap -sU -p389 -v -n -Pn <Public IP address>

显示公开的 LDAP 信息:

nmap -p 389 --script ldap-rootdse <Public IP address>

常见问题

这不是推荐配置。 但是,如果用户具有依赖服务,则应按照以下指南使用签名来增加额外安全性:

用户应使用以下文档了解如何为其 Azure VM 配置时间同步。 如果用户针对 Linux 或 Windows NTPD 使用易受攻击的程序包,则应将其更新为当前版本。

了解如何使用 Azure Network Watcher 进行疑难排解:https://docs.microsoft.com/zh-cn/azure/network-watcher/network-watcher-connectivity-overview

否。这些是 UDP 服务的标准端口。 但是,服务可以正在侦听另一个端口号,或者服务器可以存在于端口从另一个源端口转发的负载均衡器之后。

需要更多帮助?

需要更多选项?

了解订阅权益、浏览培训课程、了解如何保护设备等。

社区可帮助你提出和回答问题、提供反馈,并听取经验丰富专家的意见。

此信息是否有帮助?

你对语言质量的满意程度如何?
哪些因素影响了你的体验?
按“提交”即表示你的反馈将用于改进 Microsoft 产品和服务。 你的 IT 管理员将能够收集此数据。 隐私声明。

谢谢您的反馈!

×