DNSに関するあれこれ
ここでは、DNSに関する基本とDNSキャッシュポイズニングに対する対策を紹介します。
DNSサーバの基本
DNSサーバはコンテンツサーバとキャッシュサーバに分類できます。
・コンテンツサーバ・・・オリジナルのDNS情報を補完するサーバ
・キャッシュサーバ・・・コンテンツサーバから得られたDNS情報を一時的に保管するサーバ
名前解決の問い合わせがあった場合、以下のような流れで、処理を行います。
- クライアントは通常、自組織のキャッシュサーバに再帰的な問い合わせを行う。
- キャッシュサーバは問い合わせを受けて、コンテンツサーバに問い合わせを行う。
- キャッシュサーバはコンテンツサーバから得られたDNS情報をクライアントに返答する。
- それと同時に、DNS情報のコピーを一定期間保存する。
問題点として、コンテンツサーバからの回答は、とくに認証を必要としないことです。つまり本物の回答の前に、偽の回答を返答してしまえば、うそのDNS情報をキャッシュサーバに記憶させることができてしまいます。これを、DNSキャッシュポイズニングといいます。
DNS情報を汚染されたキャッシュサーバに問い合わせをすると、攻撃者が設置した悪意のあるサーバに通信を誘導されます。また、大きなDNS情報を記憶させたうえで、キャッシュサーバに送信元を詐称した問い合わせを行うことで、DNSリフレクション(DNS amp攻撃)が行われます。
DNSサーバを運用する際には、自社が最終ターゲットでないとしても、踏み台にならないように対策が必要になってきます。
DNSレコード
DNSに保存されている名前解決情報尾をDNSレコードと呼び、以下の種類があります。
Aレコード ・・・ホストのIPアドレス(IPv4)情報(例:dns IN A 192.186.0.1)
AAAAレコード ・・・ホストのIPアドレス(IPv6)情報(例:local IN AAAA ::1)
NSレコード ・・・DNSサーバを指定する。(例;IN NS dns.xeample.com)
CNAMEレコード・・・別名を指定する。(例:www IN CNAME dns)
SOAレコード ・・・ドメイン情報(ドメイン名、管理者連絡先、レコードの有効期限など)
PTRレコード ・・・逆引き(IPアドレスからホスト名)に使う。
MXレコード ・・・メールサーバを指定する。メールサーバが複数ある場合は、プレファレンス値の小さいほうを優先する。
TXTレコード ・・・文字情報を書く。様々な用途があり、SPFレコード*1を書く、DKIM*2を署名するなどにも使える。