<前の日記(2004年07月07日) 次の日記(2004年07月11日)> 最新 編集

高木浩光@自宅の日記

目次 はじめに 連絡先:blog@takagi-hiromitsu.jp
訪問者数 本日: 2044   昨日: 1295

2004年07月10日

「アクセス制御の欠如」の脆弱性の検査はやはり重要

7月2日の「はてなカウンター日記」に、このように報告されていた。

プライベートモードのカウンターにおいて、

  • リンク元レポートページ
  • 検索語レポートページ
  • ドメインレポートページ

のそれぞれのURLに、直接アクセスを行うことで、プライベートモードであるにも関わらず、第三者がレポートを閲覧可能となる不具合がございました。

この問題を本日修正しました。(略)

はてなカウンター日記, 2004年7月2日

これは気付かなかった。というか調べようとしていなかった。まさか、はてなにこういう基礎的な部分の脆弱性があるとは思わなかったので。意外にこの脆弱性は見落とされがちなのかもしれない。

この種の脆弱性の存在は次の手順で誰でも調べられる。

  1. 自分のアカウントでログインする
  2. 他人には見えてはならないはずの画面にジャンプする ――(1)
  3. ログアウトする
  4. (1)の画面に戻ってリロードし、同じように見えるならダメ
  5. 上記を、検査が必要な画面のそれぞれについて繰り返す

はてなのように、ユーザを識別するIDがURL中に含まれるサービス(公開モードも存在するため、こうなっている)では、ログインしていない状態でのアクセスでもユーザは指定されることになるため、画面の表示を司るプログラムには、ログイン状態であるかどうか(そしてログインしているユーザが画面の所有者と一致するか)をチェックするコードを意図的に入れることが必要となる。

それに対し、ショッピングサイトのように、URLなどにユーザIDを含めることが必要でないサービスでは、セッションIDからアクセス者のユーザIDを検索してきて処理することになるので、その場合、ログイン中であることのチェックを怠ることは普通は起こらない。なぜなら、ログイン中でなければセッションIDを得られないか、得られてもそこからユーザIDを得られないからだ。

はてなのような形態のサービスを構築する際には、チェックコードの入れ忘れが起きる可能性があるので、うっかりミスがないか、必要な画面のすべてについて検査をすることが重要となる。

上に挙げた検査の手順は、誰でも手軽にできるが、たくさんの画面について繰り返すのは面倒となる。先に、他人には見えてはならないはずの画面の全部のURLをメモしておいて、ログアウト後にそれらへのアクセスを試すという方法がある。あるいは、別の種類のブラウザを起動しておいて、ログインしているブラウザのURLを、ログインしていないブラウザにコピーしてアクセスして確認するという方法もある。

さらには、ログイン中に、ログイン状態であることを示しているであろうcookieを削除する操作をして、リロードして検査し、再びcookieを元に戻して続けるという方法もある。localhost上で動かした特殊なプロキシサーバ上で、アクセス毎にリクエストを編集して送信するという方法を使い、cookieを一時的に削除するということもできる。

こうした作業を自動化したのが、「Vulnagra」(別名「Moroyowa」)だ。

Vulnagraはプロキシサーバとして動作し、ユーザのアクセスのリクエストとレスポンスを監視する。ユーザに検査対象のサイトにログインさせ、サイトを適当にうろうろさせることにより、セッション追跡がどのパラメタで行われているかを推定する。はてなであれば、「rk」という名前のcookieであることがすぐにわかる。そして、他人に見えてはならないはずの画面を、自動的にあるいはユーザの指示によって登録して、後の検証コースで、そのパラメタ「rk」を欠落させて同じ画面にアクセスし、結果に問題のある情報が含まれていないかを調べることで、この脆弱性がないかを自動的に検出する。

ログイン状態を示すパラメタが、cookieに限らず、POSTアクションのhiddenパラメタになっているサイトであっても、同様に動作するので、検査は素人でも簡単にできる。

Edy一体型クレジットカードの有効期限が切れるとEdyは?

クレジットカードの有効期限が切れたため新しいカードが送られてきていた。そこには、ご利用案内の冊子とは別に挟み込まれた、「《重要》更新カード発行時のEdyのお取扱いについて」という紙が入っていた。そこには次のような注意書きがある。

  • 旧カードのEdy残高は更新カードへ移行されません。
    ※旧カードは、Edy残高を使い切った後、ハサミを入れて廃棄いただくようお願いいたします。
  • 有効期限経過後の旧カードへのEdy入金はできません。
    (略)
  • 更新にあたり、カード番号は変更されませんが、Edy番号は変更されます。
  • インターネットでのチャージ(入金)をご希望の場合は、今回お送りいたしました「更新カード」にて、改めて「サービス登録」をお願いいたします。

