OpenIDに仕掛けられやすい5つの攻撃

2009年2月10日(火)
村上 知紀

弱みに付け込む:クロスサイトリクエストフォージェリ

 次に、入り口の係員が他人の弱みに付け込むような悪人だった場合です。入り口に入ってきた車をだまして、Aゲートではなく、別のところに連れて行くだけでなく、ユーザーに意識させずに何かを実行させてしまうのです。

 これが「クロスサイトリクエストフォージェリ(Cross-Site Request Forgery)」です。

 Forgeryというのは、聞きなれない英語ですが、偽造/捏造(ねつぞう)を意味します。よって、直訳すると、サイトをまたいだリクエスト偽造、といった意味になります。サイトをまたいでリクエストを偽造するというのは、一体どういうことなのでしょうか。

 サイト上に、データの書き込み、修正、削除などの機能を持たせる場合がありますが、基本的にこの処理はそのサイト上で行われることを意図していますし、通常は認証して身元を確認した上で行います。しかし、それを別のサイトからリクエストを行うように仕向けることが、サイトをまたいだリクエストの偽造、つまりクロスサイトリクエストフォージェリ(CSRF)です。

 例えば、あるユーザーが知らず知らずにどこかのサイトの送信ボタンを押したら、そのターゲットがそのサイトではなく、どこか別のサイトの新規登録機能のプログラムを呼び、新規登録機能を実行させてしまうというようなことが意外に簡単です。

 通常、その機能を利用する前に認証が要求されますが、もしユーザーが、そのサイトへのログイン状態を保持するように設定していたら、そのまま実行されてしまいます。こうした方法で、ユーザーが意図せずに、別のサイトに、コメントを書き込んだり、データを削除してしまうことがありうるのです。

 この攻撃は、そのユーザーとサイト双方に被害があるので、なんとか防御したいところです。対処方法の1つとして、ログイン状態を保持しない、つまり、都度ログインを要求することが考えられますが、ユーザーの利便性が悪くなります。

 ほかによく使われる方法として、当該サイトでコメント書き込みをする場合などにフォームの隠しフィールドの中に目印を埋め込んでおくことが挙げられます。ワンタイムトークンと呼ばれますが、認証情報やセッションIDなどから生成したユニークでまねの難しい文字列を生成して埋め込んでおくことによって、それが内部から来た正しいリクエストとそうでないリクエストを識別することができます。

 また、別の方法としては、CAPCHAという読みにくい英数字を入力するようなステップを設けることも1つの方法です。ブログのコメントを入力する際などに見たことがあるかと思います。

さらに弱みに付け込む:クロスサイトスクリプティング

 もう1つ他人の弱みに付け込む方法として有名なのが、「クロスサイトスクリプティング(Cross Site Scripting)」です。クロスサイトリクエストフォージェリーと同じようにクロスサイトという名前がついていますが、クロスサイトスクリプティング(XSS)は、サイトをまたいだ悪意あるスクリプティングのことを意味します。

 スクリプティングですから、サーバーにアクセスするような機能を実行させるのではなく、Cookieを盗んだり、悪意あるページにリダイレクトするといった悪さを行います。すでに説明したようにCookieにはセッション情報が含まれる場合がありますし、サイトによっては、より機密性の高い情報を含んでいる場合があるため、防御が必要です。

 具体的な攻撃の手法としては、アプリケーションの不備を突きます。つまりそのアプリケーションが入力されたjavascriptを、そのまま出力するようにしていると、その出力結果とともに悪意のあるjavascriptが実行されてしまいます。そして、javascriptによってCookieを読むことができるので、画像のリクエストにCookieを付加するなどしてそれを別のサーバーに送信します。簡単に書くと以下のような流れになります。

 リンクをクリック → アプリケーションにjavascriptが渡される → そのまま出力される → avascriptが実行されCookieを取得する → 別サーバーに送信する

 Cookieの値を取得することで、セッションの乗っ取りをしたり、ページ全体を置き換えることによりて偽のページを作り出してフィッシングをしたり、といったさらなる攻撃の機会を与えてしまうことになります。

 対処するためには、アプリケーションの出力時にjavascriptを無効化すること(サニタイズ)が考えられます。

 では、最後にもう1つの攻撃を見てみましょう。

cNuts創業者/Webコンサルタント。クリエイティブパーソンのための検索/共有エンジンであるcNuts(http://cnuts.jp/)を日々開発するとともに、企業のパートナーとしてWebのサービス戦略、企画、設計、組織改善などに関するコンサルティングに従事。Webのサービスプランニングの進め方や考え方を解説した「Webサイトプランニングブック」(http://www.amazon.co.jp/gp/product/4774133892)を出版。雑誌への執筆多数。Web Innovator:(http://chikitomo.blogspot.com/

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています