Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
OpenID Connect DemoIdCon #11   IDENTITY CONFERENCE                        @ritou
やりません
Implicit Flowを考える会IdCon #11   IDENTITY CONFERENCE                        @ritou
OAuth 2.0にはImplicit Flowってのがありまして
Client Secretを安全に保管できない場合に 使うことになってます
使いどころ• JavaScriptをインクルードしてClient ID  だけ指定して呼び出せばOAuthの処  理やっちゃう系• iOS/Androidのアプリやデスクトップ  PCなど、、リバースエンジニアリング  可能なクライアント
今回問題となるのは、
いわゆるOAuth認証
OAuth 2.0 + Profile API で SSO   をImplicitでやる場合
10     OAuth : Implicit Flow            ServerClient   1. ログインしたい    End User
11     OAuth : Implicit Flow               Server         2. Serverさん、         ロッカーの         合鍵くださいClient     1. ログインしたい  ...
12     OAuth : Implicit Flow               Server         2. Serverさん、         ロッカーの          3. 合鍵あげます         合鍵くださいClie...
13         OAuth : Implicit Flow                 Server4. 合鍵を使ってプロフィール情報 のロッカーに    アクセス          2. Serverさん、          ロッカ...
14         OAuth : Implicit Flow                 Server4. 合鍵を使って             ログインプロフィール情報 のロッカーに    アクセス          2. Serve...
これがそのまま行われる 合鍵=Access Token
見せましょう
材料• OAuth 2.0のImplicit Flowを利用するClient  – Sample Client A  できあがったものがこちらです。  https://r-    weblife.sakura.ne.jp/idcon11/Sam...
Access Tokenだけで簡単にログインさせることが     できました。
Access Tokenだけで簡単にログインさせることが     できました。
AccessTokenに紐づく人を  認証された人として     扱っています
もし、サンプルサイトAの管理者が  悪いことを考えたら
「うちでもらったAccess Token よそでも使えるのでは?」
24     OAuth : Implicit Flow            ServerClient   1. ログインしたい    End User
25     OAuth : Implicit Flow               Server         2. Serverさん、         ロッカーの         合鍵くださいClient     1. ログインしたい  ...
26     OAuth : Implicit Flow               Server    Evil                        Client                                 3....
27         OAuth : Implicit Flow                 Server    Evil4. 合鍵を使って                 Clientプロフィール情報                   ...
28         OAuth : Implicit Flow                 Server    Evil4. 合鍵を使って                 Client             ログインプロフィール情報  ...
サイトAがもらったAccessTokenでサイトBのレスポンス中のAccessTokenを置き換える
やりましょう
材料• OAuth 2.0のImplicit Flowを利用するClient  – Sample Client A  – Sample Client B• 悪い管理人  –A  できあがったものがこちらです。  https://r-weblif...
Access Tokenだけで別人としてログインさせることが      できました。
これはやばい?
Implicit FlowをDisってるわけではない
フラグメントで受け取った    AccessTokenを信用するしかないしくみだし
Access Tokenはリソースアクセスのためのもの
わかっててProfile APIの結果でログインさせますか?       って話
では、そういうClientにログインさせたい場合は   どうすれば?
そこでOpenID Connect
どう違うのか?
OpenID Connectでは、認証結果の受け渡しに   ID Tokenを使う
ID Token=紹介状
43OpenID Connect : Implicit Flow            Server Client   1. ログインしたい   End User
44OpenID Connect : Implicit Flow                Server          2. Serverさん、          証明書と合鍵          ください Client     1. ロ...
45OpenID Connect : Implicit Flow                Server          2. Serverさん、   3. 合鍵と証明書          証明書と合鍵             あげます ...
46 OpenID Connect : Implicit Flow                 Server           2. Serverさん、   3. 合鍵と証明書           証明書と合鍵             あ...
47   OpenID Connect : Implicit Flow                 Server5. 合鍵を使ってプロフィール情報 のロッカーに    アクセス                  3. 合鍵と証明書     ...
48         OAuth : Implicit Flow                 Server5. 合鍵を使って          これでプロフィール情報 のロッカーに    アクセス                  3. 合...
ID Tokenの例• eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3  MiOiJodHRwOlwvXC  9zZXJ2ZXIuZXhhbXBsZS5jb20iLCJ1c2VyX2lkIjoi  MjQ...
ID Tokenの例• eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3        意味不明  MiOiJodHRwOlwvXC  9zZXJ2ZXIuZXhhbXBsZS5jb20iLCJ1c2VyX...
ID Tokenの中身• iss : Server Identifier• user_id :• aud : Client Identifier• exp : (有効期限)• acr : 認証レベルなど• nonce : (リプレイアタック防ぐ...
ID Tokenを使うメリット• Server,Client,ユーザーID,nonceを含むため、  Clientは自ら送ったリクエストに対するレスポ  ンスだということを確認できる
OpenID ConnectによってAccess Token置き換え攻撃に気づけるのかやってみた
材料• OAuth 2.0のImplicit Flowを利用するClient  – Sample Client A• OpenID ConnectのImplicit Flowを利用するClient  – Sample Client C• 悪い管...
ID Tokenを使うことでAccess Token置き換え攻撃       にも気づける
OpenID Connect やりましょう
いや、みなさん、他にも言いたいこと  あると思う
ID Tokenを置き換えられないの?
ID Tokenを置き換えられないの?        ↓中のClientIDやらを見て検証すれば気づくはず
Access Tokenとの組み合わせも     確認できないよね?
Access Tokenとの組み合わせも     確認できないよね?              ↓          ID Tokenに Access Tokenのhashつっこむ         のを検討中
続きはまたあとで! Twitter/Facebook/Google+  などで質問受け付けます(@_nat,@nov,@ritouあたり)
Idcon11 implicit demo
Upcoming SlideShare
Loading in …5
×

Idcon11 implicit demo

OAuth Implicit Flow Demo at idcon#11

  • Be the first to comment

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あたり)

×