脅かされるDNSの安全性:DNSSEC再入門(1)(1/2 ページ)
インターネットの重要な基盤技術の1つであるDNSに対して新たな攻撃手法が公開され、その安全性が脅かされている。DNSにセキュリティ機能を提供するための技術であり、普及が進んでいるDNSSECについて、仕組みと運用方法を紹介する。(編集部)
インターネットを支えるDNSとは
インターネット上では、通信するコンピュータを特定するためにIPアドレスを使用する。しかし、数字のみで構成されるIPアドレスは人間にとって扱いづらいため、覚えやすいように名前を付ける方法が考案された。
このとき、人間が使用する名前(ドメイン名)とコンピュータが使用するIPアドレスを対応付ける仕組みが必要になる。この役割を担うのが、ご存じDNS(Domain Name System)である。
DNSSEC導入の背景——カミンスキー型攻撃
DNSは、インターネットの爆発的な普及に伴うドメイン名利用の急速な拡大にも対応し、インターネットにとって欠かせない重要な基盤技術の1つとなっている。しかし、その基本が「送られてきた情報を信用して受け取る」ことにあるため、悪意のある偽の情報も、条件がそろうと受け取ってしまうことがある。
この、DNSのプロトコルが持つ弱点を突いた攻撃の代表格が「DNSキャッシュポイズニング」であり、その攻撃の成功率を飛躍的に高める方法として注目を集めたのが「カミンスキー型攻撃(セキュリティ研究家のダン・カミンスキー氏によって考案された手法)」である。
注:カミンスキー氏の考案した手法は当時「カミンスキーアタック」と呼ばれたが、カミンスキー氏自身は手法を発見しただけであり攻撃を行ったわけではないので、この呼称は適切ではない。従って、以降は「カミンスキー型」もしくは「カミンスキー型攻撃」という呼称を使用することにする。
カミンスキー型攻撃の成功率の高さはインターネット関係者に衝撃を与え、大きな問題として扱われた。そこで話題になったのが、いままで信用してそのまま受け取っていた情報を、受け取り側でその正当性を検証できるようにする仕組みの必要性である。
誤解のないように付け加えておけば、DNSキャッシュポイズニングは、キャッシュDNSサーバをきちんと管理・運用することでその成功率を大幅に下げることができる。しかし、100%防ぐことは難しい。DNSの重要性を考えると、少しでもリスクがあるのなら、その対策を用意する必要がある。
本稿での主要テーマである「DNSSEC(Domain Name System Security Extensions:DNSセキュリティ拡張)」は、そうした状況の中で選択された仕組みである。現在のDNSの機能を拡張することで、各ネームサーバが協調し、必要に応じて受け取り側でその正当性を検証できるようにする仕組みを実現する。
すでにいくつかのトップレベルドメイン名で導入され、来年の1月からは日本のドメイン名である“.JP”でも導入される「DNSSEC」について、今後何回かの連載を通じて説明していく。
関連記事:
カミンスキー氏が発表したDNSアタック手法と対策例(前編)
http://www.atmarkit.co.jp/fsecurity/special/130dnspoisoning1/dnspoisoning01.html
DNSキャッシュポイズニングの原因・対策・その理由(後編)
http://www.atmarkit.co.jp/fsecurity/special/131dnspoisoning2/dnspoisoning01.html
DNSの仕組みの簡単な復習
DNSの仕組みを把握するためには、役割の異なる3種類のプレイヤーが存在することを理解する必要がある。その3種類とは、
- スタブリゾルバ(クライアント)
- キャッシュDNSサーバ(フルリゾルバ)
- 権威DNSサーバ
である。
ユーザーのコンピュータで動作するスタブリゾルバが、ユーザーが指定するドメイン名、例えば「www.example.jpのIPアドレスを知りたい」というリクエストを、キャッシュDNSサーバに対して送出する。このリクエストのことを「DNSクエリ」(または単にクエリ)と呼ぶ。
クエリを受けたキャッシュDNSサーバは、まず自身が持っているキャッシュから、要求された情報を探す。キャッシュ内に情報がなければ、権威DNSサーバに対してクエリを送出する。
このとき、キャッシュDNSサーバの持つルートサーバの情報を起点に、上位の権威DNSサーバから順に検索を行う。この動作を「反復検索」と呼ぶ。最終的な情報を持っている権威DNSサーバの応答には「権威ある応答(Authoritative Answer:AA)ビット」と呼ばれる情報があり、このビットがセットされている応答を受け取ると検索を終了する。
次に、キャッシュDNSサーバの動作について詳しく説明する。
- スタブリゾルバが、キャッシュDNSサーバに対して「www.example.jpのIPアドレスを知りたい」というクエリを送出する
- キャッシュDNSサーバは、ルートサーバに対して「www.example.jpのIPアドレスを知りたい」というクエリを送出する
- ルートサーバは、“.jp”の委任情報を保持しているため、「委任先であるJP DNSサーバに聞くように」と応答する(キャッシュDNSサーバは、この内容をキャッシュする)
- キャッシュDNSサーバは、ルートサーバからの応答を受けて、JP DNSサーバに対して「www.example.jpのIPアドレスを知りたい」というクエリを送出する
- JP DNSサーバは、“example.jp”の委任情報を保持しているため、「委任先であるexample.jpの権威DNSサーバに聞くように」と応答する(キャッシュDNSサーバは、この内容をキャッシュする)
- キャッシュDNSサーバは、JP DNSサーバからの応答を受けてexample.jpの権威DNSサーバに対して「www.example.jpのIPアドレスを知りたい」というクエリを送出する
- example.jpの権威DNSサーバは、自身が管理しているゾーンに当該ドメイン名の情報があるため、権威フラグを立てて要求のあったIPアドレスの応答を行う(キャッシュDNSサーバは、この内容をキャッシュする)
- キャッシュDNSサーバは、応答にあるAAビットを見て反復検索を終了し、スタブリゾルバに応答する
この動作の中で、注目していただきたいのは以下の点である。
- DNSでは、クエリと応答で同じ形式(フォーマット)が使われている
- キャッシュDNSサーバは、手間の掛かる反復検索の回数を減らすため、検索結果についてキャッシュを行う
- キャッシュDNSサーバは反復検索の過程で、どの階層の権威DNSサーバに対しても同じドメイン名のクエリを送出する
- 権威DNSサーバは、自身が管理するゾーンに当該ドメイン名の情報があるときにはAAビットをセットしてそれを答え、下位ドメイン名に対する委任情報を保持していればそれを答える。
- キャッシュDNSサーバは、応答にAAビットがセットされているか否かで検索処理を継続するか否かを決定する
いかがだろうか。特に、上の5項目はDNSの仕組みを理解するために重要な知識となる。
余談だが、反復検索の過程で上位の権威DNSサーバが答える「委任先の権威DNSサーバ情報」は、委任先が上位のドメイン名管理者に申請したものが使われることになる。ドメイン名を登録し運用する際に、レジストリへ権威DNSサーバ情報を登録することは、この名前検索を確実に行えるようにするうえで必要不可欠なことである。
Copyright © ITmedia, Inc. All Rights Reserved.