DNSのセキュリティ2:DNSSEC、DoT、DoHなど
情報処理安全確保支援士試験の対策として、DNSセキュリティについて解説します。2回目はDNSSEC、DoT(DNS over TLS)、DoH(DNS over HTTPS)、サブドメインテイクオーバーです。
1.DNSSEC
(1)DNSSECとは
DNSSEC(DNS Security Extensions)は、DNS応答にディジタル署名を付与する仕組みです。これにより、DNSキャッシュサーバは権威DNSサーバから受け取った応答が改ざんされていないかを検証できます。結果として、利用者は正しい応答を受け取ることが保証されます。なお、DNSSECの目的は通信内容の暗号化ではなく、「応答の真正性と完全性」を確認することにあります。
参考ですが、以下の資料が、とても詳しいです。
https://www.nic.ad.jp/ja/materials/iw/2012/proceedings/t9/t9-Funato.pdf
(2)DNSSECの目的
以下の丸の2つが目的です。
⭕ DNS応答の真正性
・ 「この応答は確かに、seeeko.com の権威DNSサーバが発行したものである」
→ DSレコードとKSKの仕組みで、上位ゾーンからの信頼の連鎖により確認します。

⭕ 完全性の保証(=改ざん検出)
・ 「応答データ(Aレコードなど)が途中で書き換えられていない」
→ RRSIG署名をZSK公開鍵で検証し、署名が一致すれば改ざんなし。

❌通信の暗号化(内容が見られないこと)は保証しません。
・ DNSSECは署名による検証だけで、暗号化はしません。
・ 通信経路の暗号化は DoT(DNS over TLS)や DoH(DNS over HTTPS)が担当します。
(3)DNSSECを実装する方法
DNSSECを実装するには、キャッシュDNSサーバ、コンテンツDNSサーバの両方に、DNSSECの設定を有効にする必要があります。
(試験で問われませんが参考までに)、キャッシュサーバ側では、named.confのoptionsにて以下を記載します。
dnssec-enable yes;
dnssec-validation yes;
(4)登場人物
以下にあるように、❶キャッシュDNSサーバ、❷権威DNSサーバ(seeeko.com)、❸上位の権威DNSサーバ(.com)、があります。

