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.
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Mobage Connect と
Identity 関連技術への
取り組み
OpenID Summit...
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
講演者紹介	
  
!  ⽒氏名	
  
⁃  ⼭山⼝口	
  徹	
  (やまぐち	
  とおる)	...
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
本⽇日の概要	
  
!  Mobage	
  Connect	
  (OpenID	
  Serve...
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
CSRF	
  Token	
  への	
  JWT	
  の利利⽤用	
  
Mobage	
  C...
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
CSRF	
  (Cross	
  Site	
  Request	
  Forgery)	
  
!...
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
良良くある	
  CSRF	
  Token	
  の仕組み	
  
!  Page	
  A	
  ...
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
良良くある	
  CSRF	
  Token	
  の課題点	
  
!  普段使う分には⼤大した問題...
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
CSRF	
  Token	
  の	
  JWT	
  Claims	
  表現	
  
!  /t...
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Cache	
  サーバーは利利⽤用された際に使う	
  (まだ構想段階)	
  
!  基本的には	...
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Source	
  AcMon	
  と	
  DesMnaMon	
  AcMon	
  (1)	
...
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Source	
  AcMon	
  と	
  DesMnaMon	
  AcMon	
  (2)	
...
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
その他の拡張ポイント	
  
!  Tracking	
  Cookie	
  検証	
  
⁃  C...
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Access	
  Token	
  への	
  JWT	
  の利利⽤用と	
  Microserv...
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Microservices	
  と	
  Access	
  Token	
  の相性が悪い件	
 ...
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
OAuth	
  2.0	
  Token	
  IntrospecMon	
  (RFC	
  76...
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
IntrospecMon	
  API	
  の課題点	
  
!  アーキテクチャにも依るが、API...
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Access	
  Token	
  に	
  JWT	
  を使う	
  
!  Access	
 ...
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
18	
  
以降降、構想段階のお話です	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Subscribe	
  Endpoint	
  
!  Access	
  Token	
  が	
...
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Revoke	
  Event	
  の伝搬	
  
!  上記のようなシステムを組む事で	
  Re...
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Revoke	
  された	
  Token	
  情報の保持期間	
  
!  基本的には	
  C...
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Intent	
  URI	
  Scheme	
  と	
  Browser	
  –	
  NaM...
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
NaMve	
  App	
  に対する	
  OAuth	
  2/OIDC	
  1.0	
  は...
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Custom	
  URI	
  の中間者攻撃	
  
!  同じ	
  Custom	
  URI	...
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Custom	
  URI	
  の中間者攻撃への対策	
  
!  Mobage	
  Connec...
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Intent	
  URI	
  Scheme	
  (Chrome)	
  
!  Chrome	
...
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Intent	
  URI	
  Scheme	
  (Chrome)	
  
!  上記のように	
...
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
諸注意	
  
!  この仕組みは前述の通り	
  Chrome	
  for	
  Android	...
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
ご清聴ありがとうございました	
  
!  時間があれば質疑応答	
  
29	
  
Upcoming SlideShare
Loading in …5
×

Mobage Connect と Identity 関連技術への取り組み - OpenID Summit Tokyo 2015

2,875 views

Published on

OpenID Summit Tokyo 2015 での発表資料です。

Published in: Technology
  • Be the first to comment

Mobage Connect と Identity 関連技術への取り組み - OpenID Summit Tokyo 2015

  1. 1. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Mobage Connect と Identity 関連技術への 取り組み OpenID Summit 2015 November  10,  2015   Toru  Yamaguchi   Senior  Architect     Sub  Business  Unit  Head   Open  Pla=orm  Business  Unit   DeNA  Co.,  Ltd.    
  2. 2. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   講演者紹介   !  ⽒氏名   ⁃  ⼭山⼝口  徹  (やまぐち  とおる)   !  HN   ⁃  @zigorou   !  会社   ⁃  株式会社ディー・エヌ・エー   !  部署   ⁃  オープンプラットフォーム事業本部   !  役職   ⁃  副事業本部⻑⾧長  シニアアーキテクト   !  仕事   ⁃  Mobage  やその他協業案件などにおける システム設計がメイン   2  
  3. 3. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   本⽇日の概要   !  Mobage  Connect  (OpenID  Server)  の構築経験で、⼯工夫した点とし て以下の話をしていきます   ⁃  CSRF  Token  への  JWT  の利利⽤用   ⁃  Access  Token  への  JWT  の利利⽤用と  Microservices   ⁃  Intent  URI  Scheme  と  Browser  –  Native  App  連携   !  実践的な話につき  JWT  などの  Identity  技術の基本的な話はあまりし ません   3  
  4. 4. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   CSRF  Token  への  JWT  の利利⽤用   Mobage  Connect  と  Identity  関連技術への取り組み   4  
  5. 5. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   CSRF  (Cross  Site  Request  Forgery)   !  CSRF  とは上記のような攻撃⼿手法です   ⁃  例例えば、ログイン状態で所定の⼿手続きを経ないと本来出来ない⾏行行 為を強制的に⾏行行わせるといった事に使われます   !  このような攻撃が成⽴立立させない為に⾏行行う対策の⼀一つとして  CSRF  Token  の発⾏行行と検証があります   5   事前の信頼関係   (セッションの確⽴立立)   1.     2.   3.   良良くある  CSRF  の例例として、   1.  何らかの悪意のある  URL  を踏ませる   2.  正規の  Web  サーバーに対する不不正な リクエストを送出させるようなコンテ ンツを返却する   3.  ユーザーが意図しないうちに、不不正な リクエストが送信される   正規のWeb  サーバー   悪意のある  Web  サーバー  
  6. 6. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   良良くある  CSRF  Token  の仕組み   !  Page  A  で  Page  Token  を発⾏行行し、それを  Cache  Server  (例例えば   memcached  や  Redis  のようなサーバー)  に保存し、Page  Token  が 無いと  Page  B  が⾒見見れないようにする   ⁃  消費するたびに  Cache  から削除すればワンタイム性が得られる   6   hIp://goo.gl/Wfvcz0  
  7. 7. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   良良くある  CSRF  Token  の課題点   !  普段使う分には⼤大した問題ではないのですが、⼤大規模サービスだとあ ながちバカに出来ない課題があります   ⁃  CSRF  Token  の発⾏行行・検証時に  Cache  Server  とのラウンドトリ ップが必ず発⽣生してしまうこと   ⁃  また  CSRF  Token  の有効期限内、必ず  Cache  Server  に  CSRF   Token  が存在するようにしておかなければならない   •  Cache  Server  はしばしば  eviction  によってデータがロストする   ⁃  どのページで発⾏行行された  CSRF  Token  かをあまり検証していない ケースが多い   •  不不正に  CSRF  Token  が⼊入⼿手されると、クリティカルなページへのリクエ ストに利利⽤用され兼ねない   !  そこで  JWT  を利利⽤用します!   7  
  8. 8. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   CSRF  Token  の  JWT  Claims  表現   !  /typ  に  csrf_̲token  と明記し、/_̲ext  に拡張データを⼊入れています   ⁃  /_̲ext/a  は  Page  Token  の発⾏行行ページの  id   ⁃  /_̲ext/t  は  Tracking  Cookie  の  Hash  値   ⁃  /_̲ext/p  は  hidden  パラメータ等の埋め込み  (改ざん防⽌止)   8   (注意)  実際の  Mobage  Connect  の  CSRF  Token  と⼀一部フォーマットが異異なります  
  9. 9. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Cache  サーバーは利利⽤用された際に使う  (まだ構想段階)   !  基本的には  JWT  の  iat  +  有効期限に収まっているかをチェックする   ⁃  アルゴリズムでの評価   !  有効期限内の場合は  Cache  に  invalidate  情報が無い場合は未利利⽤用なので   verified  とする   ⁃  ある場合は利利⽤用済みなので  not  verified  とする   9   CSRF  Token  (JWT)  の有効期限   (受け⼊入れページごとに定義)   Cache  に  invalidate  された   JWT  の  jU  値を格納する   発⾏行行   検証   有効期限  
  10. 10. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Source  AcMon  と  DesMnaMon  AcMon  (1)   !  CSRF  Token  の  /_̲ext/a  に埋め込まれた値  sa1  に対して   ⁃  da1  では  sa1  で発⾏行行された  CSRF  Token  を受け付ける   ⁃  da2,  da3  では  Reject  される   10   Source  (sa1)   Source  (sa2)   Source  (sa3)   Dest  (da1)   accept  (sa1)   Dest  (da2)   accept  (sa2)   Dest  (da3)   accept  (sa2,  sa3)   Reject   Reject  
  11. 11. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Source  AcMon  と  DesMnaMon  AcMon  (2)   !  アクセス可能な関係値は上記のようになります   ⁃  受け⼊入れる  Action  のホワイトリストを  WAF  の  Router  設定に 記述しています   11   Source  (sa1)   Source  (sa2)   Source  (sa3)   Dest  (da1)   accept  (sa1)   Dest  (da2)   accept  (sa2)   Dest  (da3)   accept  (sa2,  sa3)  
  12. 12. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   その他の拡張ポイント   !  Tracking  Cookie  検証   ⁃  CSRF  Token  が仮に他者に奪われても  Tracking  Cookie  のハッ シュ値が⼀一致しない限りは  Reject  されます   !  埋め込みパラメータの検証   ⁃  特に  submit  前の  form  には  input[@type=“hidden”]  のような 埋め込みパラメータが良良く使われます   ⁃  これらの値が改ざんされないように、JWT  中に  object  として埋 め込み、実際に送信されたデータと⽐比較して、内容が改ざんされ ていれば  Reject  します   12  
  13. 13. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Access  Token  への  JWT  の利利⽤用と  Microservices   Mobage  Connect  と  Identity  関連技術への取り組み   13  
  14. 14. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Microservices  と  Access  Token  の相性が悪い件   !  Microservices  はサービスごとに独⽴立立したインスタンスや  DB  を持ち、 API  をインターフェースとして結合する  Thin  なやり⽅方   ⁃  そのようなケースで  Token  DB  をどう参照するのか?   14   AuthZ  Server   Token  DB   Client   Resource  Server   Token     Endpoint   1.  Token  Request   3.  Token  Response   2.  Store  Token   4.  Request  to     Resource  Server   異異なるネットワークにある   Token  DB  をどう参照するか?  
  15. 15. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   OAuth  2.0  Token  IntrospecMon  (RFC  7662)   !  Introspection  Endpoint  で  Access  Token  の検証を  AuthZ  Server   に依頼する事が出来る   ⁃  これで⼀一応  Microservices  にも対応出来るようになる   15   AuthZ  Server   Token  DB   Client   Resource  Server   Token     Endpoint   1.  Token  Request   3.  Token  Response   2.  Store  Token   6.  Lookup  Token   4.  Request  to     Resource  Server   IntrospecUon   Endpoint   5.  IntrospecUon  Request   7.  IntrospecUon  Response  
  16. 16. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   IntrospecMon  API  の課題点   !  アーキテクチャにも依るが、API  Gateway  以下でも  Access  Token  をその まま通過させて、各  Service  へのリクエストにした場合、厳密には  Service  ごとに  Access  Token  の検証が必要であろう   ⁃  速度度重視の  API  に不不要なラウンドトリップが発⽣生する   ⁃  つまり⼤大規模な  Microservices  に対して、採⽤用を躊躇わざるを得ない   !  ⼀一つの解決策として  API  Gateway  のみ  Introspection  Endpoint  を使うと なりそう   16   Client   API  Gateway   API  (1)   API  (3)   API  (2)   1.  API  Request   2.     3.     4.     5.    
  17. 17. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Access  Token  に  JWT  を使う   !  Access  Token  は  exp  を迎える前に  revoke  さえされければ、 Resource  Server  でのアルゴリズム的な検証のみで良良い   ⁃  また  /_̲ext/st  は  Scope  Token  (どんな権限があるか)   17   (注意)  実際の  Mobage  Connect  の  Access  Token  と⼀一部フォーマットが異異なります  
  18. 18. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   18   以降降、構想段階のお話です  
  19. 19. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Subscribe  Endpoint   !  Access  Token  が  revoke  された場合に  Resource  Server  側に通知出来る 仕組みを作れば良良い   ⁃  他にも  AuthZ  Server  のログインセッションが切切れたら  session_̲state  を伝搬させるなど汎⽤用的な  PubSub  があったら便便利利だと思われる   19   AuthZ  Server   Token  DB   Client   Resource  Server   Revoke   Endpoint   1.  Revoke  Request   4.  Revoke  Response   2.  Remove  Token   Subscribe   Endpoint   Revoke  Token     Subscriber   Endpoint   3.  Publish  Revoke  Event   事前に  Subscribe  Endpoint  で   Revoke  Event  を  subscribe  するための     URL  を登録しておく    
  20. 20. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Revoke  Event  の伝搬   !  上記のようなシステムを組む事で  Revoke  された  Access  Token  の  jti  値などを伝搬させて、Revoke  情報のみを各  Service  に伝える   ⁃  そうする事により、API  は  local  通信で  revoke  された  Access   Token  かどうかを確認出来るようになる   20   API   Revoked   Token  DB   (Redis)   Service   API   Revoked   Token  DB   (Redis)   Service   Revoked   Token  Publisher   (Redis)   Revoke  Token   Subscriber   Endpoint   AuthZ  Server   1.  Publish  Token   Revoked  Event   2.  Publish  to   channel   Subscribe   channel   Lookup  token   (localhost)   Lookup  token   (localhost)  
  21. 21. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Revoke  された  Token  情報の保持期間   !  基本的には  CSRF  Token  と同じコンセプトでやる   !  つまり、revoke  された  jti  だけ有効期限を迎えるまで、各  Service  の   Redis  で持てば良良い   ⁃  それ以降降は  exp  ⾒見見るだけで判断が付くため   21   Access  Token  (JWT)  の有効期限   Cache  に  revoke  された   JWT  の  jU  値を格納する   発⾏行行   Revoke   iat   exp  
  22. 22. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Intent  URI  Scheme  と  Browser  –  NaMve  App  連携   Mobage  Connect  と  Identity  関連技術への取り組み   22  
  23. 23. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   NaMve  App  に対する  OAuth  2/OIDC  1.0  は魔物   !  挙げれば切切りがない位、課題がある   ⁃  以下  AuthZ  Server  は  Browser  や別の  App  として開くと仮定   !  Native  App  にどのように  access  token  を渡すか   ⁃  Implicit  or  Authorization  Code   ⁃  Implicit  でやると  Custom  URI  の  interception  が出来てしまう   (後述)   ⁃  でも  Native  App  は  public  client  なので  client  secret  は持てな いので  Authorization  Code  は無理理では?   !  Native  App  が継続的に  access  token  を得る為の仕組みをどう実現する か   ⁃  Browser  なら定期的に  immediate  login  相当の  implicit  を続け れば良良い   ⁃  AuthZ  Server  が  Browser  や  Native  App  だと定期的にアプリ間 連携する⽻羽⽬目になる     23  
  24. 24. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Custom  URI  の中間者攻撃   !  同じ  Custom  URI  を持つ  App  が複数あったらどうなるか   ⁃  先勝ちになる   ⁃  つまり、不不正な  App  に取られると  Redirect  URI  に渡した情報が 盗まれる     24   hIp://tools.ie=.org/html/rfc7636  
  25. 25. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Custom  URI  の中間者攻撃への対策   !  Mobage  Connect  とそれを利利⽤用した  Native  SDK  でも対策が⼊入っていま す   ⁃  但しセンシティブな話なので今⽇日はプロトコルの話はしません   !  今回話すのは、この中間者攻撃を成⽴立立させないようにする⽐比較的簡単 な対策についてお話します   25  
  26. 26. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Intent  URI  Scheme  (Chrome)   !  Chrome  for  Android  の機能です   ⁃  https://developer.chrome.com/multidevice/android/intents   !  Android  の  Intent  Filter  の機能を詳細に指定して  Native  App  を起動 させる事が出来ます   26   intent:{origin}{/path}{?queries*}#Intent          {;package,action,category,component,scheme}          ;end   intent:appId/callback?          access_token=xyz123&state=abcd1234          #Intent;package=jp.or.openid;          scheme=custom-­‐scheme;end   URI   Template   URI  
  27. 27. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Intent  URI  Scheme  (Chrome)   !  上記のように  Original  URI  を  Intent  URI  Scheme  形式に書き直します   !  さらに⾚赤字の部分の  package  を明確に指定します   ⁃  この  package  は  AuthZ  Server  で事前に  Redirect  URI  のホワイトリ スト登録時に⼀一緒に登録しておきます   !  このようにする事で、不不正な  package  に対してそもそも  AuthZ  Response  を返さないようにする事が出来ます   27   custom-­‐scheme:appId/callback?          access_token=xyz123&state=abcd1234   intent:appId/callback?          access_token=xyz123&state=abcd1234          #Intent;package=jp.or.openid;          scheme=custom-­‐scheme;end   Original   URI   Intent     URI  
  28. 28. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   諸注意   !  この仕組みは前述の通り  Chrome  for  Android  独⾃自の物なので、iOS  の   Mobile  Safari  では適⽤用出来ない   ⁃  Android/iOS  共に、もっと確かな別の仕組みの導⼊入が⼤大前提   28  
  29. 29. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   ご清聴ありがとうございました   !  時間があれば質疑応答   29  

×