これは気付かなかった。なるほどたしかにそういうことにならざるを得ない。面倒くさい。こんなの、おばちゃんとかには理解困難ではないだろうか。

有効期限の切れたクレジットカードは、そう、ハサミで切り刻んで捨てることになっているのは常識だ。ボーっとしていると、Edyに入金済みの数万円をドブに捨てることになる。 クレジットカードを無視して単なるEdyカードとして使い続けようとしても、入金ができないようになっているそうで((やらないでくれというだけで、本当は可能なのでは?))、しばらく使い切るまで両方のカードを持ち歩き、古いほうを使うことを意識し続けないといけない。面倒くさい。

そしてもう一つ、意外だった重大めの面倒くささがある。

Edyカードは(というより、FeliCaは)、単なる電子マネーとしての機能だけでなく、個人認証カードとしても機能するものだ。INTERNET Watchの7月7日の記事の表にあるように、「会員証」としての役割も果たす場合がある。その場合、ユニーク番号である Edy No.が会員番号となるだろう。

たとえば、2月29日の日記で書いたように、IC CARD WORLD 2004では、登録入場者の入場管理にEdyカードを使うという試みが実施されている。登録から入場までの間にクレジットカードの有効期限が切れたらどうするのか。その他の様々なサービスで、クレジットカード一体型Edyを、個人認証用として登録していた場合、全部変更しなくちゃならない。面倒くさい。

そもそも変更できないサービスもあるのではないか? 「club ap」なんかは、「ご登録情報の変更」の画面に行ってみると、変更できないようになっている。Edy No.が club apの会員番号なのだ。「am/pm発行のEdyはもちろん、他のEdyでもご登録いただけます!!」とあるのにだ。まぬけだ。

さて、club apの利用(というよりは、am/pmの利用)については、以前から書かねばと気になっていた、興味深い注意点がある。「ユビキタス社会」のひとつの落とし穴の典型例とも言える。これについては、am/pmへ問い合わせをして回答を待ってから書くことにする。

検索

<前の日記(2004年07月07日) 次の日記(2004年07月11日)> 最新 編集

最近のタイトル

2024年11月11日

2024年07月28日

2024年07月27日

2024年07月07日

2024年04月07日

2024年04月01日

2024年03月23日

2024年03月19日

2024年03月16日

2024年03月13日

2024年03月11日

2023年03月27日

2022年12月30日

2022年12月25日

2022年06月09日

2022年04月01日

2022年01月19日

2021年12月26日

2021年10月06日

2021年08月23日

2021年07月12日

2020年09月14日

2020年08月01日

2019年10月05日

2019年08月03日

2019年07月08日

2019年06月25日

2019年06月09日

2019年05月19日

2019年05月12日

2019年03月19日

2019年03月16日

2019年03月09日

2019年03月07日

2019年02月19日

2019年02月11日

2018年12月26日

2018年10月31日

2018年06月17日

2018年06月10日

2018年05月19日

2018年05月04日

2018年03月07日

2017年12月29日

2017年10月29日

2017年10月22日

2017年07月22日

2017年06月04日

2017年05月13日

2017年05月05日

2017年04月08日

2017年03月10日

2017年03月05日

2017年02月18日

2017年01月08日

2017年01月04日

2016年12月30日

2016年12月04日

2016年11月29日

2016年11月23日

2016年11月05日

2016年10月25日

2016年10月10日

2016年08月23日

2016年07月23日

2016年07月16日

2016年07月02日

2016年06月12日

2016年06月03日

2016年04月23日

2016年04月06日

2016年03月27日

2016年03月14日

2016年03月06日

2016年02月24日

2016年02月20日

2016年02月11日

2016年02月05日

2016年01月31日

2015年12月12日

2015年12月06日

2015年11月23日

2015年11月21日

2015年11月07日

2015年10月20日

2015年07月02日

2015年06月14日

2015年03月15日

2015年03月10日

2015年03月08日

2015年01月05日

2014年12月27日

2014年11月12日

2014年09月07日

2014年07月18日

2014年04月23日

2014年04月22日

2000|01|
2003|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|05|06|07|08|09|10|11|12|
2012|02|03|04|05|06|07|08|09|
2013|01|02|03|04|05|06|07|
2014|01|04|07|09|11|12|
2015|01|03|06|07|10|11|12|
2016|01|02|03|04|06|07|08|10|11|12|
2017|01|02|03|04|05|06|07|10|12|
2018|03|05|06|10|12|
2019|02|03|05|06|07|08|10|
2020|08|09|
2021|07|08|10|12|
2022|01|04|06|12|
2023|03|
2024|03|04|07|11|
<前の日記(2004年07月07日) 次の日記(2004年07月11日)> 最新 編集