ソースポートランダマイゼーションとは何ですか?DNS Tips

ソースポートランダマイゼーションとその効果について解説する。

» 2015年01月06日 18時00分 公開

 ソースポートランダマイゼーションとは、クエリごとに、フルリゾルバ(いわゆるキャッシュDNSサーバー)が権威DNSサーバーに送るクエリパケットのソースポート番号をランダムに変化させることである。

 DNSキャッシュポイズニング(キャッシュ汚染)攻撃を防止するために、フルリゾルバはサーバーに送ったクエリを記録しており、クエリに対応するレスポンス以外を捨てる。図1に、DNSクエリ/レスポンスパケットフォーマットを示す。確認する情報は、権威DNSサーバーのアドレス(図1の「Auth server」)、ポート(53)、フルリゾルバのアドレス(図1の「FullResolver」、通常は1つ)、フルリゾルバのポート番号(図1の「f_source」)、クエリID(16ビット長、図1の「QID」)、クエスチョンセクションの内容(クエリ名、タイプ、クラス(図1の「qname/type」))である。

図1 DNSクエリ/レスポンスパケット

 レスポンスを推定して偽装応答を注入する場合、上記6つのパラメーターを推定する必要がある。権威DNSサーバーのアドレス数をNとし、権威DNSサーバーのポートは53固定で1、フルリゾルバのアドレス数は通常1、フルリゾルバのポート番号が固定ならばポート番号数1、クエリIDの取り得る数は 216の65536、問い合わせ内容を知っていればクエリセクションも分かるために既知であると仮定すると、推定する必要のある取り得る数はN×65536 となる。

 すると一度の試行による攻撃成功確率は 1÷(N×65536) となるが、推定には全てを試すという解決策(いわゆる「総当たり攻撃」)があり、N×65536回の試行を行うと確実に注入が成功することになる。現在のコンピューターやネットワークの処理能力では100万パケット程度の生成は容易であるため、攻撃は容易に成立する。

 ここで、取り得る数を増やせるパラメーターはないか考えると、先ほど固定としていたフルリゾルバのポート番号が16ビットある。つまり、クエリごとにポート番号を変更することで攻撃成功確率を下げることができる。

 ポート番号には使いにくいもの(0〜1023番)があるため、おおよそ6万4000程度の範囲を取り得るとすると、ポート番号をランダムにすることで一度の試行による攻撃成功確率を 1÷(N×65536×64000) にできる。毎秒100万回の試行を行っても、全ての場合を試すには N×65536×64000÷1000000=約4194×N秒かかることになり、その間には正当なレスポンスが戻ってきている。そのため、ソースポートランダマイゼーションで攻撃成功確率を下げることができる。

藤原 和典(ふじわら かずのり)

所属:株式会社日本レジストリサービス(JPRS) 技術研究部

1992年より早稲田大学情報科学研究教育センターにて、助手として早稲田大学の研究教育系ネットワーク構築・運用にたずさわる。2002年にJPRS入社。DNS及び関連する技術の調査・研究、IETFでの標準化活動に従事。

著書・執筆:「ツールとしてのUNIX」(サイエンス社、深澤良彰編著、梅沢功、小野康一、落合大、藤原和典共著、1993年4月、ISBN4-7819-0700-8)、RFC 5483、RFC 5504、RFC 5825、RFC 6116、RFC 6856、RFC 6857。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。