DNSと暗号化

目次

はじめに

インターネット通信における信頼性と安全性を高めるために、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存在しない名前に関する証明
TLSADANEで使う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-dsfromkeyDSレコードの生成
rndcBINDの制御
dig, delvDNS問い合わせ(delvはDNSSEC検証が可能)
opensslTLS証明書関連処理

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による設定を含めて解説しました。特に鍵管理と署名の正確さが問われるため、ハンズオンでの練習が重要です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次