WebブラウザにおけるDNSプリフェッチの動作

DNS
Published: 2014-05-23

きっかけ

思いつき

 ブラウザに大量のDNSプリフェッチを実施させることで、経路上のNAT箱の送信元ポートを枯渇させ、DoS状態にする。

テスト環境

テスト環境

 DNSプリフェッチが大量に記載されたウェブページを用意します。

 unboundのlocal-zone機能を利用して”local.”に対するDNS問い合わせを自分で答えるようにします。ただし、問い合わせに対して素直に答えてしまうと、NAT装置が速やかにセッションをクローズし、送信元ポートをリリースしてしまう可能性があるので、”local-zone: “local.” deny”としてDNSクエリを破棄するようにします。”[1-70000].local. IN A xxx.xxx.xxx.xxx”をunbound.confに書きたくないという理由もあります。

Chromeの場合

 バージョン 34.0.1847.137 mのchromeでウェブページにアクセスしました。

  • Webページはすんなりと表示されます。
  • プリフェッチによるDNSクエリは、以下のログの通りです。
  • 以下の問い合わせを実施した後は、問い合わせを行いません。
  • プリフェッチするFQDNが上から1,2,3と連番にならないのが面白い。

Firefoxの場合

 バージョン28.0でウェブページにアクセスしました。

  • Webページの表示に少々時間がかかります。
  • プリフェッチによるDNSクエリは、以下のログの通りです。
  • ログ上では途中で問い合わせが止まっているように見えますが、実際の挙動は同じペースでずっとDNS問い合わせを続けます。

IEの場合

 IE11でウェブページにアクセスしました。

  • Webページがなかなか表示されません。IEが応答なしになります。
  • ある程度プリフェッチすると、満足したのかwebページを表示します。
  • 次回以降の読み込みを高速化するためのプリフェッチのせいで、初回の読み込みが大幅に遅延します。
  • プリフェッチによるDNSクエリは、以下のログの通りです。
  • ログ上では途中で問い合わせが止まっていますが、実際の挙動は同じペースでずっとDNS問い合わせを続けます。

結論

 WEBページにアクセスすると一気に70000件のDNS問い合わせが行われることを期待したのですが、そんな馬鹿な実装をしているブラウザはありませんでした。DNSプリフェッチでNAT箱は殺せない模様。  もしかしたら、Safariやoperaだと一気にDNSクエリを投げてくれるのかしら。