DNSサーバのセキュリティを向上させる手段の一例
chroot、DNSSEC、TSIG、DANE
●chroot
あるプロセスのルートディレクトリを、指定したディレクトリ( /chrootディレクトリ等)に変更する操作。
これにより、例えBINDを不正に操作されたとしても、変更後のディレクトリ内のファイルしか操作できなくなる為、被害を最小限に抑える事ができる。
namedをchroot環境で動作させる為には、オプションを付加して起動させる必要がある。
namedのオプション
・-t namedのルートディレクトリとするディレクトリを指定
・-u namedの実行ユーザを指定
・-g namedの実行グループを指定
●DNSSEC(DNS Security Extensions)
公開鍵暗号方式を用いた電子署名により、正当なDNSサーバからのゾーン情報である事を認証し、またゾーン情報が改竄されていないことを保証する技術。
DNSSECでは二種類の鍵を用います。
・ゾーンの署名鍵(ZSK:Zone Signing Key)... ゾーンに署名する
・鍵の署名鍵(KSK: Key Signing Key)... ゾーンに署名した鍵に署名する
それぞれは公開鍵と秘密鍵のペアになっている。
■公開鍵と秘密鍵を作成するには dnssec-keygen コマンドを使用し、ゾーンファイルへの署名に dnssec-signzone コマンドを使用。
dnssec-keygenコマンドの書式
dnssec-keygen [オプション] 鍵の名前(※DNSSECの場合はZone名)
▼主なオプション
・-a 暗号化のアルゴリズムを指定(デフォルトはRSASHA1)
・-b 鍵のビット長を指定
・-n 鍵のオーナータイプを指定
ファイル名の末尾が「.key」となっているのが公開鍵が格納されているファイルで、「.private」となっているのがこれと対になる秘密鍵が格納されているファイル。
●TSIG(Transaction Signature)
共通の秘密鍵を設定する事で、送信元のなりすましや更新データの改ざんを防止するための技術で、ゾーン転送でのDNSサーバの偽装防止、不正なクライアントからのrndcコマンドの操作防止などに使われます。
TSIGが正しく動作するには、送信元(クライアント)と送信先(サーバ)の時刻があっていることが必要。TSIGは秘密鍵を用いてDNSメッセージ全体の署名を行うが、その際に時刻情報を埋め込みます。この署名を受け取った側が署名を検証する際に、許容される範囲以上に時刻がずれていると検証結果が「不正」とみなされてしまうため。
※TSIGもDNSSECと同様にゾーン情報自体の暗号化は行わない
●DANE(DNS-based Authentication of Named Entities)
DNSSECの技術を応用して認証にDNSを使う仕組み。
DNSSECにより、リソースレコードの正当性確認の仕組みがDNSに組み込まれたため、HTTPSなどで使われるX509の証明書とドメインの紐づけの役割を、認証局からDNSに移すことを目的にし、策定されている。
デジタル署名されたレコードをTLSAレコードといい、webのHTTPSで使用されるTLSと技術的には同じ方法を用いて、信頼の基盤を認証局からDNSSECに変更します。TLSAはTLS Associationの略で、サーバ認証に使われる証明書や鍵の情報がドメイン名に対して関連付けられている。