BIND〜DNSサーバの特徴と弱点〜
BINDとは、DNSサーバのデファクトスタンダードとして古くから利用されているオープンソースソフトウェアです。BINDは権威DNSサーバとキャッシュDNSサーバの両方の機能を持ち、DNSサーバとして非常に汎用的に利用できる一方で、コードが複雑で脆弱性が潜みやすく、セキュリティ上の問題があるとされています。DNSの機能は、インターネットの基本的なサービスを提供する意味で重要なサービスであるため、攻撃を受けた場合極めて深刻な影響を及ぼす可能性があります。この記事では、BINDの問題点を解説しつつ、BINDに代わるDNSサーバのソフトウェアについてもご紹介します。
- +
目次
そもそもDNSサーバとは
DNSは、Domain Name Systemの略で、インターネットの名前解決を行う機能です。ホスト名からIPアドレスを調べたり、IPアドレスからホスト名を調べたりする状況で、DNSの機能を使います。DNSの機能はインターネットを利用する上で非常に重要な役割を果たしており、インターネットの初期から欠かせない機能となっています。
DNSサーバは大きく分けて、以下の2つの機能があります。
権威DNSサーバ
組織で管理するホストやドメインの情報をインターネットに公開するためのサーバで、コンテンツDNSサーバとも呼ばれます。権威DNSサーバでは、ゾーン(zone)と呼ばれる単位で、DNSのホストやドメイン(domain)をゾーンファイルに管理します。権威DNSサーバが停止すると、インターネットからWebサイトへのアクセスができなくなったり、メールが届かなくなったりするため、非常に重要なサービスです。こうした事態を防ぐため、1つのゾーンに対して、2台以上の権威DNSサーバを配置するのが一般的です。また、この構成を実現するために、1台の権威DNSサーバをマスタサーバとして配置し、残りをスレーブサーバとして配置する方法が使われます。
キャッシュDNSサーバ
ユーザから名前解決のリクエストを受け結果を返す役割のサーバのことをいいます。例えば、wwww.designet.co.jpというドメイン名から、IPアドレスを調べるような用途で使われます。ユーザは、一般的に1つのキャッシュDNSサーバに問い合わせを行います。問い合わせ先のキャッシュDNSサーバは、指定された名前解決の処理を行うために、複数の権威DNSサーバに検索を行い、利用者に結果を返します。
以前は、この2つのサーバ機能を一つのソフトウェアで担うことが多かったため、単純にDNSサーバと一括りで呼んでいました。しかし最近は、キャッシュポイズニングやDOSなどの攻撃にさらされることが増え、1台のサーバの中に権威DNSサーバとキャッシュDNSサーバを同居させることは危険であると考えられています。そこで、権威DNSサーバとキャッシュDNSサーバを別のサーバに分離して、それぞれの機能に特化したソフトウェアを使い分ける流れが主流になっています。以下のページでは、DNSサーバの各種OSSについて紹介しています。
BINDとは
BIND(読み方:バインド)とは、"Berkeley Internet Name Domain" の略で、カリフォルニア大学バークレー校で開発され、現在はISC(Internet Systems Consortium)が開発・管理を行っているオープンソースのDNSサーバです。Mozilla Public License 2.0 にて提供されています。BINDは古くから使われているDNSサーバで、Linux、Unix、Windows等、様々なOS上で動作することができます。そのため、DNSサーバとしてはデファクトスタンダード的な位置づけとなっています。しかし、近年になってBINDには多くの脆弱性が発見されています。
BINDの特徴
BINDは以下のような特徴を持っています。
DNSサーバとしての機能が揃っている
BINDには、DNS問い合わせの発信元ホストやネットワークによって応答を変えることができる、view機能があります。また、IPv6に対応している点や、セキュリティ強化としてDNSSECの機能を実装している点など、BINDはDNSサーバとしてほぼすべての機能が十分に揃ったソフトウェアです。その他BINDは、DHCPサーバなどと連携して、動的にDNSレコードを更新することができるDynamic DNSにも対応しています。
入手が簡単でサポートが充実している
BINDは、RedHat Enterprise LinuxやCentOS、SuSE Linux Enterprise Server、Ubuntuなど、様々なLinuxディストリビューションで標準的に採用されています。BIND単体をソースからインストールしなくても入手できるため、比較的インストールが容易です。また、Linuxディストリビュータのパッケージを使えば継続的にアップデートを受けることができます。サポートが必要な場合には、RedHat Enterprise Linuxなどのサポート付きのディストリビューションを利用することも可能です。さらにBINDは、DNSサーバのソフトウェアの中でも非常に歴史のある古いソフトウェアであるため、インターネット上に多くの情報が載っている点もメリットの1つです。
chrootに対応している
BINDは、chrootに対応しています。chrootの設定を行うことで、BINDが参照するファイルシステムのルートを、仮想的に特定のディレクトリ配下にあるように見せかけることができます。そうすることで、もしセキュリティホールをつくような攻撃を受けた際でも、chroot環境に閉じ込めることが可能になります。
BINDの問題点
BINDには上記のようなメリットがありますが、近年、以下のような問題が報告されていることから利用には注意が必要です。
脆弱性が多い
BINDは、脆弱性が非常に多く、セキュリティアップデートを頻繁に行わなければなりません。特に、キャッシュポイズニング攻撃を受けた場合、DNSの情報が誤った情報に上書きされ、その情報を利用したユーザが、意図しないサイトに誘導される恐れがあります。また、巨大な情報や不正な情報を送りつけて、BINDを停止させるなどの攻撃も存在します。これらの攻撃に対応するためには、権威DNSサーバとキャッシュDNSサーバを分けて運用し、キャッシュDNSサーバを外部に公開しないような構成を組むことが一般的です。なお、DNSサーバのセキュリティ対策については「DNSサーバ構築」で解説しています。
権威DNSサーバとキャッシュDNSサーバが同居している
BINDは、権威DNSサーバとしても、キャッシュDNSサーバやフォワーディングサーバとしても動作します。以前は、このように一つのソフトウェアで複数の役割を担うのが一般的でした。しかし最近では、権威DNSサーバとキャッシュDNSサーバを同じサーバで兼ねるシステム構成において、セキュリティ上の問題が多く報告されています。そのため、権威DNSサーバとキャッシュDNSサーバを別々のソフトウェアで構成する仕組みが主流となっています。
DNSSECの管理が煩雑
DNSSEC(DNS Security Extensions)とは、DNSの情報に電子署名を付け、正式な発行元のデータであることを検証することができる拡張機能です。キャッシュポイズニング攻撃を防ぐためには欠かせない機能となっています。BINDは古くからDNSSECに対応していますが、管理はかなり煩雑です。BINDのバージョン9.6以上から利用できますが、一般的には9.7系以降が推奨されています。
操作が難しい
BINDは、ファイルやコマンドで管理を行う必要があります。そのため、専門的な知識や技術が無い人にとっては、管理業務に負担がかかる場合があります。
BINDに代わるソフトウェア
上記のようなデメリットから、DNSサーバはBIND以外のソフトウェアを利用することおすすめしています。代替となるソフトウェアには、次のようなOSSがあります。
PowerDNS
PowerDNSは、オランダのPowerDNS.COM BVが開発を行っている、オープンソースのDNSシステムです。現在は、オランダ、デンマーク、スウェーデン、ノルウェーなどDNSSECの導入が進んでいるヨーロッパ諸国を中心に多くの利用者がいます。
PowerDNSには、以下のような特徴があります。
- 権威DNSサーバとキャッシュDNSサーバの両方の機能をサポートしている。
- それぞれのプロセスが完全に分離しているため、キャッシュポイズニング攻撃に強い。
- LDAP、MySQL、PostgreSQLなど様々なバックエンドに対応している。
- BINDに比べて高速に動作し、脆弱性が少ない。
- 専用の管理ツールであるPoweradminを使うことで、ゾーンの追加・変更・削除などの操作をウェブインタフェースから行うことができる。
- DNSSECに対応し、署名に使う鍵の作成から有効期限の設定まで簡単に管理できる。
- 統計情報をWEB画面上で表示・確認することができる。
- 外部連携インタフェースを備えている。
PowerDNSは、権威DNSサーバ・キャッシュDNSサーバの両方の機能を備えていますが、完全に分離してシステムを構成しているためセキュリティ攻撃に強いのが特徴です。万が一どちらかにキャッシュポイズニング攻撃を受けた場合でも、もう一方のサーバへ影響が及ぶことはありません。こうしたメリットから、PowerDNSは、BINDの最大の問題点であるセキュリティの脆弱性を解決することができるソフトウェアとして、注目されています。
以下は、それぞれのクエリ処理能力および脆弱性の数を比較したグラフです。
「BIND v.s. PowerDNS 特徴・機能・性能の比較」へ
unbound
unboundとは、キャッシュDNSサーバに特化したソフトウェアです。オランダのNLnet Labsが開発し、オープンソースソフトウェアとして公開されています。
unboundには、以下のような特徴があります。
- IPv6対応(デュアルスタック)、DNSSECに対応している。
- キャッシュに特化しているため、非常に高速に動作する。
- 設定が簡単。小規模サイトであれば、デフォルトの設定ファイルでそのまま動作させることが可能。大規模サイト向けには、並列スレッド数やキャッシュで利用するメモリサイズを大きくするなど、比較的簡単なチューニングを行うことで運用できる。
- DNSキャッシュが汚染されないような工夫がされており、高い耐性を持っている。
- DNSラウンドロビンに対応している。
- ratelimit機能を使うことで、水責め攻撃の対策が可能。
以上のように、unboundには、今後DNSキャッシュサーバに求められる機能が実装されています。権威DNSサーバと分離した構成で、キャッシュDNSサーバとしてunboundを利用することで、攻撃に強いシステムを構成することができます
NSD
NSDとは、権威DNSサーバのオープンソースソフトウェアです。NSDは「Name Server Daemon」の略で、NLnet LabsとPIPE NCCが共同で開発を行い、保守を行っています。
NSDには、以下のような特徴があります。
- 権威DNSサーバの機能のみを提供している。
- キャッシュDNSサーバの機能はunboundとして別のソフトウェアで提供している。
- BINDに比べてパフォーマンスが高く、脆弱性が少ない。
- 設定ファイルがシンプルで分かりやすい。
- 権威DNSサーバの以下の機能は実装されていない。
- IXFR(差分ゾーン転送)のマスター側機能
- クエリログ
- Dynamic Update
- bindのview機能
NSDは、インストール・設定方法がシンプルです。BINDとゾーンファイルの互換性もあるため、容易に導入ができます。一部実装していない機能があったり、ディストリビューションからrpmが提供されていないといった点には注意が必要ですが、NSDは権威DNSサーバとして実用に耐えうるソフトウェアです。
Knot DNS
Knot DNSは、権威DNSサーバのソフトウェアです。CZ.NIC,z.s.p.o.が開発を行っています。マルチCPU環境に強く、CPUを増やすことで性能が向上します。
Knot DNSには、以下のような特徴があります。
- 権威DNSサーバの機能のみを提供している。
- キャッシュDNSサーバの機能はKnot Resolverとして別のソフトウェアで提供している。
- パフォーマンスが高く、脆弱性が少ない。
- CPUを増やすことでさらに性能が向上する。
- 設定ファイルがシンプルで分かりやすい。
- 設定情報はテキストファイル、データベースファイルの両方で保存することができる。
- DNSSECの運用がしやすい。
- dnstapと併用することでクエリログを取得することができる。
- view機能はないが、ゾーンごとにアクセス制限設定が可能。
KnotDNSは、シンプルで高速に動作し、ANY問い合わせを無効にする機能や、RRL(Response Rate Limiting)に対応しています。KnotDNSは、高速でセキュアな公開用DNSサーバに適しているソフトウェアです。
デージーネットの取り組み
デージーネットでは、インターネットサービスプロバイダ向けに、オープンソースのDNSサーバを利用したシステム構築を行った多数の実績があります。そのような経験を元に、最新のセキュリティ対策を提案しています。BINDに関しては、脆弱性が多いこと、他のソフトウェアと比較して性能が低いことなどから利用を推奨していません。デージーネットでは、権威DNSサーバはPowerDNSを、キャッシュDNSサーバはunboundを推奨しています。DNSサーバの構築をご検討されているお客様には、無料見積もりも行っています。
また、デージーネットでは、構築やシステム保守サポート、コンサルティングの実績を活用して、PowerDNSの商用サポートを提供しています。PowerDNS商用サポートでは、バイナリパッケージの提供、インストレーションサポート、インシデントサポートなどをサポートしています。商用サポートについて詳しく知りたい方は、お気軽にお問合せください。
情報の一覧
DNS権威サーバベンチマーク調査報告書
本書は、BIND、NSD、Knot DNS、PowerDNSの4つのDNSサーバソフトウェアを対象とし、権威DNSサーバ機能のベンチマークを行い、結果をまとめたものです。
BINDに替わるDNSサーバ〜PowerDNS〜
PowerDNSは、管理ウェブインタフェースが利用できる便利なオープンソースソフトウェアのDNSシステムです。ここでは、特徴やパフォーマンス、脆弱性の数から見た安全性などについて説明します。
unbound〜攻撃に強いDNSキャッシュサーバ〜
unboundとは、DNSのキャッシュサーバに特化したオープンソースソフトウェアで、脆弱性が少ない、機能が充実している、高速に動作するといった特徴があります。また、キャッシュポイズニング攻撃に対する防御の機能を多く備え、高いセキュリティを実現しています。
unboundのシステム構成とBINDからの移行
BINDからunboundへ移行する場合は、DNSキャッシュサーバと権威DNSサーバの両方の役割を持つ構成から、これらを分離した構成へ移行する必要があります。ここでは、unboundを利用する場合のシステム構成について説明します。
DNSサーバのおすすめOSS比較9選!選定ポイントも解説
DNSサーバとは、インターネットの名前解決を行うサーバーのことを言います。ここでは、おすすめの各DNSサーバのOSSの特徴を比較し、DNSサーバソフトウェアを選定する際に重視すべきポイントをまとめました。
bindによるDNSSEC対応の権威DNSサーバ構築事例
権威DNSサーバをDNSSEC対応にしたいという要望があり、BINDを使って構築した事例です。BINDの設定だけではなく、上位のレジストラへの登録などを含めて、総合的に対応させていただきました。
dnsdistを利用した負荷分散型権威DNSサーバ構築事例
システムの老朽化によってBINDを更改したいというご要望に対し、dnsdist+PowerDNSを使用してDNSサーバを構築しました。権威DNSとキャッシュDNSの機能の分離する構成にしました。また、アクセスの制限も踏まえてdnsdistの振り分け方法のルールを作成しました。
PowerDNSによるDNSサーバ構築事例
脆弱性の多いBINDに替わるソフトウェアとして、PowerDNSを使用し、セキュリティとスピードの向上を図りました。また、管理ツールとして、日本語にも対応しているPowerAdminを合わせて利用することで、ゾーンの編集やゾーン情報の管理がしやすくなりました。
PowerDNSによるDNSSEC対応の権威DNSサーバ構築事例
BINDでDNSSEC対応をしているが、管理が煩雑だというご相談を頂きました。PowerDNSとPowerAdminを利用することで、署名に使う鍵の作成から有効期限の設定まで、運用に必要な設定を行いやすくすることができました。
unboundによるDNSキャッシュサーバ構築事例
加入ユーザ向けのDNSキャッシュサーバをunboundを使って構成しました。unboundを利用することで、BINDのキャッシュ制御の脆弱性問題を回避でき、セキュリティ性を高めることができました。また、従来発生していたアップデート作業の回数が減り、管理性も向上しました。
マルチDNS環境構築事例
BINDに脆弱性が多く発見され、バージョンアップなどの対策が頻繁に必要になっています。特定のソフトウェアの脆弱性によって外部から攻撃を受け、サービスを停止することがないように、マルチDNS環境を構築した事例です。
DNSキャッシュサーバの水責め攻撃対策構築事例
近年、日本国内のISPで、DNS水責め攻撃による障害が報告されています。本事例でも、何度も障害が発生し、原因を突き止めて対策を行う必要がありました。そこでデージーネットでは、まずBINDをUnboundに変更することをお勧めしました。