[PR]小規模ECサイトに最適なWAF、SiteGuard Lite
徳丸浩の日記
2010年04月05日
_JavaアプレットのDNSリバインディングはJRE側で対策済みだった
Black Hat Japan 2007における金床氏のプレゼンテーションや金床本で、Javaアプレットに対するDNSリバインディングの手法が説明されている。ここしばらく、その追試を行っていた。結論としては、金床氏の方法にはJRE側で対策がとられていたので報告する。
金床氏が報告しているDNSリバインディングの手法とは以下のようなものだ(金床本に説明されている方法)。
- 被害者のユーザにワナのページをPROXY経由で閲覧させる
- ワナのドメイン(FQDN)に対するIPアドレスを変更する
- ワナページ上で数秒~数十秒のちにJavaScriptによりJavaアプレット用のHTMLをレンダリングする
- JREがアプレットをPROXY経由で*1ダウンロードする
- アプレットのダウンロード時点で既にDNSレコードは書き換わっているが、PROXYがDNSキャッシュしているため、アプレットは正常にダウンロードされる
- アプレットからワナサイトのFQDNの任意のポートに対してSocket通信する。
- 既にIPアドレスは書き換わっているので、プライベートアドレスに対して任意のSocket通信ができることになる。
このように、攻撃が成立すればとても凶悪な攻撃となるのだが、最近のJREでは以下の方法で対策されているようだ。
- アプレットがPROXY経由でダウンロードされた場合、アプレットからのSocket通信は全てクロスドメイン通信と扱われる
このような挙動に変わったバージョンを調べたところ、Java SE 6 update 3以降であることが分かった*2。すなわち、Javaアプレットの金床方式によるDNSリバインディングが成立するバージョンは以下の通りである。
- J2SE1.4.xの全てのアップデート
- J2SE5.0の全てのアップデート
- Java SE 6のUpdate2以前
そして、Java SE6 Update3以降で、クロスドメイン通信になった場合の挙動は、JREのバージョンにより異なる。Java SE 6 update 10より前のバージョン(Update3~7)だと、Socketでダイレクトにアクセスしようとするとエラーになる。一方、Java SE 6 update 10以降のバージョンでは、アクセス先のcrossdomain.xmlを参照して、その内容に従う。このあたりの挙動は、「次世代 Java(TM) Plug-In テクノロジのリリースノート (JDK 6u10)」を参照されたい。
一方、アプレットが直に(PROXYを経由せずに)ダウンロードされた場合は、アプレットの置かれたFQDNに対してSocketによる任意ポートへの通信が可能だ。この場合は、DNSリバインディングが懸念されるところであるが、Javaの強固なDNS Pinningにより、アプレットダウンロード時のIPアドレスが永続的に保持されるので、DNSリバインディング攻撃はできない。
したがって、金床氏のプレゼンテーション資料には、Java版DNSリバインディング対策が色々書かれているが、その後Java側で対策がとられたことを考慮すると、ユーザが取るべき最善の対策は以下だろう*3。
- JREを最新のバージョンにアップデートする
J2SE5.0以前のバージョンは既にEOLになっているし、DNSリバインディング対策もとられていないことから、使うべきではない。
また、Socketクラスではなく、URLクラス等HTTP系のクラスを使う場合は、PROXY経由の有無にかかわらず元FQDNとの通信は可能である。URLクラスを使う場合は、アプレットダウンロード時の設定に従い、PROXY経由となるか否かが決まる。URLクラスで、PROXY経由しない場合は、JavaのDNS Pinningが有効となり、DNSリバインディングはできない。一方、PROXY経由の場合は、PROXY側のDNS Pinningが問題となる。PROXYによるDNSリバインディング対策については稿を改めて説明する。
*1 Javaの設定にもよるがデフォルトはブラウザの設定をそのまま利用するので、PROXY経由となる
*2 Java SE 6 update 3がリリースされたのが2007年10月3日、金床氏のBHJでのプレゼンテーションが2007年10月25日だったので、BHJのプレゼンテーション時点でJRE側の対策がなされていたことになる。ただし、update 3のリリースノートを読んでも、このような対策がなされていることは読み取れなかった。おそらく金床氏もupdate 3で対策されたとは明確には分からなかったのだろう。金床氏のJavaアプレットによるDNSリバインディングのデモページには「Does not work on JRE1.6.0_03 or later」と明記されている。
*3 今時Javaアプレットなど使わないというのであれば、あわせてJavaアプレット(プラグイン)を無効にするというのもあり。その場合もJREのバージョンは最新にすべきだ。
- https://www.google.co.jp/ ×360
- https://www.google.com/ ×12
- http://www.tokumaru.org/ ×7
- http://kjunichi.cocolog-nifty.com/misc/ ×4
- https://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&... ×4
- http://xl.co.id.pandastats.net/robots.txt ×2
- https://www.google.co.jp/search?q=Java applet プロキシ... ×1
- https://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&... ×1
- https://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&... ×1
- https://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&... ×1
- https://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&... ×1
- https://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&... ×1
- https://www.google.com.tw/ ×1
- http://ysearch.lunascape.jp/Search/Web?keyword=ソケッ... ×1
- http://www1.tokumaru.org/d/20100329.html ×1
- http://www.askapache.com/ ×1
- http://treatmentans.ru/robots.txt ×1
- http://search.smt.docomo.ne.jp/result?search_box=j... ×1
- http://search.fenrir-inc.com/?q=java crossdomain.x... ×1
- http://search.fenrir-inc.com/?hl=ja&channel=sleipn... ×1
- http://search.azby.fmworld.net/websearch/search?se... ×1
- http://pendal.ru/robots.txt ×1
- http://dewgen.elaphblog.com/robots.txt ×1
- http://cscships.hitachi-solutions.co.jp/cscweb/UI/... ×1
- http://c7706742.pixnet.net/robots.txt ×1
- java dns ×4 / アプレット httpsだと成功 ×2 / javaアプレット dns ×2 / FQDN java ×2 / dns applet ×1 / java dns キャッシュ ×1 / java dns プロキシ ×1 / java applet 遅い dns ×1 / javaアプレット プロキシ ×1 / javaアプレット dns proxy ×1 / java proxy経由 dns ×1 / dns url java 動かない ×1 / crossdomain applet ×1 / Java DNS設定 ×1 / jre ssl 遅い ×1 / DNSリバインディング アプレット ×1 / 金床氏 徳丸 ×1 / 金床ぷらぐいん ×1 / JAVA SOCKET FQDN ×1 / ひろしの日記のダウンロード ×1 / applet proxy ×1
[PR]小規模ECサイトに最適なWAF、SiteGuard Lite
HASHコンサルティング株式会社
最近の記事
- 2011年08月30日
- 1. RSSフィードをリダイレクトします
- 2011年07月01日
- 1.
- 2011年03月29日
- 1. PDO/MySQL(Windows版)の文字エンコーディング指定の不具合原因
- 2011年03月22日
- 1. PHP5.3.6からPDOの文字エンコーディング指定が可能となったがWindows版では不具合(脆弱性)あり
- 2011年01月27日
- 1. CSRF対策のトークンをワンタイムにしたら意図に反して脆弱になった実装例
- 2011年01月04日
- 1. escapeshellcmdの危険な実例
- 2011年01月01日
- 1. PHPのescapeshellcmdの危険性
- 2010年10月03日
- 1. 問題点の概要
- 2010年09月27日
- 1. 文字コードに起因する脆弱性を防ぐ「やや安全な」php.ini設定
- 2010年07月25日
- 1. ツッコミSPAM対策で、ツッコミ抜きのRSSフィードを用意しました
- 2010年07月01日
- 1. ぼくがPDOを採用しなかったわけ(Shift_JISによるSQLインジェクション)
- 2010年04月06日
- 1. PROXY(プロキシ)経由でのDNSリバインディングと対策
- 2010年04月05日
- 1. JavaアプレットのDNSリバインディングはJRE側で対策済みだった
- 2010年03月29日
- 1. DNSリバインディングによる無線LANパスフレーズの読み出しに成功
- 2010年03月25日
- 1. DNSリバインディングによるルータへの侵入実験
- 2010年02月22日
- 1. ケータイtwitter(twtr.jp)においてDNS Rebinding攻撃に対する脆弱性を発見・通報し、即座に修正された
- 2010年02月12日
- 1. かんたんログイン手法の脆弱性に対する責任は誰にあるのか
- 2010年01月18日
- 1. iモードブラウザ2.0のXMLHttpRequestでPOSTデータの扱いが困難になった
- 2009年10月19日
- 1. quoteメソッドの数値データ対応を検証する
- 2009年10月14日
- 1. htmlspecialchars/htmlentitiesはBMP外の文字を正しく扱えない
- 2009年10月09日
- 1. htmlspecialcharsのShift_JISチェック漏れによるXSS回避策
- 2009年09月30日
- 1. htmlspecialcharsは不正な文字エンコーディングをどこまでチェックするか
- 2009年09月24日
- 1. SQLの暗黙の型変換はワナがいっぱい
- 2009年09月18日
- 1. 文字エンコーディングバリデーションは自動化が望ましい
- 2009年09月14日
- 1. 既にあたり前になりつつある文字エンコーディングバリデーション
- 2009年08月05日
- 1. 携帯JavaScriptとXSSの組み合わせによる「かんたんログイン」なりすましの可能性
- 2009年03月28日
- 1. IPAは脆弱性の呼び方を統一して欲しい
- 2009年03月27日
- 2009年03月11日
- 1. U+00A5を用いたXSSの可能性
- 2008年12月22日
- 1. JavaとMySQLの組み合わせでUnicodeのU+00A5を用いたSQLインジェクションの可能性
FYIヽ(´ー`)ノ
http://sunsolve.sun.com/search/document.do?assetkey=1-26-103078-1
http://www.jumperz.net/index.php?i=6&threadId=33671191642815452
>おそらく金床氏もupdate 3で対策されたとは明確には分からなかったのだろう。
いえいえ、ちゃんとわかってましたYo!当日のプレゼンでは口頭で説明しました。BHはプレゼン資料提出がかなり早いんで訂正できなかったんですよ。
金床さん、コメントいただきありがとうございました。
sunのドキュメントはまだきちんと読めていないので、読ませて頂きたいと思います。
ただ、生Socketが使えるDNSリバインディングは、プラグイン側の問題として対処が進んでいるようですね。