Successfully reported this slideshow.
Your SlideShare is downloading. ×

OAuthで気持ちのいい アクセス制御を

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad

Check these out next

1 of 60 Ad

More Related Content

Recently uploaded (20)

Advertisement

OAuthで気持ちのいい アクセス制御を

  1. 1. OAuthで気持ちのいいアクセス制御を<br />KousukeEbihara &lt;ebihara@tejimaya.com&gt;<br />
  2. 2. Twitter 中毒の<br />みなさん<br />こんにちは<br />
  3. 3. Twitter には<br />サードパーティの<br />色んなクライアントや<br />サービスがありますね<br />
  4. 4. モバツイッター<br />http://movatwitter.jp/<br />
  5. 5. モバツイッター<br />携帯電話から Twitter を利用するためのサイト<br />メール投稿がおこなえたり、連携している画像投稿サイトに投稿した画像を表示できたりなどの多彩な機能を備える<br />
  6. 6. OpenEBI<br />http://openebi.com/<br />
  7. 7. OpenEBI<br />位置情報を飛ばして自分のルートを描いていくサイト(拙作)<br />Twitter への同時投稿が可能<br />
  8. 8. ヌイッター<br />http://nwitter.com/<br />
  9. 9. ヌイッター<br />ヌいたら報告するためのTweetツール(意味がよくわからないけど)<br />
  10. 10. ただし、<br />サービス終了済み<br />
  11. 11.
  12. 12. 悪の親玉?<br />違法性?<br />
  13. 13. 「こういう風に」のリンクを辿ってみた<br />http://takagi-hiromitsu.jp/diary/20080217.html<br />
  14. 14.
  15. 15. これは、他サイトであるところの<br />「Twitter」 のID・パスワードの入力を促している。<br />ここに、TwitterのID・パスワードを入力して<br />ボタンを押すと、(中略)定型文の書き込み操作を<br />行うという動作をする。<br />しかし、(中略)この動作は、実際にパスワードを<br />入力した人の意図に反する動作となっているようだ。 <br />このようなサイトを設置する行為は、<br />不正アクセス禁止法違反に問われるおそれが<br />あるのではないだろうか。<br />(高木浩光@自宅の日記「nwitter」の違法性について考えてみる<br />より引用)<br />
  16. 16. 「nwitter」のサイトには<br />「アカウント名やパスワード<br />などの情報は一切ヌいてません」<br />と書かれているが、<br />そういう問題ではない。<br />(高木浩光@自宅の日記「nwitter」の違法性について考えてみる<br />より引用)<br />
  17. 17. そう、今まで紹介したサービスは利用者の ID・パスワードを<br />利用することで<br />実現されています<br />
  18. 18. Twitter のID・パスワードをサービスに預けることによるデメリット(利用者)<br />Twitter を勝手に利用されてしまうかもしれない<br />(他のサービスと共通のパスワードを利用した場合)他のサービスを不正に利用されてしまうかもしれない<br />パスワードを生もしくは復号可能な状態にしておかなければならないため、サービスが SQL Injection Attack などへの脆弱性を抱えていた場合、パスワードの漏洩の危険がある<br />
  19. 19. ID・パスワードをサービスに預けることによるデメリット(運営者)<br />極めて重要な個人情報をセキュアでない形で預かることになる<br />パスワードは不正アクセス禁止法の「他人の識別符号」にあたり、これを故意か事故かに関わらず公開することは、第四条の「不正アクセス行為を助長する行為の禁止」に抵触する可能性がある(三十万円以下の罰金)<br />
  20. 20. OAuth登場以前、Twitter の投稿APIを叩くための認証は Basic 認証しかありませんでした<br />
  21. 21. Twitter 投稿用ライブラリなんかも、 Basic 認証を前提に組まれていることが多く、利用者の ID とパスワードを利用したサービスが蔓延しています<br />
  22. 22. mixiのように API を提供していないサービスでも、サードパーティ製サービスがマッシュアップ(笑)<br />したいがために、利用者の<br />ID とパスワードを入力させている例が存在します<br />
  23. 23. つまり、サードパーティ製ツールなど<br />の登場が予想されるサービスでは、<br />利用者のプライバシー保護のために<br />ID・パスワードによらない<br />API のアクセス制御が求められている<br />のではないでしょうか<br />
  24. 24. そこで颯爽と登場したOAuth<br />Twitter のOpenID実装をおこなっていた Blaine Cook 氏らが、必要としていた API アクセス権委譲に関するオープンなプロトコルが存在していないことに気づき、新たなプロトコルを作成するためのプロジェクトを開始した<br />2007 年 10 月にOAuth Core 1.0 の草案がリリースされた<br />Flickrや Twitter や Google や米 Yahoo など多くのサービスで利用されている<br />
  25. 25. OAuthを使うとどうなるの?<br />まずは使ってみよう!<br />以下の URL に突貫で作ったOAuth対応の Twitter クライアントがあるので、アクセスしてみてください!<br />http://co3k.org/twitter/<br />
  26. 26. OAuthを体感<br />サイトの注意書きをよく読んで、ボタンをクリックする<br />
  27. 27. OAuthを体感<br />Twitter のページに行き、「ubetterっつーアプリが投稿したがってるけどどーすんの?」と聞かれるけど……許可しちゃおうか?<br />
  28. 28. OAuthを体感<br />……の前に、ちゃんと本物の Twitter のサイトかどうか確認しましょう!<br />
  29. 29. OAuthを体感<br />気を取り直してボタンプッシュ<br />
  30. 30. OAuthを体感<br />うべー<br />
  31. 31. 見てわかるとおり、<br />OAuthによる認可は、<br />認証に使われる<br />ID やパスワードなどの情報<br />を必要としない<br />
  32. 32. 認可と認証の違い<br />認証は「その人であるかどうか」のチェック(Authentication)<br />認可は「その行動が許されているかどうか」のチェック(Authorization)<br />
  33. 33. 認可とは<br />OAuth (pronounced “Oh-Auth”), summarized as “your valet key for the web,&quot;<br />OAuth(オー・オウスと読みます)は、簡単に言えば、「ウェブにおけるバレットキー」のようなもので、<br />(For immediate release: OAuth Core 1.0 Specification released at Internet Identity Workshopより引用)<br />
  34. 34. バレットキーとは<br />バレットキーとは、例えば、ホテルのバレットパーキング係にキーを渡して自動車を預ける場合に使用されるキーであり、そのキーでは、ドアの解錠やエンジンの始動はできるが、トランクやグローブボックス等の収納コンパートメントを開けることができない。<br />(http://www.j-tokkyo.com/2006/E05B/JP2006-225975.shtmlより引用)<br />
  35. 35. つまりどういうこと?<br />Basic 認証のために ID とパスワードを教えるということは、相手に全権限を与えてしまうことに等しい<br />OAuthでは一部権限のみを許可するトークンを渡す形をとっている<br />Twitter では「読み書き可」「読みのみ可」の二通りの権限が選択できる<br />トークンには有効期限を設けることができる<br />
  36. 36. リダイレクトしまくりでキモイこいつら中でなにやってんの?<br />つ<br />
  37. 37. 1. リクエストトークンの取得<br />アタシ<br />ツール<br />歳?<br />23<br />まぁ今年で24<br />彼氏?<br />まぁ<br />(中略)<br />いいから<br />トモのリソースに<br />アクセスさせて<br />みたいな<br />サイト<br />a. リクエストトークン要求<br />ツール<br />うーん……<br />ちょっと聞いてみるから<br />トモ連れてきてよ<br />b. リクエストトークン発行<br />
  38. 38. 2. ユーザの承認を得る<br />ツール<br />連れてきてやった<br />みたいな<br />c. ユーザをサービスプロバイダに案内する<br />あなた本物のトモさん?<br />本当にこの人にアクセスさせて大丈夫なんだね?<br />サイト<br />d. ユーザを認証し、同意を取る<br />トモさんがいいって言うなら仕方がない。<br />e. ユーザをコンシューマに案内する<br />
  39. 39. 3. アクセストークンの取得<br />リクエストトークンはあくまで承認を得るためのものなので、<br />リソースにアクセスするためには別のトークンを用いる。<br />サイト<br />アタシ<br />ツール<br />(中略)<br />トモのリソースに<br />アクセスさせて<br />みたいな<br />f. ユーザ承認済みのリクエスト<br />トークン付きでアクセストークン<br />要求<br />ツール<br />仕方がないなあ。<br />ほら、鍵だよ<br />g. リクエストトークンを検証<br />し、アクセストークンを発行<br />
  40. 40. 4. リソースへのアクセス<br />サイト<br />h. アクセストークンを使って<br />リソースを要求アクセス<br />ツール<br />i. アクセストークンを検証し、<br />リソースへのアクセスを認める<br />
  41. 41. 補足<br />トークン付きリクエストは署名される<br />HMAC-SHA1 (Twitter はこの方式のみ対応)<br />RSA-SHA1<br />PLAINTEXT (非署名)<br />
  42. 42. なんかすごそうじゃん。じゃあとりあえずOAuth<br />使っておけばよさげだね<br />
  43. 43. 残念ながら、<br />OAuthのプロトコルには<br />Session Fixation 脆弱性<br />が存在します<br />
  44. 44. OAuthに潜む脆弱性<br />2009/04/23(海老原の誕生日!)、ソーシャルエンジニアリングの手法によりセッションを固定化できるという脆弱性がレポートされる<br />ID, パスワードや各種トークンやシークレットを盗まれるといった類の脆弱性ではない<br />プロバイダ側で対策が可能である<br />
  45. 45. どういう脆弱性か<br />通常のフロー<br />コンシューマの利用開始<br />リクエストトークンを発行<br />アクセストークンを<br />発行し、<br />リソースへアクセス<br />ユーザ<br />プロバイダにリダイレクト<br />コンシューマにリダイレクト<br />
  46. 46. どういう脆弱性か<br />攻撃フロー<br />リクエストトークンを承認<br />ユーザ<br />承認されたリクエストトークンを使い、アクセストークンを<br />発行し、<br />リソースへアクセス<br />ユーザにURLを踏ませる<br />コンシューマの利用開始<br />リクエストトークンを発行<br />攻撃者<br />プロバイダにリダイレクト<br />
  47. 47. 対策方法<br />承認されてないリクエストトークンでアクセストークンを要求した時点でリクエストトークンを無効にする<br />アクセストークンの要求に回数制限を設ける<br />同じリクエストトークンを使用して複数箇所からアクセスがあったと思われる場合、リクエストトークンを無効にする<br />コールバック URL をパラメータから渡すのではなく、登録制にする<br />Twitter が採っている対策<br />コールバック URL を用いず、コンシューマが使うキーをユーザに手入力させる<br />Yammer が採っている対策<br />
  48. 48. 対策方法<br />ただし、OAuthプロトコル自体の修正はまだおこなわれていない<br />現在どう対策するべきか協議中<br />近々修正された仕様が公開されるとかどうとか<br />アイディアがあれば是非提案してみてください!<br />
  49. 49. OpenPNE 3.1 と<br />OAuth<br />
  50. 50. OpenPNE3 ではOAuth対応が求められている<br />OpenSocial<br />WebAPI<br />このWebAPIを利用したサードパーティ製ツールを増やしていきたいですね<br />
  51. 51. OpenPNE3 のOAuth(仮)<br />管理画面から特定のアプリケーションを登録、認可(ほぼすべてのSNS内リソースへのアクセス許可)<br />SNS 全体に関わるアプリケーション:OpenSocialなど<br />コミュニティから特定のアプリケーションを登録、認可(コミュニティに関するSNS内リソースへのアクセス許可)<br />コミュニティに関わるアプリケーション:コミュニティ間のチャットなど<br />個人で特定のアプリケーションを登録、認可(その個人がアクセスできるSNS内リソースへのアクセス許可)<br />
  52. 52. OpenPNE3 は<br />6月中旬リリース(予定)の 3.1.1 でOAuthに対応します<br />
  53. 53. これでOAuthが<br />ぐっと身近に<br />なりますね!<br />6月中旬が待ち遠しいです!<br />
  54. 54. でもOAuthって<br />なんだか<br />難しそう……<br />
  55. 55. そんなことないです<br />(コンシューマは)<br />
  56. 56. いろいろライブラリ<br />が揃っている<br />(コンシューマは)<br />
  57. 57. 情報もそれなりに<br />出てきている<br />(コンシューマは)<br />
  58. 58. OAuthのプロトコルは<br />かなりシンプルなので、<br />ライブラリがなくても<br />割となんとかなりそうな<br />くらい敷居は低いはず<br />(コンシューマは)<br />
  59. 59. ということで、<br />Twitter もしくは<br />OpenPNE3 向けに<br />OAuthアプリ作って<br />みませんか?<br />
  60. 60. 質問タイム<br />

×