それぞれ、どんな情報(主にDNSレコード)を持つかを整理します。
❶キャッシュDNSサーバ
キャッシュを持つ
❷seeeko.comの権威DNSサーバ
保持するDNSレコードとしては、以下があります。これがわかりづらいです。いっぱいあるんです。
a)DNSKEYレコード
・DNSSECで使用する公開鍵を格納する。
・ZSK(Zone Signing Key、ゾーン内のA、MXレコードなどを署名する公開鍵)、KSK(Key Signing Key、DNSKEYに署名する公開鍵)の2種類がある。
例)
; 256は、ZSKを表す。一番最後のAwE・・・が公開鍵
seeeko.com. IN DNSKEY 256 3 8 AwEAAaZSKpublickey...
; 257は、KSKを表す。一番最後のAwE・・・が公開鍵
seeeko.com. IN DNSKEY 257 3 8 AwEAAaKSKpublickey...
b)RRSIG
・AやMXなどの各レコードに対して付与されるディジタル署名。
・署名対象のレコードごとに1つずつ存在する。
例)
; ZSKで署名された「www.seeeko.com. 」というAレコード用の署名を含む。署名は、最後のAwEAAZS
www.seeeko.com. IN RRSIG A 8 2 3600 20251012000000 20250912000000 12345 seeeko.com. AwEAAZSKsignature...
; KSKで署名された(ZSKとKSKを含む全ての)DNSKEYレコードの署名を含む。署名は、最後のAwEA・・・
seeeko.com. IN RRSIG DNSKEY 8 2 3600 20251012000000 20250912000000 67890 seeeko.com. AwEAAKSKsignature...
c)各種リソースレコード:A / MX / CNAME など
例)
www.seeeko.com. IN A 203.0.113.10
mail.seeeko.com. IN MX 10 mailhost.seeeko.com.
seeeko.com. IN CNAME www.seeeko.com.
❸上位(.com)の権威DNSサーバ
a)DSレコード
下位ゾーン(例:seeeko.com)のKSKのハッシュ値をDSとして登録し、下位ゾーンの鍵(KSK)の正当性を保証する。
(例)
seeeko.com. IN DS 12345 8 2 9A3F7C1A5D9E0B2C3F4A...
(5)DNSKEYリソースレコード
すでに記載しましたが、ここでは、DNSSECの中核をなすDNSKEYについて、改めて説明します。
DNSSECでは、「公開鍵暗号」を使って、DNSの情報が正しい(改ざんされていない)ことを確認できるようにします。このとき使う鍵は以下の2つです。
・🔒 秘密鍵 … 権威DNSサーバが持ち(もちろん非公開)、DNSのレコードに署名を付与する
・🔑 公開鍵 … DNSKEYリソースレコードに登録して公開される。キャッシュDNSサーバは、受け取ったDNSのレコードとその署名が正しいかを検証する際、この公開鍵を取得する。
試しに、digコマンドでDNSKEYを調べてみよう。
※nslookup ではできない。また、ipaやGoogleではDNSKEYリソースレコードが出てこないので、jprs.jpで実験した。覚える必要は全くないが、256と書いてある方がZSK (Zone Signing Key)で、署名に使われる公開鍵。257は、KSK (Key Signing Key)で、「ゾーンの署名鍵(ZSK)が本物であること」を保証するために使われる公開鍵です。忘れてください。
# dig -t DNSKEY jprs.jp
(中略)
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;jprs.jp. IN DNSKEY
;; ANSWER SECTION:
jprs.jp. 300 IN DNSKEY 256 3 8 AwEAAbAWk7ayFdYLAQXMPCcMFGi+F9uTkDYDAPhiWtRbOpm054K7TC3q UntT0wFyIc/4ujDNB/eUhCxZKjzGOVDjDVjlwXQqMoSPf6eBgMr2ybpV efxXCYQWVSWTE3XBbkZypemuUt6PL9NXbMu9LJZbpAYUSgXeg1QJQkbN +5rlhJGv
jprs.jp. 300 IN DNSKEY 257 3 8 AwEAAbra/T97DN5jJRbB5GGs3xtONaJ3gcMHjkdYemjo6AxefvcSSr0q GrqnT9cd4XbnIEzxX6SyLo8dJRPpOPwz1LOJRNGiX0VdVDmMwAjVbbPd VSpcxnQ4XEmdWaWRYFIuPlVUgM/Sh+mSE4QOhae3Eaq4DY4PEY4uaVOL 8850pqEVATUQy6frhyr2q8x5efTOh+2S3QgjxllfN8/DPcAyL07XvCja nVAm1LuT5nzlhEpP3kHhcwkUrb/eEGVqfLUSUpmiWD3Hv+sHVbj4RTVz hReUt343AsqwG1O+BkQhVBT00PTGCqcx8MfzGta6pqsP64SkfU71XcYT /xF9gqvjw5M=
(6)DNSSECによる検証の流れ
繰り返しですが、DNSSECでは、DNSキャッシュサーバが、権威DNSサーバから受け取った応答が改ざんされていないかを検証します。以下の図を見てください。

