| SQLインジェクション対策はおすみですか? 開発開始時点からのコンサルティングから、公開済みWebサイトの脆弱性検査、 脆弱性発見後の適切な対策まで |
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)に誘導する。罠サーバーに誘導された後の流れは以下の通り。
(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
java上のDNSのTTL制御は networkaddress.cache.ttl networkaddress.cache.negative.ttl をjava.plolicyファイルで制御する。 プログラマブルには変えられない。 起動オプション(-Dパラメータ)で制御は可能だが、 名前が変わるっぽい。(未検証) ・networkaddress.cache..
- http://www.tokumaru.org/ ×83
- http://www.tokumaru.org/techterm/ ×60
- http://d.hatena.ne.jp/ockeghem/20071126/p1 ×49
- http://d.hatena.ne.jp/ockeghem/ ×38
- http://b.hatena.ne.jp/entry/http://www.tokumaru.or... ×24
- http://www.tokumaru.org/JavaScript/ ×22
- http://yamagata.int21h.jp/d/ ×18
- http://www.saiyasuweb.com/item/Gストリング ×15
- http://yamagata.int21h.jp/d/?date=20071126 ×13
- http://www.hash-c.co.jp/ ×12
- http://www.saiyasuweb.com/ ×10
- http://press.eek.jp/result/gif/gif 検査 ×10
- http://d.hatena.ne.jp/ockeghem/20071126/p3 ×7
- http://d.hatena.ne.jp/ockeghem/20071010/1192009917... ×7
- http://b.hatena.ne.jp/t/dns pinning ×7
- http://tokumaru.org/ ×6
- http://d.hatena.ne.jp/ockeghem/about ×6
- http://d.hatena.ne.jp/teracc/20070908 ×6
- http://d.hatena.ne.jp/ockeghem/20071126 ×5
- http://www.hash-c.co.jp/index.html ×5
- http://a.hatena.ne.jp/harupu/ ×5
- http://labs.ceek.jp/hbnews/list.cgi ×5
- http://b.hatena.ne.jp/entry/http://www.rakuten.co.... ×4
- http://koteitan.seesaa.net/article/95301330.html ×4
- http://www.tokumaru.org/was/ ×4
- http://b.hatena.ne.jp/ockeghem/ ×4
- http://d.hatena.ne.jp/ockeghem/searchdiary?word=XS... ×4
- http://reader.livedoor.com/subscribe/http://www.to... ×3
- http://stressfulangel.cocolog-nifty.com/ ×3
- http://a.hatena.ne.jp/yamagata21/ ×3
- http://b.hatena.ne.jp/keyword/IPアドレス ×3
- http://www.about-reference.com/php/pear_manual/pac... ×3
- http://d.hatena.ne.jp/ockeghem/20071128/p1 ×3
- http://b.hatena.ne.jp/t/SQLインジェクション ×3
- http://buzzurl.jp/entry/http://www.tokumaru.org/d/... ×3
- http://stressfulangel.cocolog-nifty.com/stressful_... ×3
- http://d.hatena.ne.jp/ockeghem/?of=10 ×3
- http://b.hatena.ne.jp/keyword/Flash ×3
- http://search.live.com/results.aspx?q=rebinding&fo... ×3
- http://www.tokumaru.org/JavaScript/index.htm ×3
- http://www.tokumaru.org/techterm/index.html ×3
- http://d.hatena.ne.jp/keyword/Flash ×2
- http://d.hatena.ne.jp/teracc/20070715 ×2
- http://b.hatena.ne.jp/IwamotoTakashi/ ×2
- http://b.hatena.ne.jp/entrylist?sort=hot&of=100&th... ×2
- http://b.hatena.ne.jp/entrylist?sort=hot&of=100&th... ×2
- http://labs.cybozu.co.jp/blog/kazuho/archives/2007... ×2
- http://labs.cybozu.co.jp/blog/takesako/2007/08/lls... ×2
- http://d.hatena.ne.jp/ockeghem/20070502/1178042280... ×2
- http://b.hatena.ne.jp/ockeghem/dns pinning/ ×2
- http://b.hatena.ne.jp/entrylist?sort=hot&of=50&thr... ×2
- http://b.hatena.ne.jp/t/javascript?sort=eid ×2
- http://b.hatena.ne.jp/entry/http://www.cmuj.jp/ind... ×2
- http://fastladder.com/subscribe/http://www.tokumar... ×2
- http://www.yahoogle.jp/yahoo-1-TOKUMARU.html ×2
- http://press.eek.jp/result/アップローダー/画像アップローダー ×2
- http://reader.livedoor.com/ranking/hot.html ×2
- http://b.hatena.ne.jp/entrylist?url=http://&sort=h... ×2
- http://b.hatena.ne.jp/entry/5973225 ×2
- http://a.hatena.ne.jp/mao140/ ×2
- http://b.hatena.ne.jp/entry/6483245 ×2
- http://www.hash-c.co.jp ×1
- http://www.tokumaru.org/index.htm ×1
- http://d.hatena.ne.jp/keyword/Java ×1
- http://d.hatena.ne.jp/ockeghem/searchdiary?word=画像... ×1
- http://buzzurl.jp/user/beckham/top/?&of=0 ×1
- http://labs.cybozu.co.jp/blog/kazuho/archives/2007... ×1
- http://del.icio.us/kunzo ×1
- http://yamagata.int21h.jp/d/?category=ALL;year=200... ×1
- http://koteitan.seesaa.net/ ×1
- http://koteitan.seesaa.net/category/937639-1.html ×1
- http://tinyurl.com/preview.php?num=2flo25 ×1
- http://twitter.com/ockeghem ×1
- http://koteitan.seesaa.net/archives/200805-1.html ×1
- http://stressfulangel.cocolog-nifty.com/stressful_... ×1
- http://clip.nifty.com/entry/a59bf3224009c0bff718ff... ×1
- http://www.math.sansu.org/u/diary/ ×1
- http://b.hatena.ne.jp/t/validation ×1
- http://del.icio.us/nicpig/DNSRebinding ×1
- http://scuttle.cre.jp/ ×1
- http://buzzurl.jp/entry/http://www.tokumaru.org/d/... ×1
- http://www.tokumaru.org/d/20071126.html ×1
- http://dora.koka-in.org/scuttle/bookmarks.php/haru... ×1
- http://d.hatena.ne.jp/ockeghem/20071201/p1 ×1
- http://del.icio.us/kunzo/security ×1
- http://d.hatena.ne.jp/ockeghem/?of=15 ×1
- http://stock.paslog.jp/article/771500.html ×1
- http://labs.ceek.jp/hbnews/list.cgi?k=5 ×1
- http://search.live.com/results.aspx?q=rebinding ×1
- http://b.hatena.ne.jp/t?tag=dns&of=150&sort=hot&th... ×1
- http://b.hatena.ne.jp/thisisapenpen/ ×1
- http://d.hatena.ne.jp/ockeghem/20071021/1192986523... ×1
- http://stressfulangel.cocolog-nifty.com/stressful_... ×1
- http://search.live.com/results.aspx?q=same-origin ... ×1
- http://d.hatena.ne.jp/ockeghem/searchdiary?word=文字... ×1
- http://www.s-48.net/c/メロン ×1
- http://d.hatena.ne.jp/keyword/DNS ×1
- http://labs.ceek.jp/hbnews/list.cgi?k=5&p=2&c=1 ×1
- http://r.hatena.ne.jp/pero1/セキュリティ/?of=30 ×1
- http://b.hatena.ne.jp/tsupo/Internet/XSS/?mode=det... ×1
- DNS Rebinding ×70 / dns rebinding ×35 / DNS rebinding ×15 / キーワード不明 ×9 / 徳丸浩 ×6 / Java DNS Rebinding ×6 / networkaddress.cache.ttl ×6 / mod_imagefight ×5 / "DNS Rebinding" ×5 / javascript break ×4 / rebinding ×4 / http://www.tokumaru.org/d/20071126.html ×4 / ieee 754 整数 ×2 / SQLインジェクション 対策 ×2 / javascript return break ×2 / インジェクション 対策 java ×2 / oracle 暗黙の型変換 ×2 / DNS TTL ×2 / 画像 XSS ×2 / インジェクション DNS ×2 / 検証 SQL 入力 ×2 / ieee754 ×2 / 画像 javascript xss ×2 / sql update perl バイナリ ×2 / ラベル付きbreak文 ×2 / DNS 金床 ×2 / php 画像 攻撃 例 ×2 / Java DNS rebinding ×2 / MDB2 quote sqlインジェクション ×2 / DNS pinning TTL ×2 / java dns ttl ×2 / 符号なし IEEE754 ×1 / 金床 DNS Rebinding ×1 / pg_escape_string ×1 / javascript switch 範囲 ×1 / perl http response 返却 ×1 / javascript 画像 範囲 ×1 / ローカル ネットワーク 攻撃 ×1 / 画像XSS ×1 / 2007 6 dns 攻撃 ×1 / dns-rebinding ×1 / Oracle SQLインジェクション エスケープ ×1 / xss 検証方法 ×1 / dns javascript ×1 / mysql 数値をクオートする ×1 / DNS rebinding 攻撃 ×1 / サニタイズ ファイル 無効化 ×1 / Javascript サニタイズ ×1 / SQL 型変換 ×1 / SQL文 クォート ×1 / xss アップローダ 画像 ×1 / Java Socket プライベートアドレス ×1 / javascript forループを抜ける break ×1 / dns プライベートアドレス 返す ×1 / Javascript 入力文字種 指定 ×1 / XSS 入力検証 ×1 / XSS セミコロン ×1 / 今日の用語 ×1 / javascriptでサニタイズ ×1 / java dns ×1 / "論理名" "物理名" DB ×1 / DNS TTL 短く ×1 / Javascript form action submit 別ドメイン ×1 / break ×1 / JavaScript break ×1 / xss テスト ×1 / same origin policy ×1 / sql文 倍数 オラクル ×1 / javascript 入力値 検査 ×1 / DNS rebinding 金床 ×1 / gif xss ×1 / anti-xss ×1 / java networkaddress.cache.ttl ×1 / 浮動小数点 IEEE 範囲 ×1 / xss 画像 ×1 / try catch 抜ける php ×1 / SQL 暗黙の型変換 ×1 / oracle 予約語 エスケープ ×1 / Oracle 暗黙 型変換 ×1 / sql 桁数チェック ×1 / SQLインジェクション 実験 ×1 / httpヘッダインジェクション 検査方法 ×1 / web アプリケーション 入力値 チェック ×1 / Oracle 文字列リテラル 型 ×1 / networkaddress.cache.negative.ttl ×1 / sql エスケープ "&" ×1 / DNS レスポンス TTL ×1 / javascript XSS ×1 / gif XSS tokumaru ×1 / ORA-01722 ×1 / rebindingとは ×1 / Java DNS ×1 / sqlインジェクション php oracle ×1 / javascript 入力チェック 桁数 ×1 / SQL リテラル N' ×1 / hidden値 検証 ×1 / SQL select リテラル文字列 ×1 / perl SQLインジェクション 回避 ×1 / XSS対策 ×1 / javascript dns ×1
| SQLインジェクション対策はおすみですか? 開発開始時点からのコンサルティングから、公開済みWebサイトの脆弱性検査、 脆弱性発見後の適切な対策まで |
(7) で レスポンスを TTL=1日にしてしまうと、(10) の情報の送信先が 172.21.21.11 になってしまう気がしないでもありませんw (サブドメインを使い分けるか、TTL を短くするかしないとダメかも知れませんね〜。)
そこはサブドメ使い分けでしょう(゜д゜)
なんならまったく別ドメでもおk(゜д゜)
金床さんからもコメントありますが、データの戻しにform.submit()を使うという前提であれば、別ドメインでもいいし、IPアドレスでもいいですよね。Formのaction先はsame orign policyの制約を受けませんので。
図と説明が、罠サーバー(tokumaru.org)宛になってたのでツッコミ入れてみただけです。(^-^;
(10)の中で、罠サーバーにIPアドレスを付記しました。
お手数をおかけしました〜。ありがとうございます♪