Idcon11 implicit demo

4,046 views

Published on

OAuth Implicit Flow Demo at idcon#11

Published in: Technology
0 Comments
11 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,046
On SlideShare
0
From Embeds
0
Number of Embeds
29
Actions
Shares
0
Downloads
0
Comments
0
Likes
11
Embeds 0
No embeds

No notes for slide

Idcon11 implicit demo

  1. 1. OpenID Connect DemoIdCon #11 IDENTITY CONFERENCE @ritou
  2. 2. やりません
  3. 3. Implicit Flowを考える会IdCon #11 IDENTITY CONFERENCE @ritou
  4. 4. OAuth 2.0にはImplicit Flowってのがありまして
  5. 5. Client Secretを安全に保管できない場合に 使うことになってます
  6. 6. 使いどころ• JavaScriptをインクルードしてClient ID だけ指定して呼び出せばOAuthの処 理やっちゃう系• iOS/Androidのアプリやデスクトップ PCなど、、リバースエンジニアリング 可能なクライアント
  7. 7. 今回問題となるのは、
  8. 8. いわゆるOAuth認証
  9. 9. OAuth 2.0 + Profile API で SSO をImplicitでやる場合
  10. 10. 10 OAuth : Implicit Flow ServerClient 1. ログインしたい End User
  11. 11. 11 OAuth : Implicit Flow Server 2. Serverさん、 ロッカーの 合鍵くださいClient 1. ログインしたい End User
  12. 12. 12 OAuth : Implicit Flow Server 2. Serverさん、 ロッカーの 3. 合鍵あげます 合鍵くださいClient 1. ログインしたい End User
  13. 13. 13 OAuth : Implicit Flow Server4. 合鍵を使ってプロフィール情報 のロッカーに アクセス 2. Serverさん、 ロッカーの 3. 合鍵あげます 合鍵ください Client 1. ログインしたい End User
  14. 14. 14 OAuth : Implicit Flow Server4. 合鍵を使って ログインプロフィール情報 のロッカーに アクセス 2. Serverさん、 成功 ロッカーの 3. 合鍵あげます 合鍵ください Client 1. ログインしたい End User
  15. 15. これがそのまま行われる 合鍵=Access Token
  16. 16. 見せましょう
  17. 17. 材料• OAuth 2.0のImplicit Flowを利用するClient – Sample Client A できあがったものがこちらです。 https://r- weblife.sakura.ne.jp/idcon11/SampleA.php
  18. 18. Access Tokenだけで簡単にログインさせることが できました。
  19. 19. Access Tokenだけで簡単にログインさせることが できました。
  20. 20. AccessTokenに紐づく人を 認証された人として 扱っています
  21. 21. もし、サンプルサイトAの管理者が 悪いことを考えたら
  22. 22. 「うちでもらったAccess Token よそでも使えるのでは?」
  23. 23. 24 OAuth : Implicit Flow ServerClient 1. ログインしたい End User
  24. 24. 25 OAuth : Implicit Flow Server 2. Serverさん、 ロッカーの 合鍵くださいClient 1. ログインしたい End User
  25. 25. 26 OAuth : Implicit Flow Server Evil Client 3.こっそり 別の合鍵 2. Serverさん、 あげます ロッカーの 合鍵くださいClient 1. ログインしたい End User
  26. 26. 27 OAuth : Implicit Flow Server Evil4. 合鍵を使って Clientプロフィール情報 3.こっそり のロッカーに 別の合鍵 アクセス 2. Serverさん、 あげます ロッカーの 合鍵ください Client 1. ログインしたい End User
  27. 27. 28 OAuth : Implicit Flow Server Evil4. 合鍵を使って Client ログインプロフィール情報 3.こっそり のロッカーに 別の合鍵 アクセス 2. Serverさん、 あげます 成功??? ロッカーの 合鍵ください Client 1. ログインしたい End User
  28. 28. サイトAがもらったAccessTokenでサイトBのレスポンス中のAccessTokenを置き換える
  29. 29. やりましょう
  30. 30. 材料• OAuth 2.0のImplicit Flowを利用するClient – Sample Client A – Sample Client B• 悪い管理人 –A できあがったものがこちらです。 https://r-weblife.sakura.ne.jp/idcon11/SampleB.php
  31. 31. Access Tokenだけで別人としてログインさせることが できました。
  32. 32. これはやばい?
  33. 33. Implicit FlowをDisってるわけではない
  34. 34. フラグメントで受け取った AccessTokenを信用するしかないしくみだし
  35. 35. Access Tokenはリソースアクセスのためのもの
  36. 36. わかっててProfile APIの結果でログインさせますか? って話
  37. 37. では、そういうClientにログインさせたい場合は どうすれば?
  38. 38. そこでOpenID Connect
  39. 39. どう違うのか?
  40. 40. OpenID Connectでは、認証結果の受け渡しに ID Tokenを使う
  41. 41. ID Token=紹介状
  42. 42. 43OpenID Connect : Implicit Flow Server Client 1. ログインしたい End User
  43. 43. 44OpenID Connect : Implicit Flow Server 2. Serverさん、 証明書と合鍵 ください Client 1. ログインしたい End User
  44. 44. 45OpenID Connect : Implicit Flow Server 2. Serverさん、 3. 合鍵と証明書 証明書と合鍵 あげます ください Client 1. ログインしたい End User
  45. 45. 46 OpenID Connect : Implicit Flow Server 2. Serverさん、 3. 合鍵と証明書 証明書と合鍵 あげます ください Client 1. ログインしたい End User4. 証明書使って ログイン処理
  46. 46. 47 OpenID Connect : Implicit Flow Server5. 合鍵を使ってプロフィール情報 のロッカーに アクセス 3. 合鍵と証明書 2. Serverさん、 証明書と合鍵 あげます ください Client 1. ログインしたい End User 4. 証明書使って ログイン処理
  47. 47. 48 OAuth : Implicit Flow Server5. 合鍵を使って これでプロフィール情報 のロッカーに アクセス 3. 合鍵と証明書 2. Serverさん、 いける? 証明書と合鍵 あげます ください Client 1. ログインしたい End User 4. 証明書使って ログイン処理
  48. 48. ID Tokenの例• eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3 MiOiJodHRwOlwvXC 9zZXJ2ZXIuZXhhbXBsZS5jb20iLCJ1c2VyX2lkIjoi MjQ4Mjg5NzYxMDAxIiwiYXVkIjoiaH R0cDpcL1wvY2xpZW50LmV4YW1wbGUuY29tI iwiZXhwIjoxMzExMjgxOTcwfQ.eDesUD0vzDH 3T1G3liaTNOrfaeWYjuRCEPNXVtaazNQ
  49. 49. ID Tokenの例• eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3 意味不明 MiOiJodHRwOlwvXC 9zZXJ2ZXIuZXhhbXBsZS5jb20iLCJ1c2VyX2lkIjoi MjQ4Mjg5NzYxMDAxIiwiYXVkIjoiaH R0cDpcL1wvY2xpZW50LmV4YW1wbGUuY29tI iwiZXhwIjoxMzExMjgxOTcwfQ.eDesUD0vzDH 3T1G3liaTNOrfaeWYjuRCEPNXVtaazNQ
  50. 50. ID Tokenの中身• iss : Server Identifier• user_id :• aud : Client Identifier• exp : (有効期限)• acr : 認証レベルなど• nonce : (リプレイアタック防ぐための文字列)これらをJSON形式にして署名つけたもの
  51. 51. ID Tokenを使うメリット• Server,Client,ユーザーID,nonceを含むため、 Clientは自ら送ったリクエストに対するレスポ ンスだということを確認できる
  52. 52. OpenID ConnectによってAccess Token置き換え攻撃に気づけるのかやってみた
  53. 53. 材料• OAuth 2.0のImplicit Flowを利用するClient – Sample Client A• OpenID ConnectのImplicit Flowを利用するClient – Sample Client C• 悪い管理人 –A できあがったものがこちらです。 https://r-weblife.sakura.ne.jp/idcon11/SampleC.php
  54. 54. ID Tokenを使うことでAccess Token置き換え攻撃 にも気づける
  55. 55. OpenID Connect やりましょう
  56. 56. いや、みなさん、他にも言いたいこと あると思う
  57. 57. ID Tokenを置き換えられないの?
  58. 58. ID Tokenを置き換えられないの? ↓中のClientIDやらを見て検証すれば気づくはず
  59. 59. Access Tokenとの組み合わせも 確認できないよね?
  60. 60. Access Tokenとの組み合わせも 確認できないよね? ↓ ID Tokenに Access Tokenのhashつっこむ のを検討中
  61. 61. 続きはまたあとで! Twitter/Facebook/Google+ などで質問受け付けます(@_nat,@nov,@ritouあたり)

×