DNSの「開いたパンドラの箱」を理解するために - 権威DNSサーバが返す5種類の応答とその意味 -

2014/7/25-1

前回からかなり時間が経過してしまいましたが、やっと新書を書き終わったので、「DNSキャッシュポイズニングの基本と重要な対策」の続きです。

まだまだ先は長いのですが、今回は権威DNSサーバがキャッシュDNSサーバに返す5種類の応答とその意味について解説します。

権威DNSサーバからの5種類の応答

ユーザからの名前解決要求を受け取ったキャッシュDNSサーバは、ルートサーバを起点とするDNSの階層構造をたどって、名前解決を実行します。名前解決の際、キャッシュDNSサーバはユーザから問い合わせがあった「名前」と「型」を、権威DNSサーバにそのまま問い合わせます。そして、キャッシュDNSサーバはそれぞれの権威DNSサーバから返される応答を解釈しながら、名前解決を進めていきます。

名前解決において、キャッシュDNSサーバがそれぞれの権威DNSサーバから受け取る応答は、以下の5種類に分類できます。この5種類の応答の意味を理解することが、名前解決を理解することにつながります(参考:D.J.Bernstein氏による解説)。

  • その名前・型のレコードはこれである(通常応答)
  • その名前にはどんな型のレコードも存在しない(NXDOMAIN)
  • その名前にはその型のレコードは存在しないが、他の型のレコードやサブドメインは存在する可能性がある(NODATA)
  • その名前の正式名はこれである(CNAME)
  • その名前は他の権威DNSサーバが知っている(referral/委任)

キャッシュDNSサーバは、受け取った応答がこの5種類のうちのどれにあたるかということを、応答にセットされるフラグや応答コード、各セクションに設定される内容を分析して判別し、それぞれの応答に応じた動作をする必要があります。つまり、「DNSメッセージのフラグや応答コードがこうで、コレとコレがメッセージ中のこの場所にこうセットされているから、その意味は○○だ」といった解釈は、権威DNSサーバからの応答を受け取ったキャッシュDNSサーバが実行しているわけです。

この5種類の分類は、「5種類のメッセージ」としてRFCに明示されているわけではなく、各種仕様をよく読んでつぎはぎをまとめると、この5種類になるということです。DNSメッセージに含まれる様々なフィールドを見て、それぞれの意味を正しく理解しないと、そのDNSメッセージが何を示しているのかを解釈できない仕様とも言えます。キャッシュDNSサーバは、このように、かなり面倒臭い作業をしているわけです (このことは参考リンクとして示したBernstein氏の解説にも書かれています)。

DNSで行われるやり取りの基本は、RFC 1034「DOMAIN NAMES - CONCEPTS AND FACILITIES」とRFC 1035「DOMAIN NAMES - IMPLEMENTATION AND SPECIFICATION」に記載されています。これらのRFCに記載されている内容に対して、後に発行された数多くのRFCによって様々な更新が行われていますが、DNSの根本的な部分は1987年に発行された2つのRFCに記載されている内容が元になり続けているのが現状です(参考:参考:滝澤隆史氏によるDNS RFC系統図)。このように、スパゲッティ状に定義された凄く古い仕様が今なお現役でありつつ、インターネットの根幹を担っていることが、今年の4月に行われた「開いたパンドラの箱」という発表の背景にあるとも言えそうです。

「開いたパンドラの箱」という発表が示すこと

今年の4月に「開いたパンドラの箱」として発表されたDNSキャッシュポイズニングの手法は、5種類のうち(1)の通常応答、または(5)のreferreal/委任の2種類の応答の偽造応答によって毒を注入するものです (発表に書かれているように、今回示された攻撃手法は2種類存在します)。両方とも、権威DNSサーバを示すNSレコードを攻撃対象にできるということが重要なポイントです。

4月の発表文には、以下のように書かれています。

  • KaminskyとAmir Herzberg and Haya Shulmanは強力な銃を作った
  • Müllerはそれに使う弾を作った
  • 前野らはどこに獲物がいるかを示した

4月の発表は、2008年の段階で既知であった手法(強力な銃)を活用して、(1)または(5)の偽造応答を返すことで偽のNSレコードの注入を図り(使う弾)、それを足掛かりとすることで、目的とするAレコードやAAAAレコードの注入を図るというものです。攻撃手法そのものは前述の通り既知であり、「どこに獲物がいるのか(どういう条件を満たしたドメイン名が攻撃対象となりうるか)を示した」ことが、今回のポイントとなります。

