注
この記事は、テクニカル サポート担当者および IT プロフェッショナルを対象としています。 問題の解決方法を探している場合は、 Microsoft コミュニティにお問い合わせください。
概要
この記事の目的は、ユーザー データグラム プロトコル (UDP) 増幅の攻撃対象領域を減らす方法に関するガイダンスを提供することです。 この記事には、次の情報が含まれています。
- UDP および UDP 増幅攻撃の概要。
- ポートおよびプロトコルに対する最小特権のインターネット アクセス用に Azure ネットワーク セキュリティ グループ (NSG) を構成する方法。
- 再帰的ドメイン ネーム サービス (DNS) サーバーまたはネットワーク タイム プロトコル (NTP) サーバーにポートが必要な場合に、UDP 増幅の攻撃対象領域を除去するようにサービスを構成する方法。
- NSG 構成を確認するために 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 リフレクション攻撃の一部としてよく使用されるのは、17 (QOTD)、19 (CharGEN)、53 (DNS)、69 (TFTP)、123 (NTP)、161 (SNMP)、389 (CLDAP)、1900 (SSDP)、9987 (DSM/SCM ターゲット インターフェイス)、11211 (Memcached) です。 ユーザーは、これらのポートをインターネットに公開する必要があるかどうかを評価してから、絶対に必要でないすべての UDP ポートを閉じる必要があります。 特に、ポート 53 (DNS) またはポート 123 (NTP) の受信 UDP を使用する必要があるユーザーは、(この記事に記載されているように) 脆弱な構成を削除する必要があります。 これは、これら 2 つのポートがこの種の攻撃に広範に使用されるためです。
| プロトコル | UDP ポート | 脆弱な構成 |
|---|---|---|
| DNS | 53 | パブリック インターネットに開放されている再帰 DNS |
| NTP | 123 | Open query コマンドと monlist コマンドの有効化 |
推奨される操作
次の手順は、UDP に対する攻撃の影響を軽減するのに役立ちます。
- どのサービスをインターネットに公開する必要があるかを評価し、正しいサービス操作に絶対に必要な受信 UDP ポートを決定し、重要でないすべての UDP ポートを閉じます。
- UDP ポートを開く必要があるユーザーは、この記事の特定のセクションで、UDP ポートでの NTP および DNS リッスンに関連する推奨事項を参照できます。 その他のすべてのポートについては、「 閉じる UDP ポート」 セクションに従います。
NTP の脆弱な構成を確認して修正する
NTP の monlist サービスは、デバッグ情報のクエリを実行する機能を提供します。サービスの問題をデバッグするために一時的に有効にする必要があります。 また、UDP リフレクション攻撃を実行するためにも使用できます。 4.2.8 より古い NTP デーモン (NTPD) パッケージでは、このサービスは既定で有効になっています。 ユーザーは次のガイダンスに従う必要があります。
- monlist が必要なユーザーは、必要な IP アドレスのみにアクセスを許可するように NSG を構成する必要があります。
- monlist を必要とせず、バージョン 4.2.8 より前の Linux NTPD パッケージを実行しているユーザーは、パッケージを最新バージョンに更新し、monlist が有効になっていないことを確認する必要があります。 パッケージを新しいバージョンに更新できないユーザーは、次の修復手順に従ってサービスを構成する必要があります。
- NTPD パッケージのバージョンを確認します。
#sudo -i ntpq -c rv
- NTPD パッケージのバージョンが 4.7p26 より前の場合は、次の手順を実行します。
#vi /etc/ntp.conf
- まだ存在しない場合は、次の行を追加します。
restrict -4 default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
- 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パケットは影響を受けません。 つまり、時刻を同期し、サーバーが時間のみを提供するのが安全です。
DNS の脆弱な構成を確認して修正する
インターネットに公開されている DNS 再帰リゾルバーを実行すると、ユーザー自身のサービスおよび他のユーザーのサービスに対する UDP 攻撃を引き起こす可能性があります。 ユーザーは、実際に DNS サービスを実行する必要があるかどうかを評価する必要があります。 そうしない場合は、ポート 53 へのアクセスをすべて拒否するか、オペレーティング システムと DNS 実装に固有の指示に従って DNS サービスをアンインストールする必要があります。
権限のある名前解決を提供するために DNS サービスを実行する必要があるが、DNS の再帰を必要としないユーザーは、オペレーティング システムと DNS 実装に固有の手順 (この記事で後述します) に従って、この機能を無効にする必要があります。 さらに、すべての場合において、NSG のポート 53 へのアクセスは、最小限の特権でサービスを実行するために必要な特定の IP アドレスのセットに制限することを強くお勧めします。
Windows: Windows Server 2012、2016 の DNS サーバーで DNS 再帰リゾルバーの設定を無効にする
- DNS マネージャーを開きます ([スタート] を選択し、[管理ツール] をポイントして、[DNS] を選択します)。
- コンソール ツリーで、該当する DNS サーバーを右クリックし、[ プロパティ] を選択します。
- [詳細設定] タブを選択します。
- [サーバー オプション] で、[再帰を無効にする] チェック ボックスがオンになっていることを確認します。
- ( [サービス] コントロール パネルから) DNS サービスを再起動します。
Linux: バインド サーバーで DNS 再帰を無効にする
root 資格情報を使用して、SSH (Secure Shell) を介してサーバーに接続します。
サーバーに接続したら、named.conf ファイルで DNS の再帰をチェックし、設定を調査します。
cat /etc/named.conf | grep "recursion"任意のテキストエディタを使用して named.conf ファイルを開き、次のコマンドを使用して再帰の設定をチェックします。
#vi /etc/named.conf外部 DNS 再帰の設定のみを変更し、「外部」という名前のセクションを見つけます。 このセクションが利用できない場合は、named.conf ファイルに次の行を追加して、外部 DNS の再帰を無効にすることができます。 "オプション" セクションに次の行を入力します。
転送許可 {"none";};
allow-recursion {"none";};
再帰 no;
外部セクションが既にある場合は、必要に応じて 再帰 値を yes または no に変更することで、その設定を変更できます。変更を構成したら、ファイルを保存します。
変更を有効にするには、DNS サーバーを再起動します。 次のコマンドを実行して、DNS サービスを再起動します。
service named restart注
注: 他の独自の DNS サーバーを使用している場合は、それぞれの製品ドキュメントを参照して、DNS 再帰設定を無効にしてください。
リスクのある UDP ポートを閉じる
ユーザーは、このセクションのガイダンスに従って、リスクの高い受信 UDP ポートを閉じる必要があります。 すべての UDP ポートでインターネット からの受信接続を閉じることをお勧めします。
特定の UDP ポートをインターネットに開放する必要があるユーザーは、そのポートのみを開き、厳密に必要な IP 範囲に受信アクセスを再制限する必要があります (つまり、UDP ポートをインターネット全体に公開しないでください)。
UDP ポートを閉じるには、ユーザーは次のいずれかまたは両方の操作を実行します。
- ARM テンプレートを更新して受信 UDP を無効にします。 これには、NSG テンプレートの再デプロイが必要です。 ただし、このテンプレートを使用する将来の展開で、正しいセキュリティ設定が適用されるようにします。
- ネットワーク アクセスを制限するように NSG 規則を更新します。 「Azure portal、Azure Powershell、Azure CLI」を参照してください。
リソース: NSG に関する情報 、 ネットワーク セキュリティ グループ (NSG) の管理
インターネットへの開いている UDP ポートを確認する
ユーザーは、「 NSG の管理方法」に記載されているガイダンスに従って、NSG 規則を確認して、サービスが UDP 受信接続を禁止するように構成されていることを確認する必要があります。 ユーザーは、外部 Nmap スキャンを実行して、UDP ポートが正しく閉じられていることを確認することもできます。
Nmap スキャンを完了する手順
重要
ユーザーは自分の IP アドレス範囲内のみをスキャンして、侵入 テストのエンゲージメント規則 に従って他のユーザーが影響を受けないようにし、スキャンが Microsoft オンライン サービス条件に準拠していることを確認する必要があります。
Windows
ファイアウォールの設定を確認して、送信 UDP トラフィックによるスキャンの実行を許可していることを確認します。
スキャンの実行方法については、このセクションの Nmap の指示に従ってください。 ユーザーは、Zenmap GUI を使用することもできます (このアイコンは、Windows Nmap のインストール時にデスクトップにインストールされます)。
特定のポート (ポート 69 など) をスキャンする IP アドレスの一覧を含む .csv ファイルを作成します。
Nmap コマンドを実行します。 次のオプションを含めることができます: -sUV (UDP ポート) -T4 -p {スキャンするポート} -Pn {すべてのホストをオンラインとして扱う} -iL {入力リスト} -oL {出力リスト} & (バックグラウンドで実行するためのオプションのフラグ):
nmap -sUV -T4 -Pn -p 69 -iL filename.csv -oX filename.xml &リフレクション攻撃で最もよく使用されているポートを確認します。
nmap -sUV -T4 -Pn -p17,19,53,69,111,123,137,161,389,1900,5353,11211 -iL filename.csv -oX filename.xml &結果を確認して、開いているポートを特定します。
Linux
- パッケージ マネージャーまたは https://nmap.org/download.htmlから Nmap をインストールします。
Ubuntu / Debian :
sudo apt-get update
sudo apt-get nmap のインストール
Redhat / CentOS:
yum update
yum install nmap [Redhat/ Centos]
次の Nmap コマンドを使用して、既知の UDP ポートを確認します。
特定のポート (ポート 69 など) をスキャンする IP アドレスの一覧を含む .csv ファイルを作成します。
pscp コマンドを使用して、.csv ファイルを Linux VM にアップロードします。
pscp filename.csv admin@remotehost:filename.csvオプションを含む sudo nmap コマンドを実行します -sUV (UDP ポート) -T4 -p {スキャンするポート} -Pn {すべてのホストをオンラインとして扱う} -iL {入力リスト} -oL {出力リスト} & (バックグラウンドで実行するためのオプションのフラグ):
sudo nmap -sUV -T4 -Pn -p 69 -iL filename.csv -oX filename.xml &リフレクション攻撃で最もよく使用されているポートを確認します。
sudo nmap -sUV -T4 -Pn -p17,19,53,69,111,123,137,161,389,1900,5353,11211 -iL filename.csv -oX filename.xml &処理が完了したら、 pscp コマンドを使用してファイルをダウンロードします。
結果を確認して、開いているポートを特定します。
Nmap スキャンの例
注
これらの例のコマンドを使用してスキャン プロセスを自動化する場合は、トラフィックが返されるかどうかの検出をスキャナーが待機する必要がある場合があるため、UDP スキャンの実行に時間がかかる可能性があることに注意してください (これは保証されません)。 最適なパフォーマンスを得るには、ポートごとにスキャンを作成します。
例 1 - Windows
すべてのポートを閉じて、コマンド ラインから 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
例 2 - Linux
DNS を開いて、1.1.1.1 の Linux スキャンを実行します。 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
さらに、次のスクリプトを実行して、ポート 53、123、および 389 のサービスが正しく構成されていないかどうかチェックします。
Linux ユーザーの場合、各コマンドは sudo で進める必要があります。
DNS 再帰リゾルバー nmap スキャン
開いている 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>
Linux NTP サーバーの nmap スキャン
4.2.8 より前のバージョンの NTPD パッケージは、monlist コマンドによる UDP リフレクション攻撃に対して脆弱です。 "restrict 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>
コネクションレス LDAP サーバー nmap スキャン
nmap -sU -p389 -v -n -Pn <Public IP address>
公開されている LDAP 情報を表示する:
nmap -p 389 --script ldap-rootdse <Public IP address>
よく寄せられる質問
UDP 経由で CLDAP(389) が必要な場合はどうすればよいですか?
これは推奨される構成ではありません。 ただし、ユーザーに依存サービスがある場合は、次のガイダンスに従って署名を使用してセキュリティを追加する必要があります。
- https://support.microsoft.com/en-us/help/935834/how-to-enable-ldap-signing-in-windows-server
- https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/ADV190023
Azure コンピューティング リソースに推奨される時刻同期構成は何ですか?
Azure VM の時刻同期を構成する方法については、次のドキュメントを参照してください。 ユーザーが Linux または Windows NTPD の脆弱なパッケージを使用している場合は、最新バージョンに更新する必要があります。
- https://docs.microsoft.com/en-us/azure/virtual-machines/windows/time-sync#opt-in-for-host-only-time-sync
- https://docs.microsoft.com/en-us/azure/virtual-machines/linux/time-sync
ネットワークに問題が発生した場合の対処
Azure Network Watcher を使用してトラブルシューティングを行う方法について説明します: https://docs.microsoft.com/en-us/azure/network-watcher/network-watcher-connectivity-overview
これらのポートとサービスでは常に標準の UDP ポート番号が使用されますか。
いいえ。 これらは UDP サービスの標準ポートです。 ただし、サービスが別のポート番号でリッスンするか、サーバーがロード バランサーの背後に存在し、そのポートが別の送信元ポートから転送する場合があります。
UDP 増幅攻撃の仕組み
「UDP 増幅: https://www.us-cert.gov/ncas/alerts/TA14-017A」を参照してください