DNSキャッシュポイズニング
DNSキャッシュポイズニングとは
キャッシュDNSサーバーへ偽の情報を登録し、偽のサイトへ誘導する攻撃手法。
手順
① 攻撃者はキャッシュDNSサーバーへqiita.comのIPは何かと問い合わせる。
② キャッシュDNSサーバーはコンテンツDNSサーバーへqiita.comのIPを問い合わせる。
③攻撃者はコンテンツDNSサーバーのフリをしてキャッシュDNSサーバーに
偽のIPアドレスを応答する
キャッシュDNSサーバーはもし、問い合わせが行われたドメインのIPアドレスがキャッシュされていた場合にそのキャッシュ情報からIPアドレスの応答を返すという性質がある。
これにより攻撃者はキャッシュDNSサーバーに偽のIPアドレスをキャッシュしたため、もしqiita.comにアクセスしようとしても別の偽サイトに飛ばされてしまう事となる。
原因
DNSは先に応答した情報を信じる仕様なので、それを悪用した攻撃手法である。
DNSはトランザクションIDとポート番号で信頼性を検証しているがトランザクションIDは推測されやすいのと、ポート番号はポートスキャンなどにより特定できてしまうためこのような攻撃が可能になる。
対策
・オープンリゾルバにしない。
不特定多数、外部からの要求を受け付けないようにすることによって、攻撃者を減らすことができる。
・ポート番号をランダム化
先ほども記述したようにDNSはトランザクションIDとポート番号で信頼性を検証しているため、ポート番号をランダムにすることにより信頼性の検証に失敗させることができる。
・キャッシュ時間(TTL)を長くする。
たとえば、キャッシュ時間を24時間にしてしまえば正規のユーザーが正規の情報をキャッシュした場合24時間はIPアドレスがキャッシュされているのでキャッシュDNSサーバーはコンテンツDNSサーバーに問い合わせを行わないため既にあるキャッシュ情報を応答する。
これにより攻撃が無効になる。
※長くしすぎるとホスト先のIPアドレスが変更された場合にアクセスができなくて、トラブルが発生する可能性がある。