5種類の応答の持つ意味

では、5種類の応答の意味をそれぞれ見て行きましょう。

通常応答

通常応答は「その名前と型のレコードはこれである」という応答です。その名前(ゾーン)を管理している権威DNSサーバが実在する名前と型を聞かれた場合、その内容を答えます(複数存在する場合にはそれらのセットを答えます)。

NXDOMAIN

DNSには「存在しない」という意味の応答(不在応答)が2種類存在します。ひとつはこれから説明するNXDOMAINで、「その名前には、どんな型のレコードも存在しない」ということを示します。もうひとつは「その型のレコードは存在しないが、他の型のレコードは存在する可能性がある」ということを示します。これはNODATAと呼ばれています(次で説明)。

キャッシュDNSサーバがNXDOMAINを受け取った場合、その名前にはどんな型のレコードも存在していないと判断できます。例えば、ある名前のAレコード(IPv4アドレス)に対してNXDOMAINが返された場合、その名前にはAAAAレコード(IPv6アドレス)など他のレコードも存在しないことになります。つまり、キャッシュDNSサーバはこの結果を使って、次回以降の名前解決を効率化できるわけです。例えば、ある名前のAレコードの問い合わせに対しNXDOMAINが返された場合、その直後の同じ名前に対するAAAAレコードの問い合わせでは、権威DNSサーバにAAAAレコードを問い合わせることなく、NXDOMAINを返すことができます。

NODATA

NODATAは「その型のレコードは存在しないが、他の型のレコードは存在する可能性がある」ということを示します。その型のレコードは存在しなかったが、他のレコードは存在するかもしれない、ということになりますので、ある名前のAレコードの問い合わせに対してNODATAが返された直後にAAAAレコードが問い合わされた場合、権威DNSサーバにAAAAレコードを問い合わせることになります。

DNSメッセージの詳細は次回の説明になりますが、NODATAはDNSメッセージのResponse Code(RCODE)が「No Error(正常)」を示す0であるのに対して、NXDOMAINは「Name Error」を示す3であるという点でメッセージにおける表現方法が異なります。

CNAME

CNAMEは、Canonical Nameの略です。日本語で「正式名」とも呼ばれています。 「実際の名前は○○です」、言い換えると「その名前は○○という名前の別名です」といったものを示すもので、「alias(エイリアス)」と表現されることもあります。

たとえば、「www.example.com」のAレコード(IPv4アドレス)の問い合わせに対し、「www.example.comの正式名はhoge.example.jpです」といった応答が来ます。

ある名前に対する正式名はひとつしかありませんから、CNAMEレコードはひとつしか指定できません。そして、キャッシュDNSサーバはCNAME応答を受け取った場合、進行中の名前解決をいったん保留にして受け取った正式名に対する名前解決を実行し、その応答をユーザに返します。

referral/委任

問い合わせに対し「その名前は他のサーバが知っている」、つまり、他の権威DNSサーバを参照させるための応答が、referral(委任)です。

referralはDNSの委任の仕組みを実現するのに使われていますので、ここでは「referral/委任」としています。言い換えるとDNSでは「referral」という応答を使って、子ゾーンへの「委任」を問い合わせ元のキャッシュDNSサーバに示す、と考えるのがわかりやすいと思います。

この「他のサーバ」を示すために、DNSではNSレコードが使われます。今回発表された攻撃手法のうち「委任インジェクション」と呼ばれている方法では、この「referral」の偽造応答を用いて、偽の権威サーバに名前解決を誘導することになります。

次回へ続く

今回は、今回の攻撃手法について理解するための前提知識として、権威DNSサーバが返す5種類の応答とその意味について説明しました。

ここまでの説明で、(5)のreferral/委任の偽造応答で偽のNSレコードを注入できそうなことは、何となくイメージできたかと思います。しかし、なぜ(1)の通常応答でも偽のNSレコードを注入できるのか、また、(1)の応答や(5)の応答が具体的にどういう形をしていて、どういう条件で毒を注入できるのかについての説明は、もう少し先になります。

次回は、これら5種類の応答を含むDNSメッセージのやりとりが実際にどのような形式になっているかについて、ご紹介する予定です。

最近のエントリ

過去記事

過去記事一覧

IPv6基礎検定

YouTubeチャンネルやってます!