①PCがキャッシュDNSサーバにDNSの問い合わせをします。例)「www.seeeko.comのIPアドレスを教えてください」
②キャッシュDNSサーバは、DNSSEC検証を有効(DOビットをセット)にした上で、権威DNSサーバにDNSの問い合わせをします。
③権威DNSサーバは、ゾーン情報(例:www.seeeko.comのAレコード)に秘密鍵(ZSKの秘密鍵)でディジタル署名を行い、その署名結果(=RRSIG レコード)を生成します。そして、権威DNSサーバは、A レコードと署名(対応する RRSIG レコード)を応答として返します。
※RRSIG レコードは毎回動的に署名を生成するわけではなく、有効期限が切れるまで保持され、定期的に再署名されます。
;Aレコード
www.seeeko.com. IN A 203.0.113.10
;ZSKで署名された「www.seeeko.com.」というAレコード用の署名
www.seeeko.com. IN RRSIG A 8 2 3600 20251012000000 20250912000000 12345 seeeko.com. AwEAAZSKsignature...
④キャッシュDNSサーバは、署名の検証に必要な公開鍵(DNSKEY レコード、ZSK の公開鍵)を、権威DNSサーバに問合せて受け取ります。
;ZSKの公開鍵
seeeko.com. 3600 IN DNSKEY 256 3 8 AwEAAaZSKpublickeyBase64...
;KSKの公開鍵
seeeko.com. 3600 IN DNSKEY 257 3 8 AwEAAaKSKpublickeyBase64...
;DNSKEYのレコードセットをKSKで署名したデータ
seeeko.com. 3600 IN RRSIG DNSKEY 8 2 3600 20251101000000 20251001000000 54321 seeeko.com. AwEAAKSKsignatureBase64...
⑤キャッシュDNSサーバは、受け取った公開鍵(DNSKEYレコード、ZSKの公開鍵)を使って、手順③で受け取った署名(RRSIG)が、正しい署名であるかを検証します。
(7)DNSKEYの正当性の確認
さて、情報処理安全確保支援士試験の対策としては、ここからは問われたことがありませんし、なかなか面倒なので、深入りする必要は無さそうです。興味がある人だけ読んでください。
😯受け取ったDNSKEY(ZSKの公開鍵)が本物かどうかは、どうやって確認するのですか。
🙍♂️たしかに、偽のサーバから「偽の公開鍵」をもらってしまえば、いくら検証しても意味がありません。
DNSSECでは、公開鍵(DNSKEY)の正当性を上位のDNSサーバ(親ゾーン)が保証します。具体的には、上位ゾーンにDSレコード(Delegation Signer Record)という署名情報があり、下位ゾーンであるseeeko.comのDNSKEYのハッシュ値が登録されています。
(DSレコードの例)
seeeko.com. IN DS 12345 8 2 9A3F7C1A5D9E0B2C3F4A...
キャッシュDNSサーバは、取得した seeeko.com の DNSKEY のうち、
「フラグが257(=KSKであって、ZSKではない))」の公開鍵を選び、そのハッシュ値を計算します。計算結果が、親ゾーンの DS レコードに書かれた値と一致すれば、このKSK公開鍵は、親ゾーン(.com)が認めた本物だと判断できます。
なのでお気づきかと思いますが、この説明は、ZSKの公開鍵の正当性ではなく、KSKの公開鍵の正当性を確認する方法です。
(8)KSKの必要性
🙁先の(6)の話、何でこんな面倒なことをするの? KSKがなくても、ZSKとDSがあればいいのでは?
🙍♂️確かに。そして、DSがZSKのハッシュ値を持てばいいと思います。
なぜこうしないのかというと…、DSはKSKのハッシュ値でした。これをZSKのハッシュ値にすると、運用がかなり大変になるのです。
なぜなら、Aレコードなどは大量にあり、頻繁に変わることもあります。そうすると、上位の権威DNSサーバで、その都度DSレコードを書き換える必要があります。大変ですよね。
そこで、ZSK(頻繁に変わる)と KSK(あまり変えない)を分離し、親の権威DNSサーバが追うのは KSKだけ にしたのです。
(9)KSKの必要性と、ZSKの正当性の確認
キャッシュDNSサーバは、Aレコード+その署名(ZSKで署名)を検証する前に、その検証に使うDNSKEY(ZSKとKSKの公開鍵のセット)を取得した瞬間に、受け取ったZSKが正しいかを検証します。
この検証に使うのが、KSKです。
流れとしては、以下です。
① キャッシュDNSサーバが「www.seeeko.comのIPアドレス」を問い合わせると、Aレコード+RRSIG(ZSKで署名されたデータ)を受け取る。
② キャッシュDNSサーバ「この署名を検証」するのですが、署名検証にはZSKの公開鍵(DNSKEYレコード)が必要なので、seeeko.com の DNSKEYレコード を問い合わせる。
③ 権威DNSサーバから返ってくるものは、以下の2つ(レコードとしては3つ)
・DNSKEYレコード(ZSKとKSKの公開鍵)
・RRSIG(DNSKEYレコードをKSKで署名したデータ)
;ZSKの公開鍵
seeeko.com. 3600 IN DNSKEY 256 3 8 AwEAAaZSKpublickeyBase64...
;KSKの公開鍵
seeeko.com. 3600 IN DNSKEY 257 3 8 AwEAAaKSKpublickeyBase64...
;DNSKEYのレコードセットをKSKで署名したデータ
seeeko.com. 3600 IN RRSIG DNSKEY 8 2 3600 20251101000000 20251001000000 54321 seeeko.com. AwEAAKSKsignatureBase64...
④ キャッシュDNSサーバはまず、受け取ったDNSKEY署名(RRSIG)を検証します。
具体的には、③で受け取った公開鍵(ZSK+KSK)をハッシュし、上位ゾーン(.com)のDSレコード(KSKのハッシュ)と比較する。これで、ZSK+KSKの正当性が確認できました。
(10)DNSSECの有効範囲
😯PCとキャッシュDNSサーバ間はどうやってDNSSECをするのですか?
🙅♂️先の(5)図でも記載しましたが、PCとキャッシュDNSサーバ間のDNS問合せは、DNSSECを使いません。
PC側がDNSSECには対応していないので、使えないと思ってください。
Q.なぜPCとキャッシュDNSサーバの間はDNSSECの必要性が高くないのか?
↓
↓
↓
↓
↓
A.DNSキャッシュポイズニングなどの攻撃は、キャッシュDNSサーバに対して行われます。よって、キャッシュDNSサーバにて対策が行われれば一定の効果が期待できるのです。また、キャッシュDNSサーバとDNSSECを実施したとしても、すでに汚染されたレコードを受け取っていれば、その汚染されたレコードに対して署名をしてしまい、意味がありません。
DNSSECの詳細な動作に関しては、過去の試験ではあまり問われませんでした。なので、言葉と概要だけ覚えておけばいいでしょう。
2.DNS over TLS とDNS over HTTPS
(1)DNS通信の課題
従来のDNSは、①暗号化が無いので盗聴される、②真正性と完全性の確保が
できない、という問題を抱えていました。
これを解決するために登場したのが以下の技術です。
①暗号化が無いので盗聴される
→DNS over TLS (DoT)やDNS over HTTPS (DoH)による通信経路の「暗号化」
②真正性と完全性の確保ができない
→DNSSECで、応答データの「真正性の確保」と「改ざん防止」
🙁DNS通信が盗聴されて困ることはあるのですか?
🙍♂️すごく困るというわけではないかもしれないけど、リスクはあるよね。
たとえば、DNSの通信内容から「どのサイトにアクセスしたか」が第三者に知られてしまう可能性があります。これにより、利用者の行動履歴や興味関心といったプライバシー情報が漏洩するおそれがあります。特に、公衆無線LANのような不特定多数が利用する環境では、通信内容を盗み見られるリスクが高まります。
(2)DoT / DoH の概要
DNSは通常53番ポートを使って非暗号の通信を行います。DNS通信経路を「暗号化」する技術がDoTとDoHです。それぞれ説明します。
❶ DNS over TLS(DoT)
・DNSメッセージを TLS(Transport Layer Security) で暗号化して送信。
・ポート番号:853
・通常、ファイアウォールのポートで853番は空いていないでしょうから、不便だという声もあります。ですが、AndroidスマホでDoTの方が進んでいます。
❷ DNS over HTTPS(DoH)
・DNSメッセージを HTTPS通信(TLS+HTTP) にカプセル化して送信。
・ポート番号:443(通常のWeb通信と同じ)
・DoTと違って、企業のファイアウォールをわざわざ開けなくてもいいという便利さもあります。一方で、情報システム部からすると、「Webサイトを見ているのか、DNSを引いているのか」区別がつきません。そのため、管理がしずらいという声もあります。
暗号技術と言いましたが、TLS を使うので サーバ証明書にて、DNSサーバの認証は行うことはできます。
😯じゃあ、「問合せ内容(検索したいドメイン)」と「証明書」の突き合わせができるのですね?
🙅♂️いえ、その確認はしません。 確認するのは、あくまで「接続しようとしているDNSサーバ」と「証明書」の一致です。
(3)DoT / DoHの有効化
・この技術を利用するには、クライアント(スタブリゾルバ)と DNS サーバ(リゾルバ/キャッシュ DNS サーバ)双方が DoT または DoH に対応している必要があります。
・Windows クライアント(Windows 10 以降)は、DNS over HTTPS(DoH)がサポートしていますが、 DoTはの「テスト機能」が導入されているレベルのようです。
・また、スマートフォンも、DoTやDoHの対応は進んでいるのですが、まだまだ普及したとまでは至っていないように思います。
・DoT(DNS over TLS)や DoH(DNS over HTTPS)を使うと、クライアント(スタブリゾルバ)はポート53ではなく、TLSやHTTPSのポート(主に443など)でキャッシュDNSサーバに対してDNS問合せを行います。

