第5回:APIとの連携・脆弱性への対応 (3/4)

SNSのサービス利用
ソーシャル・ネットワーキング・サービスのビジネス利用

第5回:APIとの連携・脆弱性への対応
著者:イースリー  戸辺 淳一郎   2006/5/15
前のページ  1  2  3   4  次のページ
CSRF(クロスサイトリクエストフォージェリ)の脆弱性への対処

   前項のように「正しいプログラミング」で大抵の脆弱性は回避できますが、それだけでは回避できないものもあります。その代表的なものがCSRF(クロスサイトリクエストフォージェリ)脆弱性です。

   CSRFの脆弱性も最近はよく話題になっていますので、詳しい方もいらっしゃるかもしれませんが、まずはこれがどんな脆弱性なのかを説明しましょう。
Webアプリケーションの画面遷移
図4:Webアプリケーションの画面遷移
(画像をクリックすると別ウィンドウに拡大図を表示します)

   図4は会員が自分のパスワードを変更する時の処理のフローです。Webアプリケーションは通常このような画面遷移をします。ここでは、完了画面に遷移したタイミングで、実際に管理されているDB上のパスワードが変更されます。

   Webアプリケーションにおいては、セッションによりログインしているユーザを管理しているので、自分以外のユーザのパスワードを書き換えたりすることはできません。これは正しいプログラミングでセッションを管理していれば、第三者はあなたの「パスワード変更を完了させる」権限を持つことができないため、当然のことです。

   しかし、あなた自身はどうでしょうか。当然、あなた自身は「自分自身のパスワード変更を完了させる」権限を持っており、CSRFの脆弱性はここを突いたものです。パスワード完了画面というのは1つのURI(Uniform Resource Identifier:注3)を持っており、パスワードを変更するということは、このURIに対して「パスワードを〜に変更してください」というリクエストを送出することとなります。

※注3:
インターネット上に存在する情報資源の場所を指し示す記述方式

   このことについて何も対策がなければ、このリクエストを完了画面のURIに送出しさえすれば、図4のようなステップを踏まなくてもパスワードを変更できるのです。悪意のある第三者が次のようなURIにあなたを誘導したらどうなるでしょうか。

「ここのWebサイト面白いから見てごらん!」
http://www.example.jp/ch_pass?new_password=test
(パスワード変更完了画面のURI)

   あなた自身があなたのパスワードを変更することになってしまうのです。先ほど説明したように、あなた自身は自分のパスワードを変更させる権限を持っているので、簡単に悪意のある第三者にパスワードを変更されてしまいます。

   自分は自分自身のデータに対して常に権限を持っているのですから、対策は難しいと思うかもしれません。まれに、「完了画面の前に確認画面をはさむ」ということを対策としているWebサイトがあるようですが、先の例のように完了画面に直接アクセスさせられてしまえば、何の対策にもなっていないことがわかると思います。

   しかし、対策のヒントはここにあります。CSRFの脆弱性というのは「ある1つの画面に対してアクセスさせる」ということを突いたものであり、連続する2つ以上の画面にはアクセスさせることができません。

   つまり、必ず確認画面経由でなければ完了画面にアクセスできない(もしくはアクセスが無効)になるような仕組みを導入すればよいのです。実際の対策方法はいくつかあると思いますので、採用予定のSNSエンジンのベンダーに確認するとよいでしょう。

   SNSではコミュニティサイトという性質上、会員同士がURLを教えあったりすることも多いのでCSRF対策は特に気をつけなければなりません。


セキュリティ対策を意識したテスト

   今回解説したような脆弱性の話を聞くと不安になってしまうかもしれませんが、逆にこれらを「知っている」ということが身を守る上で大切なことなのです。もちろん、SNSエンジンの開発の現場ではこれらの脆弱性がないように慎重にテストしています。

   Webアプリケーションのテストでは、仕様書に規定された動作をするかどうかだけでなく、これらの脆弱性がないかも入念に調べます。特に下記表1のような思い違いを犯してしまっていることも多いので、これらについては徹底的にテストしなければなりません。

   過去にSQLインジェクションなどで事故を起こしてしまったWebサイトは、開発担当者がこれらのプログラミング時にミスをしてしまっていたことが問題だったのではなく、テストにこれらをチェックする項目を盛り込めていなかったことが原因だと思います。

  • パラメータ(引数)が書き換えられない
  • postデータ(hiddenなど)が書き換えられない
  • Referrerによる制限が万全である
  • Cookieのデータが書き換えられない
  • User-Agentによる制限が万全である
  • 確認画面でチェックをすれば完了画面でのチェックは不要

表1:開発者の思い違いのパターン
出典:イースリーセキュリティガイドライン
http://www.e-3lab.com

   comnitの開発ではgetデータはもちろん、postデータおよびCookieの値なども変更して、実際に攻撃をしてみてテストを行っています。

前のページ  1  2  3   4  次のページ

製品紹介
「SNSエンジン、comnit(コムニット)」
本連載は株式会社イースリーおよび株式会社ラソナの開発したSNSエンジン、comnitの利用ケースをもとに記事を掲載しています。

comnitで作り上げたコミュニティを生かして、お客様のマーケティング手法に合わせた実践的なケースをご紹介いたします。

詳細はコチラ
http://www.comnit.jp/
http://www.e-3.jp/
株式会社イースリー 代表取締役CTO 戸辺淳一郎
著者プロフィール
株式会社イースリー
代表取締役CTO   戸辺淳一郎

2003年8月にイースリーを設立。Webシステム構築の請負、パッケージ開発を行うかたわら自社サービスの展開を目指している。Webアプリの開発の現場においては、最高の品質を提供できるようにすることを追求している。現在では主にプロジェクトマネジメントに携わっているが、現場の技術から離れないように、毎日趣味でのプログラミングも欠かさない。毎日何かを吸収しないと気がすまない。

INDEX
第5回:APIとの連携・脆弱性への対応
  API連携
  マッシュアップの仕組み
CSRF(クロスサイトリクエストフォージェリ)の脆弱性への対処
  今回のまとめ
ソーシャル・ネットワーキング・サービスのビジネス利用
第1回 ソーシャル・コミュニティ・マーケティングとは?
第2回 ソーシャル・コミュニティ・マーケティングを実践しよう!
第3回 ソーシャル・コミュニティ・マーケティングの目的を達成するには
第4回 ソーシャル・コミュニティ・マーケティングを支える仕組み
第5回 APIとの連携・脆弱性への対応

人気記事トップ10

人気記事ランキングをもっと見る