DNS SECURITY / DIGITAL SIGNATURE
DNSSECとは?リゾルバ・権威DNSから理解するDNSの署名検証
ネットショップのURLを正しく入力したのに、もし「行き先の住所」だけをこっそり書き換えられたら? 画面上のアドレスは正しく見えていても、意図しないサーバにつながる危険があります。
Webサイトの名前からIPアドレスを調べるDNSは、インターネットの「住所案内」に当たります。DNSSEC(DNS Security Extensions)は、この住所案内の回答に電子署名を付け、本来のDNSデータか、途中で改ざんされていないかを確認できるようにする技術です。
そもそも、URLを入力すると何が起きる?
たとえば、自分が example.com というドメインを取得し、www.example.com にお店のWebサイトを公開したとします。友人がそのURLをブラウザに入力すると、パソコンはまず「この名前は、どのIPアドレスにつながる?」と調べます。これがDNSによる名前解決です。
身近な例:お店のサイトを開くまで
ここでは名前解決の典型的な流れを単純化しています。ブラウザやOSのキャッシュに答えがある場合、毎回すべてのDNSサーバに問い合わせるわけではありません。
リゾルバはOSに入っているソフト?
はい。ただし「リゾルバ」には大きく2種類あります。 普段私たちのPCやスマートフォンのOSが使うのは、一般にスタブリゾルバ(stub resolver)と呼ばれる問い合わせ役です。一方、外部のDNSサーバで動いている再帰リゾルバ(recursive resolver)は、必要に応じて権威DNSサーバを順番に調べ、答えを返します。
PC・スマホ側:スタブリゾルバ
「www.example.comのIPアドレスを教えて」と、設定されたDNSサーバへ問い合わせる。OSの仕組みやキャッシュを利用する。
DNSサービス側:再帰リゾルバ
プロバイダ・会社・公開DNSなどが運用。未取得の答えはルート、.com、example.comの権威DNSをたどって探す。
家庭のWi-Fiでは、ルーターがDNSの問い合わせを中継する場合もあります。使うDNSサーバのアドレスは、通常はネットワーク接続時に自動設定されます。また、ブラウザがDoHを使って独自のDNSサービスに問い合わせる構成もあります。「リゾルバ=必ずOS内の1つのソフト」と決めつけないのがポイントです。
権威DNSサーバは、ドメインを取得すると指定するネームサーバ?
その理解でほぼ合っています。 ただし、「ドメインを登録するサービス」と「DNSレコードの正式な情報を管理するサービス」は別の役割です。たとえばドメイン登録サービスで example.com を取得し、DNSホスティングサービスに www のAレコードなどを設定します。そして登録サービスの管理画面で、そのDNSホスティングサービスから指定されたネームサーバ(NS)を登録します。
自分の「example.com」を公開するイメージ
example.comは説明用に予約されたドメイン、192.0.2.10は説明用のIPアドレスです。実在サービスの設定値ではありません。
たとえばネームサーバとして ns1.dns-provider.example と ns2.dns-provider.example を指定したなら、そのDNSサービスが example.com の権威DNSを運用する、という構図です。ドメイン登録会社自身が権威DNSも提供していることもありますが、別会社に任せても構いません。
その上に「.com」、さらに上に「ルート」がある
ここがDNSの面白いところです。インターネット全体を1台のDNSサーバが管理するのではなく、名前の階層ごとに担当を分担しています。再帰リゾルバは、答えがキャッシュになければ、上から紹介を受けるように問い合わせていきます。
ルート(.)の権威DNS
「.comについては、.comの担当へ」
↓ .comの担当を紹介
.comの権威DNS
「example.comについては、指定されたNSへ」
↓ example.comの担当を紹介
example.comの権威DNS
「www.example.com → 192.0.2.10」
通常、www は example.com ゾーン内のレコード名であり、「www専用の権威DNS」が必ずあるわけではありません。必要に応じて、さらに下位のサブドメインを別のゾーンとして委任することもできます。
なお、上位のDNSサーバがすべての下位レコードを持っているわけではありません。基本的には「次に誰に聞けばよいか」を教える仕組みです。
DNSだけでは「回答が本物か」を確かめにくい
たとえば www.example.com を開くとき
本来のDNS応答
www.example.com → 192.0.2.10
正しいWebサーバのIPアドレスを受け取る。
偽装されたDNS応答
www.example.com → 203.0.113.77
攻撃者が用意した偽のIPアドレスを信じてしまうおそれがある。
IPアドレスは説明用の例です。通常のDNSでは、キャッシュポイズニングなどによって偽の情報を採用するリスクがあります。DNSSECを適切に検証するリゾルバは、署名の整合性を確認し、検証に失敗したデータを信頼しないようにできます。
まず押さえる3つの登場人物
ゾーン管理者
DNSデータの署名を作り、公開鍵を用意する
権威DNSサーバ
署名済みDNSデータと署名情報を提供する
検証リゾルバ
公開鍵で署名を検証し、利用者へ結果を返す
正確には、署名は通常DNS応答のたびに作るのではなく、ゾーンのデータに対してあらかじめ生成されます。権威DNSサーバが配信し、DNSSEC検証を実行する再帰リゾルバなどが受信後に検証します。
DNSSECの確認手順
- 1. 署名する:ゾーンの管理者は秘密鍵を用いてDNSレコード集合に対する署名を作ります。
- 2. 返答する:権威DNSサーバはIPアドレスの情報と対応する署名などを提供します。
- 3. 検証する:検証リゾルバは公開鍵を使い、署名とデータの整合性を確認します。
- 4. 判定する:改ざんや検証エラーがあると、原則としてその回答を正常なデータとして採用しません。
ここで大切なのは、秘密鍵は署名を作る側、公開鍵は署名を検証する側が使うことです。「公開鍵でDNSデータを暗号化して読めなくする」仕組みではありません。
DNSKEY・RRSIG・DSは何をする?
| レコード | 役割 | たとえ |
|---|---|---|
| DNSKEY | ゾーンの公開鍵を示す | 印鑑を確かめる道具 |
| RRSIG | DNSレコード集合の電子署名を示す | 書類に付いた印影 |
| DS | 親ゾーンに置かれ、子ゾーンのDNSKEYを結び付ける | 上位組織からの保証 |
公開鍵が手に入っても、それが攻撃者の用意した偽物なら意味がありません。DNSSECでは、あらかじめ信頼しているルートゾーンの鍵を起点に、親ゾーンのDSと子ゾーンのDNSKEYをたどり、署名を検証する信頼の連鎖(Chain of Trust)を形成します。
DNSSECの信頼の連鎖(example.comが署名されている想定)
模式図です。署名されたDNSレコード集合や鍵の運用、失効期間などは実際にはさらに複雑です。ドメインを取得しただけでDNSSECが自動的に有効になるわけではなく、署名と親ゾーンへのDS登録などが必要です。
操作ラボ:DNS応答が改ざんされたら?
正しいIPアドレスから偽のIPアドレスに書き換えたり、署名・信頼の連鎖の状態を切り替えたりして、検証結果がどう変わるか確かめてみましょう。
INTERACTIVE LAB
DNS応答の署名を検証する
架空のドメインとIPアドレスを使った概念シミュレーションです。実際のDNS通信や暗号署名計算は行いません。
DNSデータ・署名・信頼の連鎖が一致
オフの場合、署名検証による保護が働かない状態を再現します。
受け取ったDNS応答
RRSIG: あり / DNSKEY・DS: 整合
問い合わせ
利用者が www.example.com のIPアドレスを調べるため、DNSリゾルバに問い合わせます。
ステップ 1 / 4
注:実際には署名の有効期間、アルゴリズム、NSEC/NSEC3、信頼の連鎖など複数の条件が関与します。結果は学習用の簡略化です。
DNSSECでできること・できないこと
できること
署名済みDNSデータの出所と完全性の検証、偽のDNS応答を検出するための重要な対策。
できないこと
DNSの問い合わせや回答の暗号化、アクセス先Webサイトの内容そのものの安全性保証。
DNSSECとDoH・DoT、HTTPSの違い
DNSSECはDNSデータの署名検証、DoH / DoTは端末と対応DNSリゾルバなどの間のDNS通信の暗号化、HTTPSはWebサイトとの通信の保護を主に担当します。目的が異なるため、組み合わせて使うことに意味があります。
DNSSECがあればすべての攻撃を防げる?
いいえ。DNSSECの検証を実行しない環境では保護が働かず、正しく署名された悪意あるドメインまで安全になるわけでもありません。DNSSECはフィッシング全般を解決する技術ではなく、DNSデータの信頼性を検証する仕組みです。
まとめ
DNSSECは「秘密にする」仕組みではなく、「改ざんや偽装を検証する」仕組み。 ゾーン管理者が作った電子署名を、検証リゾルバが公開鍵で検証します。DNSKEY・RRSIG・DSによる信頼の連鎖まで理解すると、DNSのセキュリティが一段とクリアになります。