<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="rss.css" type="text/css"?>
<rdf:RDF xmlns="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:xhtml="http://www.w3.org/1999/xhtml" xml:lang="ja-JP">
	<channel rdf:about="http://www.tokumaru.org/d/index.rdf">
	<title>徳丸浩の日記</title>
	<link>http://www.tokumaru.org/d/</link>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.tokumaru.org/d/" />
	<description></description>
	<dc:creator>徳丸浩(ockeghem)</dc:creator>
	<dc:rights>Copyright 2010 徳丸浩(ockeghem) &lt;hiroshi2007 [at] tokumaru.org&gt;, copyright of comments by respective authors</dc:rights>
	<items><rdf:Seq>
<rdf:li rdf:resource="http://www.tokumaru.org/d/20100222.html#p01"/>
<rdf:li rdf:resource="http://www.tokumaru.org/d/20100212.html#p01"/>
<rdf:li rdf:resource="http://www.tokumaru.org/d/20100118.html#c10"/>
<rdf:li rdf:resource="http://www.tokumaru.org/d/20100118.html#c09"/>
<rdf:li rdf:resource="http://www.tokumaru.org/d/20100118.html#c08"/>
<rdf:li rdf:resource="http://www.tokumaru.org/d/20100118.html#c07"/>
<rdf:li rdf:resource="http://www.tokumaru.org/d/20100118.html#c06"/>
<rdf:li rdf:resource="http://www.tokumaru.org/d/20100118.html#c05"/>
<rdf:li rdf:resource="http://www.tokumaru.org/d/20100118.html#c04"/>
<rdf:li rdf:resource="http://www.tokumaru.org/d/20100118.html#c03"/>
<rdf:li rdf:resource="http://www.tokumaru.org/d/20100118.html#c02"/>
<rdf:li rdf:resource="http://www.tokumaru.org/d/20100118.html#c01"/>
<rdf:li rdf:resource="http://www.tokumaru.org/d/20100118.html#p02"/>
<rdf:li rdf:resource="http://www.tokumaru.org/d/20100118.html#p01"/>
<rdf:li rdf:resource="http://www.tokumaru.org/d/20090914.html#c13"/>
</rdf:Seq></items>
</channel>
<item rdf:about="http://www.tokumaru.org/d/20100222.html#p01">
<link>http://www.tokumaru.org/d/20100222.html#p01</link>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.tokumaru.org/d/20100222.html#p01" />
<dc:date>2010-02-22T11:54:11+09:00</dc:date>
<title>ケータイtwitter(twtr.jp)においてDNS Rebinding攻撃に対する脆弱性を発見・通報し、即座に修正された</title>
<dc:creator>徳丸浩(ockeghem)</dc:creator>
<description>twitterのケータイ版twtr.jpにおいて、DNS Rebindingによるなりすましを許す脆弱性が発見され、1/15に通報したところ、その日のうちに修正された。以下、その経緯について報告する。 経緯 今年の1月12日に読売新聞の記事が出たのを受けて、現実のサイトはどうなのだろうかと改めて気になった。   　ＮＴＴドコモの携帯電話のうち、インターネット閲覧ソフト「ｉモードブラウザ２・０」を搭載した最新２９機種を通じて、利用者の個人情報を不正取得される恐れのあることが、専門家の指摘で明らかになった。 　同社は携帯サイトの運営者にパスワード認証などの安全対策を呼びかけている。携帯電話の機能が高機能化するにつれ、こうした危険は増しており、利用者も注意が必要になってきた。   [ドコモ携帯、情報流出の恐れ…最新２９機種より引用]    私自身も携帯電話でいくつかのサイトを巡回しており、その一つにtwitter.comの日本の携帯電話向けフロントエンドであるtwtr.jpも含まれる。ご存じのように、twitterは政府要人や有名人も数多く使っているし、twitter.comの画面で確認..</description>
<content:encoded><![CDATA[<h3>ケータイtwitter(twtr.jp)においてDNS Rebinding攻撃に対する脆弱性を発見・通報し、即座に修正された</h3><p>
<p>twitterのケータイ版twtr.jpにおいて、DNS Rebindingによるなりすましを許す脆弱性が発見され、1/15に通報したところ、その日のうちに修正された。以下、その経緯について報告する。</p>
<h4>経緯</h4>
<p>今年の1月12日に読売新聞の記事が出たのを受けて、現実のサイトはどうなのだろうかと改めて気になった。
</p>
<blockquote cite="http://www.yomiuri.co.jp/net/news/20100112-OYT8T01018.htm" title="ドコモ携帯、情報流出の恐れ…最新２９機種">
<p>　ＮＴＴドコモの携帯電話のうち、インターネット閲覧ソフト「ｉモードブラウザ２・０」を搭載した最新２９機種を通じて、利用者の個人情報を不正取得される恐れのあることが、専門家の指摘で明らかになった。</p>
<p>　同社は携帯サイトの運営者にパスワード認証などの安全対策を呼びかけている。携帯電話の機能が高機能化するにつれ、こうした危険は増しており、利用者も注意が必要になってきた。</p>

</blockquote>
<p class="source">[<cite><a href="http://www.yomiuri.co.jp/net/news/20100112-OYT8T01018.htm" title="ドコモ携帯、情報流出の恐れ…最新２９機種より引用">ドコモ携帯、情報流出の恐れ…最新２９機種</a></cite>より引用]</p>

<p>
<img src="/img/dnsr00.jpg" align="right">
私自身も携帯電話でいくつかのサイトを巡回しており、その一つにtwitter.comの日本の携帯電話向けフロントエンドであるtwtr.jpも含まれる。ご存じのように、twitterは政府要人や有名人も数多く使っているし、twitter.comの画面で確認する限り、<a href="http://twitter.com/hatoyamayukio">鳩山由紀夫首相</a>や<a href="http://twitter.com/kharaguchi">原口一博総務相</a>などの閣僚の方々は携帯から書き込みをされることも多いようなので、仮に脆弱性があった場合、影響も大きくなると思った。原口総務相に関しては、記者団からの「<a href="http://bizmakoto.jp/makoto/articles/1001/23/news004_4.html#ah_hara3.jpg">Twitterの質問を受けて、つぶやきを確認する原口氏</a>」という報道写真も公開されているので、（スタッフ任せではなく）自ら携帯電話を使いこなしてtwtr.jpにアクセスしておられることは間違いないだろう。
</p>
<p>
手始めにtwtr.jpのIPアドレスを別のドメインにセットして、携帯電話からアクセスすると、正常に画面が表示される（右の写真）。これはまずい。このため、DNS Rebindingを使ってなりすましができてしまわないか調べることにした。当然ながら、不正アクセス禁止法に抵触しないよう、自分のアカウントを使用して確認を行った。
<br clear=right>
</p>
<h4>調査の概要</h4>
<p>
調査にあたっては、自宅の調査用サーバと調査専用のドメインを用いた。DNS Rebindingを使ったかんたんログインのなりすましは、<a href="http://www.hash-c.co.jp/info/20091124.html">iモードIDを用いた「かんたんログイン」のDNS Rebinding脆弱性</a>を発表する際に実験で確認していたが、twtr.jpのログイン画面は、次の点で私の実験とは異なっていた。
</p>
<ul>
<li>実験ではGETメソッドだったが、twtr.jpはPOSTを使用
<li>twtr.jpはログイン時にトークンの受け渡しをしていた
</ul>
<p>認証機能は副作用を伴うので本来はPOSTメソッドを使うのが正しいし、トークンは、外部から認証リクエストを強要される行為（CSRFに似ているが、認証前なのでCSRFではない）を防ぐためだろう。デジタルガレージ社の実装はセキュリティ上の考慮がなされていると感じた。
</p><p>
しかし、DNS Rebindingを使用すれば、ログイン画面のトークンを読み出すことが可能である。すぐに確認作業が終わるだろうと思っていたが、意外なところで失敗した。ログイン・リクエストのPOSTがうまくいかないのだ<span class="footnote">*1</span>。早く確認を終わらせないと、もたもたしているうちに脆弱性を悪用されるとまずい。結局、XMLHttpRequestをあきらめ、IFRAME要素を用いることにした。
</p><p>
最初、IRAME要素をDOMで動的に作ったりしていたのだが、IFRAME内のFORMをうまくSUBMITできない。このため、以下のような構成にした。検証コードを公開すると、スクリプトキディが他のサイトで悪用するといけないので、コードは非公開とする。
</p>
<pre>
<img src="/img/fig01.png" align="right">
一般ユーザ（被害者）からリクエストあり
①DNS情報書き換え　→　これ以降、ワナサイトは twtr.jpのIPアドレスを指す

・以下はIFRAME内の処理
　②ログイン画面を要求 → 認証成功
　③トークン取り出し　→　ログイン画面のINPUTにセット（写真2）
　④ログイン実行　→ セッションIDがCookieにセットされる（写真3）

・以下はIFRAME外の処理
　⑤CookieをINPUTにセット
　⑥Cookie値を情報収集サーバにPOST

以下は、攻撃者の立場
・セッションID受信を確認
・別の携帯電話にCookieをセット
・twtr.jpにアクセス　→　なりすましを確認
・書き込みをしてみる → 成功（写真4、写真5）
</pre>

<table border=0>
<tr>
<td valign="top">写真2<br><img src="/img/dnsr01.jpg"></td>
<td valign="top">写真3<br><img src="/img/dnsr02x.jpg"></td>
<td valign="top">写真4<br><img src="/img/dnsr03.jpg"></td>
</tr>
<tr>
<td colspan=3>
写真5<br>
<img src="/img/dnsr03x.png"></td>
</tr>
</table>
<p>写真2はトークンを受信した様子、写真3はIFRAME上でログイン後にCookie上のセッションIDをINPUTにセットしている様子である。このセッションIDを別の端末にセットして、書き込みをしてみたところが写真4である。</p>
<h4>通報・届出およびデジタルガレージ社の対応</h4>
<p>脆弱性を確認したので、twtr.jpの運営元である株式会社デジタルガレージに通報するとともに、IPAの脆弱性届出窓口に届け出た。その経緯を時系列で示す。</p>
<pre>
2010/01/14 深夜  脆弱性の確認完了
2010/01/15 11:37 デジタルガレージ社への通報
2010/01/15 12:52 IPAへの届出 取扱い番号 IPA#04364080 として受信される
2010/01/15 19:18 IPAより届出受理および取り扱い開始の連絡
2010/01/15 21:51 デジタルガレージ社の担当者より修正済みの返信。手元でも修正を確認。
2010/01/19 10:53 IPAより修正完了の連絡。その後取り扱い終了となる。
</pre>
<p>下図に、修正を確認した様子を写真で示す。</p>
<img src="/img/dnsr04x.jpg">
<p>通知からわずか10時間あまりでの修正である。
<a href="http://takagi-hiromitsu.jp/diary/20100221.html#p01">高木浩光＠自宅の日記 - はてなのかんたんログインがオッピロゲだった件</a>によると、はてなは通知から修正完了まで20日も掛かったようだが（修正内容は異なるものの）株式会社デジタルガレージの対応の素早さは際だっている。</p>
<h4>脆弱性の影響範囲</h4>
<p>当該脆弱性の影響を受けるユーザは以下の条件を全て満たす利用者である。</p>
<ol>
<li>twtr.jpを一度でも使ったことがある
<li>iモードブラウザ2.0の対応機種(2009年夏モデル以降)の利用者
<li>iモードIDを通知設定をONにしている（デフォルトはON）
<li>JavaScriptの設定を有効にしている（デフォルトは有効）
</ol>
<p>携帯電話のユーザは、大半の方がデフォルト設定で端末を使っていると思われるので、簡単に言えば、iモードブラウザ2.0端末でtwtr.jpを使ったことのあるユーザ、ということになる。</p>
<p>当該脆弱性の影響は、セッションハイジャックによって受ける影響と等しい。すなわち、ワナサイトを閲覧してしまったユーザの当該ユーザでの投稿、ダイレクトメッセージの送信、ダイレクトメッセージの履歴閲覧、自己紹介やプロフィール画像の変更などである。また、「メールでツイートの設定」画面から投稿用メールアドレスを確認しておけば、後からいつでも当該アカウントでのつぶやきが行える。個人情報に関しては、メールアドレスも含めて閲覧できる内容はあまりないようだ。</p>
<p>先にtwtr.jpのユーザの例として挙げた鳩山首相や原口総務相が仮にワナサイトを閲覧させられた場合は、首相や総務相のアカウントで、攻撃者は任意のつぶやきが行えたことになる。</p>
<h4>保険的対応</h4>
<p><img src="/img/mail-tweet01x.jpg" align="right">twtr.jpの脆弱性を悪用された書き込みなどは、私の知る限りは公表されていないようだが、脆弱性が修正された今でも油断はできない。仮に、攻撃者がなりすましを成功させていた場合、後から書き込みをする手段があるからだ。それは前述の「メールでツイート」機能を利用する方法だ。これは、その名の通りメール経由でtwitterの投稿をするもので、ユーザ毎の専用メールアドレスに文章を送信すると、その内容がtwitterに投稿される。右の写真は、私の「専用の投稿先メールアドレス」を表示させたものである。このメールアドレスはいつでも変更できるので、twtr.jpユーザは念のため変更しておいた方が良いだろう。</p>
<p>また、twtr.jpはかんたんログインを禁止設定することができない。メニュー上は「各種設定」から「かんたんログインの無効化」というメニューがあるが、試してみたところ、かんたんログインの設定内容を削除するだけで、その後パスワード認証でログインすると、再びかんたんログインが有効となる。このため、ユーザがtwtr.jp上でかんたんログイン設定を残したくない場合は、twtr.jpにアクセスするたびに「かんたんログインの無効化」を実行する（現実的ではない）か、iモードIDを無効化するしかないだろう。iモードIDは、iモードのマイメニューから無効化できる。
</p>
<p>利用者がDNS Rebinding攻撃を避ける目的では、JavaScriptの無効化が現実的かつ有効な方法だと考える。</p>
<br clear="right">
<h4>かんたんログイン手法の脆弱性に対する責任は誰にあるのか（再）</h4>
<p>デジタルガレージ社がかんたんログインのDNS Rebinding問題を対策していなかった理由は何だろうか。おそらく、単純にこの問題を知らなかったのだろう。無理もない。<a href="http://www.hash-c.co.jp/info/20091124.html">私が昨年11月に公表していた</a>とはいえ、小さなセキュリティ会社が公表した内容まで含めて、セキュリティ情報をすべて拾い上げて検証・対応しなければならないとするのも酷な話だと思う。しかも、脆弱性を通知したらその日のうちに対策する能力がデジタルガレージ社にあったのだ。IPAの届出制度は、個別のアプリケーションやWebサイトの脆弱性を扱うもので、かんたんログインのような「認証手法」は取り扱い対象外だ<span class="footnote">*2</span>。このあたり、問題を周知できない自分自身の力のなさを痛感するとともに、やはり携帯電話事業者に『<a href="http://takagi-hiromitsu.jp/diary/20100221.html#p01">どうやったら「かんたんログイン」なるものが実現できるのか、ちゃんとした実装方法の公式解説を出</a>』してもらわないと、この種の問題はなくならないだろうと改めて感じた。</p>

</p>
<div class="footnote">
	<p class="footnote">*1&#160;これは、後にiモードブラウザ2.0の制限のためだと分かった。<a href="http://www.tokumaru.org/d/20100118.html#p02">こちら</a>を参照されたし</p>
	<p class="footnote">*2&#160;だからtwtr.jpという個別サイトの脆弱性は届け出た</p>
</div>

<p><a href="http://www.tokumaru.org/d/20100222.html#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://www.tokumaru.org/d/20100212.html#p01">
<link>http://www.tokumaru.org/d/20100212.html#p01</link>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.tokumaru.org/d/20100212.html#p01" />
<dc:date>2010-02-22T11:06:44+09:00</dc:date>
<title>かんたんログイン手法の脆弱性に対する責任は誰にあるのか</title>
<dc:creator>徳丸浩(ockeghem)</dc:creator>
<description>id:ikepyonの日記経由で、NTTドコモのサイトに以下のセキュリティ・ガイドラインが掲示されていることを知った。    iモードブラウザ機能の多様化により、機種によってiモードサイトにおいてもJavaScriptを組み込んだ多様な表現、CookieやReferer情報を有効に活用したサイト構築が行えるようになりました。 しかし、PC向けインターネットサイト同様に、セキュリティ対策が十分に行われていないサイトでは、そのサーバの脆弱性を突き（クロスサイトスクリプティング、SQLインジェクション、DNSリバインディングなど様々な攻撃手法が存在しています）、これらの機能が悪用される危険性があります。十分にご注意ください。   [作ろうiモード：iモードブラウザ | サービス・機能 | NTTドコモより引用]  XSSやSQLインジェクションと並んで、DNSリバインディングというマニアックな手法が紹介されていることは驚きだが、おそらく私が昨年発表したiモードIDを用いた「かんたんログイン」のDNS Rebinding脆弱性のことを指しているのであろう。 しかし、引用部の表現には違和感が..</description>
<content:encoded><![CDATA[<h3>かんたんログイン手法の脆弱性に対する責任は誰にあるのか</h3><p>
<p><a href="http://d.hatena.ne.jp/ikepyon/">id:ikepyon</a>の<a href="http://d.hatena.ne.jp/ikepyon/20100210#p1">日記</a>経由で、<a href="http://www.nttdocomo.co.jp/">NTTドコモ</a>のサイトに以下のセキュリティ・ガイドラインが掲示されていることを知った。
</p>
<p></p>
<blockquote cite="http://www.nttdocomo.co.jp/service/imode/make/content/browser/index.html" title="作ろうiモード：iモードブラウザ | サービス・機能 | NTTドコモ">
<p>iモードブラウザ機能の多様化により、機種によってiモードサイトにおいてもJavaScriptを組み込んだ多様な表現、CookieやReferer情報を有効に活用したサイト構築が行えるようになりました。</p>
<p>しかし、PC向けインターネットサイト同様に、セキュリティ対策が十分に行われていないサイトでは、そのサーバの脆弱性を突き（クロスサイトスクリプティング、SQLインジェクション、<b>DNSリバインディング</b>など様々な攻撃手法が存在しています）、これらの機能が悪用される危険性があります。十分にご注意ください。</p>

</blockquote>
<p class="source">[<cite><a href="http://www.nttdocomo.co.jp/service/imode/make/content/browser/index.html" title="作ろうiモード：iモードブラウザ | サービス・機能 | NTTドコモより引用">作ろうiモード：iモードブラウザ | サービス・機能 | NTTドコモ</a></cite>より引用]</p>

<p>XSSやSQLインジェクションと並んで、DNSリバインディングというマニアックな手法が紹介されていることは驚きだが、おそらく私が昨年発表した<a href="https://www.hash-c.co.jp/info/20091124.html">iモードIDを用いた「かんたんログイン」のDNS Rebinding脆弱性</a>のことを指しているのであろう。</p>
<p>しかし、引用部の表現には違和感がある。DNSリバインディング自体は既知の攻撃手法であるが、「PC向けインターネットサイト」に対する攻撃ではなく、インターネットサイトを閲覧しているPC自身やファイアウォールの内側のローカルネットワーク上の端末に対する攻撃手法として知られている。このあたりの解説については、<a href="http://www.tokumaru.org/d/20071126.html#p01">ここ</a>や<a href="http://bakera.jp/ebi/topic/3976">ここ</a>を参照頂きたい。</p>
<p>しかも、先のセキュリティ・ガイドラインには、これら脆弱性についての説明はなく、「十分にご注意ください」とあるだけで、参考情報としては<a href="http://www.ipa.go.jp/">IPAのトップページ</a>が紹介されている。</p>
</p>
<p>
<blockquote cite="http://www.nttdocomo.co.jp/service/imode/make/content/browser/index.html" title="作ろうiモード：iモードブラウザ | サービス・機能 | NTTドコモ">
<p>なお、セキュリティ対策情報については、「独立行政法人 情報処理推進機構」（IPA）が公開する情報なども参考にしてください。</p>

<p><a href="http://www.ipa.go.jp/">独立行政法人 情報処理推進機構（IPA）のウェブサイト</a>へ</p>
<p></p>
</blockquote>
<p class="source">[<cite><a href="http://www.nttdocomo.co.jp/service/imode/make/content/browser/index.html" title="作ろうiモード：iモードブラウザ | サービス・機能 | NTTドコモより引用">作ろうiモード：iモードブラウザ | サービス・機能 | NTTドコモ</a></cite>より引用]</p>


<p>IPAにDNSリバインディングの解説があったかなと疑問に思い、「<a href="http://www.google.co.jp/search?q=DNS+%22%E3%83%AA%E3%83%90%E3%82%A4%E3%83%B3%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%22+site%3Aipa.go.jp">DNS "リバインディング" site:ipa.go.jp</a>」や「<a href="http://www.google.co.jp/search?q=DNS+rebinding+site%3Aipa.go.jp">DNS rebinding site:ipa.go.jp</a>」などのキーワードで検索してみたが、ヒットしない。ひょっとしたらどこかに存在する可能性はあるが、リンクもなく、サーチでも引っかからないのでは、ないのと同じだ。これでは、単に危険があるから注意しろと言っているだけで、解決策を示していないことになる。</p>
<p>このような状況から、この文書は次のような意図をもって書かれたのではないかという感想を持った。</p>

</p>
<ul>
<li>同DNSリバインディングの問題は、携帯端末や事業者設備の問題ではなく、Webアプリケーション側の問題である（<s>私も同意</s>追記参照）
</li>
<li>NTTドコモは、かんたんログインのDNSリバインディング脆弱性を、PCも含め昔から存在していた問題と印象づけたいのではないか（実際は違う）
</li>
<li>DNSリバインディングの解決方法を明確にリンクしなかったのは、「NTTドコモ公認の解決策」という印象を与えることを避けたかったからではないか
</li>
<li>一方で、DNSリバインディングに対する注意喚起を行ったという実績は作りたいのではないか
</li>
</ul>
<p>

<p>「実績作り」で思い浮かぶのは、Yomiuri Onlineにも掲載された以下の記事だ。この記事は、かんたんログインのDNSリバインディング脆弱性に関して、NTTドコモのコメントを掲載している。</p>

<blockquote cite="http://www.yomiuri.co.jp/net/news/20100112-OYT8T01018.htm" title="ドコモ携帯、情報流出の恐れ…最新２９機種">
<p>　ＮＴＴドコモでは、公式サイトを運営する約３０００社には注意喚起したが、それ以外の無数にある「勝手サイト」には「ジャバスクリプトの安全な利用はサイトを作る側にとって基本的知識であり、具体的に説明はしていない」という。</p>

</blockquote>
<p class="source">[<cite><a href="http://www.yomiuri.co.jp/net/news/20100112-OYT8T01018.htm" title="ドコモ携帯、情報流出の恐れ…最新２９機種より引用">ドコモ携帯、情報流出の恐れ…最新２９機種</a></cite>より引用]</p>

<p>勝手サイトに対して従来説明していなかったので、新たに説明したということなのかもしれない。しかし、先の説明ではまったく不十分だ</p>
<p>NTTドコモ（および他の携帯電話事業者）は、かんたんログインのセキュリティ問題について、そろそろ態度を明確にする必要があるのではないだろうか。その態度とは、以下の選択肢のどれを選ぶのかということだ。</p>

</p>
<ul>
<li>かんたんログインという手法は各サイトが独自に実装しているもので、携帯電話事業者はガイドラインなども提示していないので責任は一切負わない
</li>
<li>かんたんログインは、携帯電話事業者が提供している端末固有IDの応用であるので、安全な使い方を示すなど携帯電話事業者としても一定の責任が生じる
</li>
</ul>
<p>
<p>くだんの「セキュリティ・ガイドライン」を読む限り、NTTドコモは（本音では）事業者として一切責任を負わないと姿勢なのだと想像する。しかし、そう明言すると反発も予想されることから、あいまいな態度をとっているように見うけられる。</p>
<p>しかし、このようなあいまいな状況がもっとも危険なのだ。かんたんログインがこれだけ普及した現在でも、この手法に対する責任がどこにあるのか、非常に不明確な状態が続いている。最終的には、Webサイトの運営者が責任を負うべき問題ではあるだろうが、中小零細企業が多いケータイサイトの運営者がそのような問題意識を持っているとは考えにくいし、DNSリバインディングを含む複雑なセキュリティ問題を独自に研究・解決する能力もないだろう。であれば、日本独自の進化を遂げた携帯電話コンテンツのセキュリティ問題に対して、もっと広い枠組みでの検討が行われる必要があるし、そこにもっとも近い位置にいるのが携帯電話事業者であると私は考える。</p>
<h4>追記(2010/2/16)</h4>
<p>括弧内で「私も同意」と書いた部分について指摘を頂戴しました。</p>
<blockquote cite="http://b.hatena.ne.jp/HiromitsuTakagi/20100215#bookmark-19264744" title="HiromitsuTakagiのブックマーク / 2010年2月15日 (3)">
<p>ここは同意しちゃだめ。Webアプリ側は「対策可能」なのであって、元からそこに問題があるわけじゃない。</p>

</blockquote>
<p class="source">[<cite><a href="http://b.hatena.ne.jp/HiromitsuTakagi/20100215#bookmark-19264744" title="HiromitsuTakagiのブックマーク / 2010年2月15日 (3)より引用">HiromitsuTakagiのブックマーク / 2010年2月15日 (3)</a></cite>より引用]</p>

<blockquote cite="http://bakera.jp/ebi/topic/4054" title="DNS Rebinding問題の所在 | 水無月ばけらのえび日記">
<p>少なくともWebアプリケーション側の「不具合」ではないように思いますし、実際のところはこんな感じではないでしょうか。<ul></p>
<p><li>iモードブラウザ2.0対応のdocomo端末は、DNS Rebindingの攻撃に対して脆弱である。</p>
<p><li>端末の問題であるため端末側で対応することが望ましいが、名前解決はdocomoのゲートウェイ側で行われる場合があり、端末側では対応が難しい。</p>
<p><li>docomoのゲートウェイの問題についてはdocomo側で対応することが望ましいが、問題の性質上、対応が難しい (参考: Re:「docomoケータイのDNS Rebinding問題、全国紙で報道」)。</p>
<p><li>これらの問題に対してはWebサイト側で対応することが可能であり、しかも簡単に対応できる方法が存在する。</p>
<p><li>従って、Webサイト側での対応が推奨される。</p>
<p></li></p>

</blockquote>
<p class="source">[<cite><a href="http://bakera.jp/ebi/topic/4054" title="DNS Rebinding問題の所在 | 水無月ばけらのえび日記より引用">DNS Rebinding問題の所在 | 水無月ばけらのえび日記</a></cite>より引用]</p>

<p>まことに指摘の通りで、私の本意は、ばけらさんがわかりやすく要約していただいたとおりです。</p>
<p>したがって、携帯電話事業者はこの問題に対して免責されるわけではなく実施可能な対策はとるべきであり、具体的には、<a href="https://www.hash-c.co.jp/info/20091124.html">iモードIDを用いた「かんたんログイン」のDNS Rebinding脆弱性</a>に書いたように、DNSキャッシュの最短TTLを長くする程度の対策はとるべきだと考えます。</p>
<h4>追記(2010/2/22)</h4>
<p>かんたんログインのDNS Rebinding脆弱性の実例として、「<a href="http://www.tokumaru.org/d/20100222.html#p01
">ケータイtwitter(twtr.jp)においてDNS Rebinding攻撃に対する脆弱性を発見・通報し、即座に修正された</a>」を書きましたのでご参照ください。</p>
</p>

<p><a href="http://www.tokumaru.org/d/20100212.html#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://www.tokumaru.org/d/20100118.html#c10">
<link>http://www.tokumaru.org/d/20100118.html#c10</link>
<dc:date>2010-02-06T08:36:32+09:00</dc:date>
<title>2010-01-18のツッコミ[10] (徳丸浩)</title>
<dc:creator>徳丸浩</dc:creator>
<description>姫さん  質問を見てみましたが、これはご本人がドコモショップに相談に行くのがよいと思います。あくまで想像ですが、のっとりなどではないような気がします。 最近は携帯電話を購入すると、必要のないコンテンツを購入させられて「いらなければ直ぐに解約してください」と言われることがよくあります。そのたぐいの話で、ショップの店員が説明していなかったとか、説明を聞き漏らしていたとか、理由は無数に考えられます。</description>
<content:encoded><![CDATA[姫さん<br><br>質問を見てみましたが、これはご本人がドコモショップに相談に行くのがよいと思います。あくまで想像ですが、のっとりなどではないような気がします。<br>最近は携帯電話を購入すると、必要のないコンテンツを購入させられて「いらなければ直ぐに解約してください」と言われることがよくあります。そのたぐいの話で、ショップの店員が説明していなかったとか、説明を聞き漏らしていたとか、理由は無数に考えられます。]]></content:encoded>
</item>
<item rdf:about="http://www.tokumaru.org/d/20100118.html#c09">
<link>http://www.tokumaru.org/d/20100118.html#c09</link>
<dc:date>2010-02-06T05:23:29+09:00</dc:date>
<title>2010-01-18のツッコミ[9] (姫)</title>
<dc:creator>姫</dc:creator>
<description>記事とは関係ないコメントですいません  http://nat-q.jp/ctg3/q_detail.php?no=10340 ユーザ同士で質問を回答するサイトの1ページなのですが iモードブラウザ2.0ブラウザによる乗っ取りなのでしょうか? 自分では判断できないので検証していただきたいです (ちがうなら、あたしの勘違いでいいのですが あたりなら実害が出ているとドコモなどへ報告していただきたいです)</description>
<content:encoded><![CDATA[記事とは関係ないコメントですいません<br><br><a href="http://nat-q.jp/ctg3/q_detail.php?no=10340">http://nat-q.jp/ctg3/q_detail.php?no=10340</a><br>ユーザ同士で質問を回答するサイトの1ページなのですが<br>iモードブラウザ2.0ブラウザによる乗っ取りなのでしょうか?<br>自分では判断できないので検証していただきたいです<br>(ちがうなら、あたしの勘違いでいいのですが<br>あたりなら実害が出ているとドコモなどへ報告していただきたいです)]]></content:encoded>
</item>
<item rdf:about="http://www.tokumaru.org/d/20100118.html#c08">
<link>http://www.tokumaru.org/d/20100118.html#c08</link>
<dc:date>2010-01-18T23:49:13+09:00</dc:date>
<title>2010-01-18のツッコミ[8] (yamagata)</title>
<dc:creator>yamagata</dc:creator>
<description>ストリームとして取得して自分で分解する方法で対応しようと思えば出来る状況だとしても、（それまでに比べて）手順がフクザツなので、「あきらめてGETを使う」に流れてしまう開発者も多そう。setRequestHeaderが少なくとも&quot;Content-Type&quot;に対しては今までどおり動作するように再改修されることが望まれますね。。</description>
<content:encoded><![CDATA[ストリームとして取得して自分で分解する方法で対応しようと思えば出来る状況だとしても、（それまでに比べて）手順がフクザツなので、「あきらめてGETを使う」に流れてしまう開発者も多そう。setRequestHeaderが少なくとも&quot;Content-Type&quot;に対しては今までどおり動作するように再改修されることが望まれますね。。]]></content:encoded>
</item>
<item rdf:about="http://www.tokumaru.org/d/20100118.html#c07">
<link>http://www.tokumaru.org/d/20100118.html#c07</link>
<dc:date>2010-01-18T22:57:50+09:00</dc:date>
<title>2010-01-18のツッコミ[7] (猪股健太郎)</title>
<dc:creator>猪股健太郎</dc:creator>
<description>ASP.NETの場合なら、HttpContext.Current.Request.InputStreamから読めると思います。</description>
<content:encoded><![CDATA[ASP.NETの場合なら、HttpContext.Current.Request.InputStreamから読めると思います。]]></content:encoded>
</item>
<item rdf:about="http://www.tokumaru.org/d/20100118.html#c06">
<link>http://www.tokumaru.org/d/20100118.html#c06</link>
<dc:date>2010-01-18T22:12:36+09:00</dc:date>
<title>2010-01-18のツッコミ[6] (金床)</title>
<dc:creator>金床</dc:creator>
<description>サーバサイドJavaの場合、ServletRequestのgetInputStreamからストリームとして取得できます</description>
<content:encoded><![CDATA[サーバサイドJavaの場合、ServletRequestのgetInputStreamからストリームとして取得できます]]></content:encoded>
</item>
<item rdf:about="http://www.tokumaru.org/d/20100118.html#c05">
<link>http://www.tokumaru.org/d/20100118.html#c05</link>
<dc:date>2010-01-18T11:56:52+09:00</dc:date>
<title>2010-01-18のツッコミ[5] (徳丸浩)</title>
<dc:creator>徳丸浩</dc:creator>
<description>Kenjiさん、コメントありがとうございます。php://inputというものがあるのですね。確認したところ、確かにデータを取得できました。</description>
<content:encoded><![CDATA[Kenjiさん、コメントありがとうございます。php://inputというものがあるのですね。確認したところ、確かにデータを取得できました。]]></content:encoded>
</item>
<item rdf:about="http://www.tokumaru.org/d/20100118.html#c04">
<link>http://www.tokumaru.org/d/20100118.html#c04</link>
<dc:date>2010-01-18T11:45:38+09:00</dc:date>
<title>2010-01-18のツッコミ[4] (Kenji)</title>
<dc:creator>Kenji</dc:creator>
<description>PHP なら、php://input でデータを取得できるのではないでしょうか？  file_get_contents('php://input');  http://www.php.net/manual/ja/wrappers.php.php </description>
<content:encoded><![CDATA[PHP なら、php://input でデータを取得できるのではないでしょうか？<br><br>file_get_contents('php://input');<br><br><a href="http://www.php.net/manual/ja/wrappers.php.php">http://www.php.net/manual/ja/wrappers.php.php</a><br>]]></content:encoded>
</item>
<item rdf:about="http://www.tokumaru.org/d/20100118.html#c03">
<link>http://www.tokumaru.org/d/20100118.html#c03</link>
<dc:date>2010-01-18T10:48:19+09:00</dc:date>
<title>2010-01-18のツッコミ[3] (徳丸浩)</title>
<dc:creator>徳丸浩</dc:creator>
<description>masaさん、twkさん、コメントありがとうございます。 formのactionにパラメータ積んだら、それは実質的にGETということになりませんか? xml形式のデータをSUBMITというのは、実はやってみたのですが、PHP、ASP/ASP.NETなどではうまく受け取れていません。やり方があるのかもしれませんが、私は知りません。 </description>
<content:encoded><![CDATA[masaさん、twkさん、コメントありがとうございます。<br>formのactionにパラメータ積んだら、それは実質的にGETということになりませんか?<br>xml形式のデータをSUBMITというのは、実はやってみたのですが、PHP、ASP/ASP.NETなどではうまく受け取れていません。やり方があるのかもしれませんが、私は知りません。<br>]]></content:encoded>
</item>
<item rdf:about="http://www.tokumaru.org/d/20100118.html#c02">
<link>http://www.tokumaru.org/d/20100118.html#c02</link>
<dc:date>2010-01-18T10:08:14+09:00</dc:date>
<title>2010-01-18のツッコミ[2] (twk)</title>
<dc:creator>twk</dc:creator>
<description>xml形式のデータをsubmitしたら読み取れる?</description>
<content:encoded><![CDATA[xml形式のデータをsubmitしたら読み取れる?]]></content:encoded>
</item>
<item rdf:about="http://www.tokumaru.org/d/20100118.html#c01">
<link>http://www.tokumaru.org/d/20100118.html#c01</link>
<dc:date>2010-01-18T09:57:56+09:00</dc:date>
<title>2010-01-18のツッコミ[1] (masa)</title>
<dc:creator>masa</dc:creator>
<description>formのactionに直接パラメータを積むとか？</description>
<content:encoded><![CDATA[formのactionに直接パラメータを積むとか？]]></content:encoded>
</item>
<item rdf:about="http://www.tokumaru.org/d/20100118.html#p02">
<link>http://www.tokumaru.org/d/20100118.html#p02</link>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.tokumaru.org/d/20100118.html#p02" />
<dc:date>2010-01-18T07:21:48+09:00</dc:date>
<title>iモードブラウザ2.0のXMLHttpRequestでPOSTデータの扱いが困難になった</title>
<dc:creator>徳丸浩(ockeghem)</dc:creator>
<description>このエントリでは、iモードブラウザ2.0の制限により、XMLHttpRequestでPOSTメソッドの利用が困難になっていることを確認したので報告する。 iモードブラウザ2.0のJavaScriptを試していて、POSTメソッドでデータが渡せていないことに気がついた。以下のようなプログラムで検証してみた。  【post.html】 html head script function test() {   try {     var requester = new XMLHttpRequest();     requester.open('POST', '/dumppost.php', true);     requester.onreadystatechange = function() {        if (requester.readyState == 4) {            onloaded(requester);        }     };     requester.setRequestHeader(&quot;Content-Type&quot; , &quot;applicatio..</description>
<content:encoded><![CDATA[<h3>iモードブラウザ2.0のXMLHttpRequestでPOSTデータの扱いが困難になった</h3><p>
<p>このエントリでは、iモードブラウザ2.0の制限により、XMLHttpRequestでPOSTメソッドの利用が困難になっていることを確認したので報告する。</p>
<p>iモードブラウザ2.0のJavaScriptを試していて、POSTメソッドでデータが渡せていないことに気がついた。以下のようなプログラムで検証してみた。</p>
<pre>
【post.html】
&lt;html&gt;
&lt;head&gt;
&lt;script&gt;
function test() {
  try {
    var requester = new XMLHttpRequest();
    requester.open('POST', '/dumppost.php', true);
    requester.onreadystatechange = function() {
       if (requester.readyState == 4) {
           onloaded(requester);
       }
    };
    requester.setRequestHeader("Content-Type" , "application/x-www-form-urlencoded");
    requester.send("aaa=bbb&ccc=ddd");
  } catch (e) {
    res = requester.responseText;
    document.getElementById('result').innerHTML = e.toString();
  }
}

function onloaded(requester) {
  res = requester.responseText;
  document.getElementById('result').innerHTML = res;
}
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;input type=button value="go" onclick="test()"&gt;
&lt;div id="result"&gt;&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;

【dumppost.php】
&lt;?php
echo "aaa=" . htmlspecialchars($_POST['aaa'], ENT_QUOTES, 'Shift_JIS') . "&lt;br&gt;";
echo "ccc=" . htmlspecialchars($_POST['ccc'], ENT_QUOTES, 'Shift_JIS') . "&lt;br&gt;";
?&gt;
</pre>
<p>実行結果は、以下のようになった。まずはChromeのものだが、IEやFirefoxでも同等の結果だ。</p>
<img class="left" src="http://www.tokumaru.org/d/images/20100118_0.png" alt="Choromeでの結果" title="Choromeでの結果" width="545" height="198">
<br clear=left>
<p>次に、ドコモP-07Aによる結果</p>
<img class="left" src="http://www.tokumaru.org/d/images/20100118_1.jpg" alt="P-07Aでの結果" title="P-07Aでの結果" width="280" height="153">
<br clear=left>
<p>ドコモの場合を検証するために、Webサーバーに来ているリクエストをキャプチャしてみた。</p>
<pre>
POST /dumppost.php HTTP/1.1
X-UE-Version: 1
Host: XXXXXXXXXXXXX
User-Agent: DoCoMo/2.0 P07A3(c500;TB;W24H15)
Content-Type: text/xml
Content-Length: 15

aaa=bbb&ccc=ddd
</pre>
<p>ご覧のようにPOSTデータそのものは送信されてきているが、Content-Typeがtext/xmlになっているために、Webアプリケーション側で受け取れないようだ。</p>
<p>JavaScript側では、この値をapplication/x-www-form-urlencodedに変更しているが、<a href="http://d.hatena.ne.jp/ockeghem/20091117/p1">P-07AでもJavaScriptが再開され、あらたな制限がみつかった</a>で報告したように、setRequestHeaderが無効化されているために、この設定が無視されていることが原因のようだ。</p>
<p>これは明らかに、setRequestHeader無効化の副作用であるが、その代償は大きいように思う。PHP以外に、ASP/ASPX、J2EE(JSP)にこのデータを入力してみたが、いずれも値を読み取ることはできなかった。一方、PerlのCGIモジュールでは、POSTDATAという名称のデータとして、POSTデータ全体を読み取ることができた。Perl以外の場合でも、Webサーバーにデータ自体は到達しているのだから値を利用する手段はあるかもしれないが、私が調べた範囲では分からなかった。</p>
<p>上記の結果として、AjaxでPOSTメソッドを扱うには、標準的でない方法を用いる必要があるわけだが、その方法を検討してみた。</p>
<ol>
<li>POSTをあきらめてGETを使う
<li>Perlのように、text/xml形式のデータを読み出せる言語を選択する
<li>DOMにより、IFRAME内にFORMを作成してSUBMITする
</ol>
<p>このうち、上記1.については、セキュリティ上の問題が発生し得る。Ajaxのセキュリティ対策として、「GETメソッドを拒絶する」という方法があるからだ。具体的には、SCRIPT要素を使ってSame Origin Policyを回避してAjaxデータを読み出す手法に対抗して、SCRIPT要素では必ずGETメソッドになることから、POSTのみを許容することで対策するという方法だ。既存のアプリケーションがこのような手法によりセキュリティ対策されている場合に、安易にGETメソッドを許容してしまうと、セキュリティホールが混入することになりかねない。</p>
<p>3.については、私が試した範囲ではうまくいっていない。JavaScriptからIFRAME内のFORM操作がうまくいかないのだ。これも、ひょっとすると制限を掛けているのかもしれない。アドホックな方法ならありそうだが、まだ十分に検証できていない。</p>
<p>一つの疑問は、このような情報がインターネット上に見あたらないことだ。AjaxでPOSTメソッドが使えないというのはとんでもないことだが、検索してもそのような情報がみあたらないのだ。iモードブラウザ2.0のAjaxを誰も使っていないのか、それとも事業者が恐ろしくて口をつぐんでいるのか。</p>
<p>しかし、このような技術情報が流通していかない限り、iモードブラウザ2.0のJavaScriptを使ったコンテンツは普及していかないだろう。NTTドコモにはさらなる情報開示を期待したいし、ケータイWebの開発者にも、もっとブログなどでの情報公開を期待する。</p>


</p>

<p><a href="http://www.tokumaru.org/d/20100118.html#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://www.tokumaru.org/d/20100118.html#p01">
<link>http://www.tokumaru.org/d/20100118.html#p01</link>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.tokumaru.org/d/20100118.html#p01" />
<dc:date>2010-01-18T07:21:48+09:00</dc:date>
<title></title>
<dc:creator>徳丸浩(ockeghem)</dc:creator>
<description></description>
<content:encoded><![CDATA[<p>



</p>

<p><a href="http://www.tokumaru.org/d/20100118.html#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://www.tokumaru.org/d/20090914.html#c13">
<link>http://www.tokumaru.org/d/20090914.html#c13</link>
<dc:date>2009-09-19T11:08:27+09:00</dc:date>
<title>2009-09-14のツッコミ[13] (通りすがり)</title>
<dc:creator>通りすがり</dc:creator>
<description>私の主張を理解して頂いたようで嬉しいです。</description>
<content:encoded><![CDATA[私の主張を理解して頂いたようで嬉しいです。]]></content:encoded>
</item>
</rdf:RDF>