(4)DNSSECとの違い
😯DNSSECもありましたよね?
🙍♂️DNSSECとは目的が違んだ
違い❶:DNSSECはディジタル署名による「認証」を目的としている。通信の暗号化はされない。→DoTやDoHは暗号
違い❷:DNSSECは、キャッシュDNSサーバ(フルサービスリゾルバ)と、コンテンツDNSサーバの間での認証強化。→DoTやDoHはクライアントPC(スタブリゾルバ)とキャッシュDNSサーバ(フルサービスリゾルバ)の間

(5)権威DNSサーバとの間でのDoTやDoH
🙁フルリゾルバサーバと権威DNSサーバの間はDoTやDoHは有効にできないのですか?
🙋♂️いえ、できますよ。
でも、DNSの問合せというのは、誰でも問合せできるものですから、暗号化する必要性はあまり高くありません。キャッシュDNSサーバからの問合せであれば、個人が特定できないので、プライバシーの問題も関係ないことでしょう。DoTやDoHを有効にすると、UDPではなく、TCPの通信になるため、権威DNSサーバの負荷が高くなります。レスポンスが遅くなるだけです。また、DNSSECがあるので、改ざん検知は可能なので、それで充分と考えていると思います。
3.その他
(1)ドメインのドロップキャッチ
・企業で使用したドメインを手放すと、第三者に再取得(ドロップキャッチ)され、そのドメインがフィッシングサイトやアダルトサイト等に転用される事例がある。
・デジタル庁「Webサイト等の整備及び廃止に係るドメイン管理ガイドライン」には、「旧ドメイン運用停止後も一定期間、旧ドメインを保持し(中略)対策を講じた上で、廃止手続を行う」とある。
4.穴埋め問題(オリジナル問題)
DNSSEC(DNS Security Extensions)は、DNS応答に (ア) を付与する仕組みです。これにより、DNSキャッシュサーバは(イ)から受け取った応答に関して、(ウ)と(エ)を検証できます。
なお、DNSSECは通信の暗号化を行わないため、通信経路の暗号化は (オ) や (カ) が担当します。
DNSSECで使用する公開鍵は (キ) レコードに登録されます。
DoTは、DNSメッセージを (ク) で暗号化して送信し、ポート番号853を使用します。一方、DNS over DoHは、DNSメッセージを (ケ) 通信にカプセル化し、ポート番号( コ )を使用します。これらはいずれも、クライアント(スタブリゾルバ)と (サ) との通信経路を暗号化し、盗聴や改ざんを防ぐ技術です。
また、企業や組織が、クラウドや(シ)などの外部サービスを使うとき、DNSで(ス)という設定を使って、たとえば www.example.com → service.xxxx.dom のように、外部サービスのドメインを指す設定を行います。その後、その外部サービス契約を終了したのに、DNS設定を消し忘れると、service.xxxx.domが「空き状態」になります。
攻撃者が同じサービス上で 同じ(セ)を再登録できる場合、その空きサブドメインを自分の環境に結びつけてしまえるのです。結果として、利用者が www.example.com にアクセスすると、本来のサイトではなく、攻撃者が用意した偽サイトが表示されてしまいます。この攻撃を(ソ)と言います。
↓
↓
↓
↓
↓
↓
↓
↓
ア ディジタル署名
イ 権威DNSサーバ(コンテンツDNSサーバ)
ウ 完全性(=改ざんされていない)
エ 真正性(=正規のサーバからの応答)
オ DoT(DNS over TLS)
カ DoH(DNS over HTTPS)
キ DNSKEY
ク TLS(Transport Layer Security)
ケ HTTPS(TLS+HTTP)
コ 443
サ キャッシュDNSサーバ(フルリゾルバサーバ)
シ CDN
ス CNAME
セ ホスト名
ソ サブドメインテイクオーバー
5.過去問:午前
(1)過去問❶(H27SC春午前Ⅱ)
問14 DNSSECで実現できることはどれか。
ア DNSキャッシュサーバからの応答中のリソースレコードが,権威DNSサーバで管理されているものであり,改ざんされていないことの検証
イ 権威DNSサーバとDNSキャッシュサーバとの通信を暗号化することによる,ソーン情報の漏えいの防止
ウ 長音“-”と漢数字“一”などの似た文字をドメイン名に用いて,正規サイトのように見せかける攻撃の防止
エ 利用者のURLの打ち間違いを悪用して,偽サイトに誘導する攻撃の検知
↓
↓
↓
↓
↓
正解はア
6.過去問:午後
(1)過去問❶ H22SC春午後Ⅱ問1
M主任とNさんは、DNSキャッシュポイズニング対策について検討した。根本的な対策として、[ a ]というDNSのセキュリティ拡張方式の導入が考えられた。[ a ]は、DNSのレコードに公開鍵暗号方式による[ b ]を付加し、応答を受け取った側ではその[ b ]を検証する方式である。しかし、[ a ]には、鍵の管理をどのように行うかなど、今までのDNSサーバにはない運用手順が必要であること、Y社だけでなく大多数の組織が対応していなければならないことから、すぐには採用できない。
↓
↓
↓
↓
↓
a DNSSEC
b ディジタル署名
(2)過去問❶ R3春SC午後1問2

↓
↓
↓
↓
↓
↓
↓
↓
↓
解答例 f:オ(スタブリゾルバ)
g:カ(フルサービスリゾルバ)
(3)過去問❸ R7春SC午後問4
設問1で言うと、解答は以下
★問題は別途掲載★
設定を変更したサーバ名:権威DNSサーバ
変更内容:終了したサブドメインのCNAMEレコードを削除する。
