DNSとは
DNSとは、Domain Name Systemの略で、ドメインを管理するシステムのことです。
ドメインとは、ホスト名の後ろについている文字列のこと。
googleのURLは「https://www.google.com」ですが、
wwwはホスト(コンピュータ名・サーバ名など、特定の一つ)で、google.comがドメイン名です。
ホストとドメイン名を合わせた部分をFQDNと言います。
ホストにはサーバ名を指定するので、メールサーバであれば、mailなどになります。
アクセスする時には、IPアドレスをもとに接続しますが、ただの数字の羅列では中々人が覚えられません。
なので、ドメインをアクセスすることでサイトにアクセスできるようにしました。
この時、ドメインをIPアドレスに変換するのがDNSです。
DNSとhostsの違い
hostsというテキストファイルに、ドメイン名とIPアドレスの対応表を記載し、各PCに保管しておくことで対応する方法もあります。
しかし、hostsファイルでの運用では、ドメイン名が変わるたびに変更が必要など大変です。
これに対し、ユーザはDNSサーバに問い合わせることで、IPアドレスを教えてもらう方法がDNSです。
これを名前解決といいます。
例えば、googleならgoogleのドメインに対応するDNSサーバ、AmazonならAmazonのドメインに対応するDNSサーバといった具合に、ドメインごとにDNSサーバを持ちます。
ゾーンファイル
DNSサーバは各ドメインに存在し、自分のドメイン配下にいるサーバのIPアドレスを管理します。
これをゾーン情報と言います。
レコード一覧
レコード名 | 内容 |
Aレコード | IPv4との紐付け。 例:10.10.10.0 |
AAAレコード(読み方:クァットAレコード) | IPv6との紐付け 例:2404:6800:4004:80f::2004 |
MXレコード | メールサーバとの紐付け 例:mail.amazon.co.jp |
CNAMEレコード | ドメイン名に対する正式名を表すドメイン名を紐付け ドメイン名に紐づけた別名を記載しする。 |
TXTレコード | ドメイン名にコメントがつけられる。 SPFレコードもTXTレコード。 |
DNSKEY | DNSSECで用いる署名鍵の公開鍵情報を記載。 DNSSEC:DNSサーバからの応答が正当化どうかを検証するため、サーバの秘密鍵で暗号化したディジタル署名をつける規格。クライアントは公開鍵で復号することで検証する。 |
DNS構造
DNSは階層構造になっていて、一番上にルートと呼ばれるサーバがあります。
ルートの下には、ドメインを逆にした順番で管理DNSが存在しており、それぞれの配下のサーバ情報を管理しています。
名前解決のフロー
クライアントからの問い合わせを受けるDNSサーバを、キャッシュDNSサーバと言います。
一度名前解決したことがあるドメインのIPアドレスが聞かれた場合は、一定期間保持しているキャッシュから返します。
一度も問い合わせを受けたことがなく、キャッシュに情報が存在しないドメインのIPアドレスを問い合わせられた場合は、各ドメインの権威DNSサーバに問い合わせられます。
クライアントからキャッシュDNSサーバに「このサイトドメインのIPアドレスを教えて!」と依頼が来たら、まずルートDNSサーバに下部ドメインのDNSサーバのIPアドレスを問い合わせます。
ルートDNSサーバからの応答をもとに、キャッシュDNSサーバは下部ドメインのDNSサーバから順に問い合わせ、最終的にFQDNの名前解決をします。
クライアント⇆キャッシュDNSサーバのやりとりを再帰的問い合わせと言います。
また、キャッシュDNSサーバ⇆権威DNSサーバのやりとりを反復的問い合わせと言います。
DNS関係の攻撃
DNSキャッシュポイズニング
攻撃者がキャッシュDNSサーバに偽のDNS情報を送り込むことで、攻撃者のサーバにアクセスさせたり、キャッシュDNSサーバの機能を停止させる攻撃。
攻撃方法
- キャッシュDNSサーバになりすましたいホストのIPアドレスを問い合わせる
- キャッシュDNSサーバは権威サーバに反復的問い合わせをする
- 権威DNSサーバから返答が返ってくる前に、DNS情報をキャッシュDNSサーバに送ることで攻撃者のサーバにアクセスさせる
対策
権威サーバにアクセスさせないよう、キャッシュの保持期間(TTL)を長く設定する。
カミンスキー攻撃
DNSキャッシュポイズニングの新たな攻撃方法。
キャッシュDNSサーバにドメインは存在するが、ホストは存在しないFQDNの名前解決を依頼することで、必ず権威DNSサーバに問い合わせさせる方法です。
TTLを長くしても対策できません。
対策としては、DNSが通信で使うUDPポート番号を固定ではなくランダムに選択して通信することで、そもそもDNSサーバにアクセスできないようにします。
Dos・DDos攻撃
Webサイトなどのサーバーが処理できないほどの大量のアクセス要求を一斉に送りつけることで、サービス停止に追い込むサーバー攻撃です。
Dos攻撃は1つのIPアドレスから攻撃するのに対し、DDos攻撃は複数のIPアドレスから分散的に攻撃をします。
そのため、一般的に、DDos攻撃の方が特定が困難です。
Dos攻撃の対策としては、同IPアドレスからのアクセスを制限する、特定の国からのアクセスを遮断するなどがあります。
DNSamp攻撃(DNSリフレクター攻撃)
送信元IPアドレスを攻撃対象のIPアドレスに偽装した問い合わせを、大量にDNSサーバに送ることで、大量の応答が攻撃対象のIPアドレスに届いてしまう攻撃です。
DDos攻撃の一種です。
DNSサーバが踏み台にされることが原因。
対策としては、DNサーバをキャッシュDNSサーバと権威DNSサーバに分離させ、インターネット側からキャッシュサーバに問い合わせできなくなるようにするなどがある。
キャッシュDNSサーバ:ネットワーク内のDNS照会に対応するサーバ。
権威DNSサーバ:広く外部からの問い合わせに応答する責務があるサーバ。
権威DNSサーバはインターネットから切り離せないが、キャッシュDNSサーバはインターネット上にある必要はない。
権威DNSサーバはインターネット全体に公開しなければならないサーバ。
キャッシュDNSサーバがインターネットに接続されていることで、インターネットからの自由なDNS照会が可能になってしまう。これが踏み台にされる原因になっている。