再帰的な問い合わせを用いた攻撃対策について
概要
DNSサーバーにはリゾルバ(クライアント)からの名前解決要求に応答するキャッシュサーバーと、ゾーン情報を公開するコンテンツサーバーの2種類があります。
本手順は、SuitePRO V3ご契約のサーバーをDNSキャッシュサーバーとして運用されているお客さまへの案内となります。
外部やどこのDNSからの問い合わせに対しても応答できてしまうDNSキャッシュサーバーのことを、オープンリゾルバ(有害リゾルバ)と言い表します。このオープンリゾルバは、DNSサーバーのアクセス制限が適切に行われていない場合、どの管理者でもなり得ます。オープンリゾルバは、不特定からの問い合わせを受け付けることが可能であるため、場合によってはDDoS攻撃の踏み台として悪用されてしまう可能性があります。
お客さまの仮想専用サーバーが対象になっているかを確認する方法については、次項の「対象確認」をご参照ください。対象であった場合には、お客さまサーバーの安全のため、「対策の手順」へお進みの上、適切な設定をご実施ください。
確認・設定手順でご不明な点がございましたら、テクニカルサポートセンターまでお問い合わせください。
[参考資料]DNS の再帰的な問合せを使った DDoS 攻撃に関する注意喚起
対象確認
お客さまの仮想専用サーバーがオープンリゾルバとなっていないか確認します。
- お客さまの仮想専用サーバーへSSHで接続し、rootアカウントを使用してログインします。
- 以下のコマンドをそのまま実行してください。
wget -qO - http://www.openresolver.jp/cli/check.html
コマンド結果
Configured DNS server: ご契約サーバーの /etc/resolv.conf に記載されているDNSサーバーのIPアドレスが表示されます。
Source IP address: ご契約サーバーのIPアドレスが表示されます。コマンド結果例
Configured DNS server: [OPEN] 192.0.2.2(ns.example.com) Source IP address: [NOT open] 192.0.2.1(gw.example.com)
情報元:JPCERTCC オープンリゾルバ確認サイト
コマンド結果にて[OPEN] となっているIPアドレスのホストがあれば、再帰的問い合わせ(※1)が行われている状況となります。
- 適切なアクセス制限がされているかを確認します。
/etc/named.conf 内の options セクション内の以下のパラメータ設定の有無を確認します。[root@localhost ~]# cat /etc/named.conf ※抜粋 options { directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; /* * If there is a firewall between you and nameservers you want * to talk to, you might need to uncomment the query-source * directive below. Previous versions of BIND always asked * questions using port 53, but BIND 8.1 uses an unprivileged * port by default. */ // query-source address * port 53; };
上記のように、options セクション内の allow-recursion(※2) にて、特定の接続元に対し制限がされていない場合は、お客さまのDNSサーバーに対してアクセス制限が行われておらず、不特定多数のホストからの再帰的問い合わせに対し応答する設定になっています。
よって、お客さまの仮想専用サーバーがオープンリゾルバとなっており、DDoS攻撃の踏み台にされてしまう可能性があります。適切なアクセス制限をご実施ください。
問い合わせを受けたDNSサーバーが、その回答をローカルデータとして持っていない場合、自身で他のDNSサーバーに問い合わせをし、最終的な回答を取得して要求元に返すことをいいます。
※2 allow-recursion
再帰的な問い合わせを許可する設定
対策の手順
お客さまのDNSサーバーにてオープンリゾルバの状態が確認された場合、以下のパターン別に設定を行ってください。
■パターン1
お客さまの仮想専用サーバーにて運用しているDNSサーバーで、ドメインのゾーン情報を管理(※)し、コンテンツサーバーとしてご利用のお客さま
→手順Aへ
■パターン2
お客さまの仮想専用サーバーにて運用しているDNSサーバーで、ドメインのゾーン情報を管理せず、キャッシュサーバーとしてご利用のお客さま
→手順Bへ
■パターン3
ドメインは保持しているが、お客さまの仮想専用サーバーにてDNSサーバーの運用を行っていないお客さま
→手順Cへ
以下のように Whois情報で表示されるネームサーバーに、お客さまの仮想専用サーバーで運用しているDNSサーバー名(ホスト名)が記載されている場合が該当します。
Whoisj情報につきましては、http://whois.jprs.jp などで 検索可能です。
Domain Information: [ドメイン情報]
a. [ドメイン名] NTTPC.CO.JP
e. [そしきめい] かぶしきがいしゃえぬ・てぃ・てぃ ぴー・しーこ みゅにけーしょんず
f. [組織名] 株式会社エヌ・ティ・ティ ピー・シーコミュニ ケーションズ
g. [Organization] NTT PC Communications Incorporated
k. [組織種別] 株式会社
l. [Organization Type] Corporation
m. [登録担当者] TY4708JP
n. [技術連絡担当者] YA6489JP
p. [ネームサーバー] ns1.sphere.ad.jp ★
p. [ネームサーバー] ns2.sphere.ad.jp ★
s. [署名鍵]
[状態] Connected (2014/03/31)
[登録年月日]
[接続年月日]
[最終更新] 2013/04/01 01:11:42 (JST)
パターンの判別が難しいお客さまにつきましては、テクニカルサポートセンターまでお問い合わせください。
手順A
対処方法:お客さまの仮想専用サーバーで運用しているDNSサーバーで管理するゾーン情報のみ回答し、キャッシュサーバーとして動作させず、いかなるホストにも再帰的な問い合わせに対する応答はしない設定を行います。
設定内容:ゾーン情報の問い合わせについて、すべてのホストからの再帰的問い合わせに対する応答を不可にします。
A-1. /etc/resolv.confの設定を確認します。
以下のように、お客さまご契約のサーバーがDNSサーバーに指定されている場合は設定変更が必要です。
[root@localhost ~]# cat /etc/resolv.conf nameserver 127.0.0.1 または ご契約サーバー IP アドレス search localdomain
WebARENA提供の参照用DNSサーバーをご利用になる場合の設定例です。
[root@localhost ~]# vi /etc/resolv.conf nameserver 202.229.78.42 nameserver 202.229.78.34 search localdomain
お客さまにて用意されたDNSをご利用になる場合は、IPアドレスの部分を適宜置き換えてください。
※apacheのモジュールとして動作するプログラム(mod_phpなど)を使用されているお客さまにおかれましては、この設定を変更した後、apacheの再起動が必要となります。
A-2. /etc/named.confの設定を変更してください。
[root@localhost ~]# vi /etc/named.conf options { directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; /* * If there is a firewall between you and nameservers you want * to talk to, you might need to uncomment the query-source * directive below. Previous versions of BIND always asked * questions using port 53, but BIND 8.1 uses an unprivileged * port by default. */ // query-source address * port 53; };
↓↓↓以下のように設定変更します。
options { directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; /* * If there is a firewall between you and nameservers you want * to talk to, you might need to uncomment the query-source * directive below. Previous versions of BIND always asked * questions using port 53, but BIND 8.1 uses an unprivileged * port by default. */ // query-source address * port 53; allow-query { any; }; allow-recursion { none; }; };
A-3. 以下のコマンドを実行し、変更した設定内容を有効にしてください。
[root@localhost ~]# service named reload
※apacheのモジュールとして動作するプログラム(mod_phpなど)を使用されているお客さまにおかれましては、この設定を変更した後、apacheの再起動が必要となります。
手順B
対処方法:キャッシュサーバーとして動作させますが、不特定多数のホストからの再帰的問い合わせに対し応答を行わないよう、応答する範囲を限定します。
設定例:ドメイン情報を保持していない(コンテンツサーバーではない)ため、許可したアドレス帯からの再帰的問い合わせにのみ応答します。
B-1. /etc/named.confの設定を変更してください。
[root@localhost ~]# vi /etc/named.conf options { directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; /* * If there is a firewall between you and nameservers you want * to talk to, you might need to uncomment the query-source * directive below. Previous versions of BIND always asked * questions using port 53, but BIND 8.1 uses an unprivileged * port by default. */ // query-source address * port 53; };
↓↓↓以下のように設定変更します。
options { directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; /* * If there is a firewall between you and nameservers you want * to talk to, you might need to uncomment the query-source * directive below. Previous versions of BIND always asked * questions using port 53, but BIND 8.1 uses an unprivileged * port by default. */ // query-source address * port 53; allow-query {指定 IP アドレス or アドレス帯; }; //追記 }; 例: 指定 IP アドレス帯:192.0.2.5/255.255.255.0 allow-recursion { 192.0.2.0/24; };
B-2. 以下のコマンドを実行し、変更した設定内容を有効にしてください。
[root@localhost ~]# service named reload
手順C
対処方法:お客さまの仮想専用サーバーにてDNSサーバーを運用していないのにも関わらず、DNSサーバーの機能を果たすnamedサービスが起動している状態となります。不要なnamedサービスを停止させることで再帰的な問い合わせも防止させます。
設定内容:namedサービスを停止します。
C-1. namedサービスが起動されていることを確認し、自動起動機能を停止します。
[root@localhost ~]# ps -ef | grep [n]amed named 3286 1 0 14:36 ? 00:00:00 /usr/sbin/named -u named [root@localhost ~]# chkconfig named off
C-2. namedサービスを停止します。
[root@localhost ~]# service named stop
※namedを停止した後、名前解決がうまく行われない場合は、/etc/resolve.confの設定をご確認ください。
以下は、弊社提供の参照先DNSキャッシュサーバー(202.229.78.42 および 202.229.78.34)を指定した設定例となります。
[root@localhost ~]# vi /etc/resolv.conf nameserver 202.229.78.42 nameserver 202.229.78.34 search localdomain
※apacheのモジュールとして動作するプログラム(mod_phpなど)を使用されているお客さまにおかれましては、この設定を変更した後、apacheの再起動が必要となります。