トップ «前の日記(2007-09-30) 最新 次の日記(2007-12-01)» 編集
過去の日記

2007-11-26 今日の用語特別版

DNS Rebinding

楽天テクノロジーカンファレンス2007にて、カーネギーメロン大学日本校武田圭史先生の講演を聴講して、DNS Rebindingの説明がとても分かりやすかったので、ここに再現を試みる(文責は徳丸にある)。

DNS Rebindingとは

DNS Rebindingは、DNSの返すIPアドレスを巧妙に変化させることにより、JavaScriptやJavaアプレットなどのsame origin policyを破り、インターネットからローカルネットワーク(通常外部からはアクセスできない)などに対してアクセスする手法をいう。

攻撃に必要なもの

攻撃者は、自分のコントロール可能なドメイン名(以下の例ではtokumaru.orgを用いる)を持っているおり、かつそのドメイン名のWebサーバー(以下、罠サーバーと呼ぶ)があること。

攻撃のシナリオ

DNS Rebindingは受動攻撃の一種であり、攻撃者は、攻撃対象にアクセス可能なユーザに対して、メールなどにより罠サーバー(ここでは、tokumaru.org)に誘導する。罠サーバーに誘導された後の流れは以下の通り。

画像の説明
(1)↑tokumaru.org のIPアドレスをDNSに要求
(2)↓210.188.204.136 (TTL=5秒)を返す
(3)↑HTMLコンテンツを要求
(4)↓HTMLコンテンツを返す
(5) 10秒後に、HTML中に埋められたJavaScriptがtokumaru.orgのコンテンツを要求(same origin policyには違反しない)
(6)↑すでにDNSのキャッシュは無効なので、再びtokumaru.org のIPアドレスをDNSに要求
(7)↓今度はプライベートアドレス 172.21.21.11(TTL=1日)を返す
(8)←JavaScriptは、ローカルネットワーク内のWebサーバー(172.21.21.11)にコンテンツを要求する
(9)→ローカルサーバー上のコンテンツが返る
(10)↑form.submit()などを用いて、(9)の情報を罠サーバー(210.188.204.136)に返す

上記のように、DNSのTTLを極端に短く(上記例では5秒)設定することにより、同一ドメイン上のコンテンツを要求する際にDNSサーバーへの問い合わせを再度実行させ、二番目の問い合わせに対しては、攻撃対象(外部からはアクセスできない)のIPアドレスを返すことがミソである。これにより、見かけ上はsame orign policyに抵触することなく、特定のユーザを中継することで、ローカルネットワークなどの資源にアクセスすることができる。

DNS Rebindingについては、金床氏の研究が有名で、Black Hat Japan 2007にて、金床氏の研究が発表された。これによると、JavaアプレットやFLASHのSocketを利用することにより、任意のプロトコルに対しても、ローカルネットワークに対する情報の収集や攻撃などが可能である。 金床氏による、DNS Rebindingのデモページはこちら

対策(DNS Pinningなど)は後で。


tokumaru.orgは単なる例なのに、徳丸浩までなんか悪い奴に見えますね。しまった。

自作コンパイラの部屋 > 用語集 > DNS Rebinding

本日のツッコミ(全6件) [ツッコミを入れる]
yamagata21 (2007-11-26 11:00)

(7) で レスポンスを TTL=1日にしてしまうと、(10) の情報の送信先が 172.21.21.11 になってしまう気がしないでもありませんw (サブドメインを使い分けるか、TTL を短くするかしないとダメかも知れませんね〜。)

金床 (2007-11-26 11:59)

そこはサブドメ使い分けでしょう(゜д゜) <br>なんならまったく別ドメでもおk(゜д゜)

徳丸浩 (2007-11-26 12:28)

金床さんからもコメントありますが、データの戻しにform.submit()を使うという前提であれば、別ドメインでもいいし、IPアドレスでもいいですよね。Formのaction先はsame orign policyの制約を受けませんので。

yamagata21 (2007-11-26 13:15)

図と説明が、罠サーバー(tokumaru.org)宛になってたのでツッコミ入れてみただけです。(^-^;

徳丸浩 (2007-11-26 20:55)

(10)の中で、罠サーバーにIPアドレスを付記しました。

yamagata21 (2007-11-26 23:44)

お手数をおかけしました〜。ありがとうございます♪

本日のTrackBacks(全1件) []
Thief's Guild Blog:DNSキャッシュの制御 (2008-05-01 15:48)

java上のDNSのTTL制御は networkaddress.cache.ttl networkaddress.cache.negative.ttl をjava.plolicyファイルで制御する。 プログラマブルには変えられない。 起動オプション(-Dパラメータ)で制御は可能だが、 名前が変わるっぽい。(未検証) ・networkaddress.cache..


トップ «前の日記(2007-09-30) 最新 次の日記(2007-12-01)» 編集