Successfully reported this slideshow.
Your SlideShare is downloading. ×

Idcon11 implicit demo

Advertisement

More Related Content

Slideshows for you

Advertisement
Advertisement

Related Books

Free with a 30 day trial from Scribd

See all

Idcon11 implicit demo

  1. 1. OpenID Connect Demo IdCon #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 Server Client 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 Server 4. 合鍵を使って プロフィール情報 のロッカーに アクセス 2. Serverさん、 ロッカーの 3. 合鍵あげます 合鍵ください Client 1. ログインしたい End User
  14. 14. 14 OAuth : Implicit Flow Server 4. 合鍵を使って ログイン プロフィール情報 のロッカーに アクセス 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 Server Client 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 Evil 4. 合鍵を使って Client プロフィール情報 3.こっそり のロッカーに 別の合鍵 アクセス 2. Serverさん、 あげます ロッカーの 合鍵ください Client 1. ログインしたい End User
  27. 27. 28 OAuth : Implicit Flow Server Evil 4. 合鍵を使って Client ログイン プロフィール情報 3.こっそり のロッカーに 別の合鍵 アクセス 2. Serverさん、 あげます 成功??? ロッカーの 合鍵ください Client 1. ログインしたい End User
  28. 28. サイトAがもらったAccess Tokenでサイト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. 43 OpenID Connect : Implicit Flow Server Client 1. ログインしたい End User
  43. 43. 44 OpenID Connect : Implicit Flow Server 2. Serverさん、 証明書と合鍵 ください Client 1. ログインしたい End User
  44. 44. 45 OpenID 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 User 4. 証明書使って ログイン処理
  46. 46. 47 OpenID Connect : Implicit Flow Server 5. 合鍵を使って プロフィール情報 のロッカーに アクセス 3. 合鍵と証明書 2. Serverさん、 証明書と合鍵 あげます ください Client 1. ログインしたい End User 4. 証明書使って ログイン処理
  47. 47. 48 OAuth : Implicit Flow Server 5. 合鍵を使って これで プロフィール情報 のロッカーに アクセス 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あたり)

×