はじめに
インターネット通信における信頼性と安全性を高めるために、DNSにも暗号化技術が導入されています。この章では、DNSSECとDANEを中心に、BINDを使った設定方法や関連ツール、ファイルなどを詳細に解説していきます。
1. DNSの脅威とセキュリティ対策
DNSは「名前解決」というインターネットの根幹を担う技術ですが、偽の応答を送り付けるDNSキャッシュポイズニングや、中間者攻撃(MITM)などの脅威にさらされています。
そのため、DNS応答の正当性を保証する仕組みとしてDNSSEC(DNS Security Extensions)が登場しました。
2. DNSSECの基本
2.1 DNSSECとは?
DNSSECは、DNSの応答が正当な権威サーバーから発信されたものかどうかを確認するための拡張仕様です。具体的には、DNS応答にデジタル署名(RRSIGレコード)を付け加えることで、その真正性と完全性を保証します。
2.2 主なDNSSEC関連レコード
| レコードタイプ | 説明 |
|---|---|
| DNSKEY | 公開鍵情報 |
| RRSIG | リソースレコードへの署名 |
| DS | 親ゾーンが保持する子ゾーンのDNSKEYのハッシュ |
| NSEC/NSEC3 | 存在しない名前に関する証明 |
| TLSA | DANEで使うX.509証明書の情報 |
3. BINDでのDNSSEC実装
3.1 鍵の種類
- KSK(鍵署名鍵): DNSKEYレコードを署名する。
- ZSK(ゾーン署名鍵): 他のゾーンデータを署名する。
3.2 鍵の生成
dnssec-keygen -a RSASHA256 -b 2048 -n ZONE example.com
dnssec-keygen -f KSK -a RSASHA256 -b 2048 -n ZONE example.com
3.3 ゾーンファイルの署名
dnssec-signzone -o example.com -k Kexample.com.+008+KSK.key example.com.zone Kexample.com.+008+ZSK.key
3.4 BIND設定(named.conf)
zone "example.com" IN {
type master;
file "example.com.zone.signed";
auto-dnssec maintain;
inline-signing yes;
};
3.5 再帰的ネームサーバの検証設定
options {
dnssec-enable yes;
dnssec-validation auto;
};
4. DANE(DNS-based Authentication of Named Entities)
4.1 DANEとは?
DANEは、DNSSECを利用してX.509証明書情報をDNSに公開する仕組みです。TLSAレコードにより、証明書のハッシュやCA情報を検証可能にします。
4.2 TLSAレコードの例
443._tcp.www.example.com. IN TLSA 3 1 1 <ハッシュ値>
この例では、ポート443のTCPで提供されるサービス(HTTPS)に対して、証明書のハッシュを提供しています。
5. TSIGによるBIND間のセキュア通信
TSIG(Transaction SIGnature)は、ゾーン転送やrndcによる操作時にHMACによる認証を行う技術です。
5.1 TSIG鍵の生成
tsig-keygen example-key > example-key.conf
5.2 BIND設定
key "example-key" {
algorithm hmac-sha256;
secret "base64encodedkey==";
};
server 192.0.2.1 {
keys { example-key; };
};
6. 各種コマンドとユーティリティ
| ツール | 用途 |
|---|---|
dnssec-keygen | 鍵の生成 |
dnssec-signzone | ゾーン署名 |
dnssec-settime | 鍵の有効期限の設定 |
dnssec-dsfromkey | DSレコードの生成 |
rndc | BINDの制御 |
dig, delv | DNS問い合わせ(delvはDNSSEC検証が可能) |
openssl | TLS証明書関連処理 |
7. トラブルシューティングのポイント
- 鍵の有効期限を確認:
dnssec-settime -u - DNSSEC検証で失敗する場合:ゾーン署名が最新か、DSレコードが親に登録されているか確認
delvコマンドで DNSSEC 検証
章末問題(四択)
Q1. DNSSECでDNSレコードに署名を付けるためのレコードはどれですか?
A. DNSKEY
B. RRSIG
C. DS
D. TLSA
解説
正解:B
RRSIG(Resource Record Signature)は、DNSSECにおいて署名付きのDNSレコードを表すためのレコードです。これは特定のリソースレコードセット(RRset)に対してデジタル署名を付けることで、レコードの改ざんがないことを保証します。
他の選択肢の誤り:
- A. DNSKEY:署名を検証するための公開鍵を保持するレコードであり、署名そのものではありません。
- C. DS(Delegation Signer):親ゾーンから子ゾーンへの信頼の橋渡しを行うレコード。これも署名そのものではない。
- D. TLSA:DANEの証明書情報に使うレコードで、DNSSECの署名とは関係ありません。
Q2. BINDで再帰的ネームサーバがDNSSEC検証を行う設定はどれですか?
A. auto-dnssec maintain;
B. dnssec-validation auto;
C. zone-signing yes;
D. dnssec-enable off;
解説
正解:B
- このオプションは、BINDの再帰的サーバーがDNSSEC署名の検証を自動的に行うように設定します。信頼できるルート鍵を使ってDNS応答の正当性を検証する機能です。
他の選択肢の誤り:
- A. auto-dnssec maintain;:これはゾーン署名を自動管理するための設定で、権威サーバー側のもの。
- C. zone-signing yes;:このような設定項目はBINDには存在しません(誤記)。
- D. dnssec-enable off;:DNSSECそのものを無効にする設定です。
Q3. DANEでX.509証明書情報をDNSに公開する際に使用されるレコードは?
A. RRSIG
B. DS
C. TLSA
D. NSEC3
解説
正解:C
- TLSAレコード(Transport Layer Security Authentication)は、DANEで使われるレコードで、X.509証明書やそのハッシュ値をDNS上に公開するために使用されます。これにより、PKI(公開鍵基盤)に依存しない認証が可能になります。
他の選択肢の誤り:
- A. RRSIG:署名レコードであり、証明書情報そのものを保持しません。
- B. DS:DNSSECの信頼連鎖を構築するためのレコード。証明書の情報とは無関係。
- D. NSEC3:存在しないDNS名の証明(負の応答の正当性)に使われるレコードです。
Q4. TSIGの用途として正しいのはどれですか?
A. DNSSECの署名
B. 再帰問い合わせのキャッシュ保護
C. ゾーン転送時の認証
D. HTTP通信の暗号化
解説
正解:C
- TSIG(Transaction SIGnature)は、DNSのクライアントとサーバー間のトランザクション(主にゾーン転送や
rndcなどの操作)で改ざん防止と認証を提供するために使用されます。HMACによる署名付きのリクエスト・レスポンスで、事前に共有された鍵(shared secret)を使います。
他の選択肢の誤り:
- A. DNSSECの署名:DNSSECではTSIGではなく、公開鍵暗号方式(RRSIGなど)を使用します。
- B. 再帰問い合わせのキャッシュ保護:これはDNSSECによる署名検証が該当します。
- D. HTTP通信の暗号化:これはTLSの役割です。TSIGはDNSに特化した技術です。
おわりに
この章ではDNSのセキュリティ機能であるDNSSECとDANEについて、実装方法や仕組み、BINDによる設定を含めて解説しました。特に鍵管理と署名の正確さが問われるため、ハンズオンでの練習が重要です。
コメント