安全な"○○でログイン“の作り方
@ritou
NDS in Niigata #1 2014/7/13
1
自己紹介
 @ritou “秋田の猫”
 新潟市在住、渋谷区の会社にリモート勤務
 Evangelist at OpenID Foundation Japan
 #idcon 運営
 CPAN Author
 OAuth::Lite...
今日の内容
 “○○でログイン”とは
 実装するときに考えること
 気をつけてほしいこと
NDS in Niigata #1 2014/7/13
3
“○○でログイン”とは
 ソーシャルログイン
 ID連携, Identity Federation
 Twitter, Facebookなどの外部サービスのア
カウントを自サービスのアカウントに連携
する
 ログイン、新規登録のハードル...
NDS in Niigata #1 2014/7/13
5
ID連携を支える技術
 独自仕様
 OpenID 2.0
 OAuth 1.0 : Twitter
 OAuth 2.0 : Facebook, Github, …
 署名なし、モバイルアプリからの利用も想定
 OpenID Con...
NDS in Niigata #1 2014/7/13
7
引用 :
http://www.atmarkit.co.jp/fsecurity/rensai/digid01/02.html
NDS in Niigata #1 2014/7/13
8 Webサービスの場合
 Client Secretを安全に管理できる
NDS in Niigata #1 2014/7/13
9
引用: http://www.slideshare.net/matake/ayaka
NDS in Niigata #1 2014/7/13
10 モバイルアプリ、JSで動作するア
プリケーションの場合
 Client Secretを安全に管理できない
NDS in Niigata #1 2014/7/13
11
引用: http://www.slideshare.net/matake/ayaka
NDS in Niigata #1 2014/7/13
12
引用: http://www.slideshare.net/matake/ayaka
実装方法
 各SNSのSDK
 ライブラリ
 フレームワークのプラグイン
 OAuth 2.0用
 もっと汎用的なやつ
 mBaaSを利用
 Parse.com
NDS in Niigata #1 2014/7/13
13
実装するときに考えること
 ユーザーの識別子は普遍のものを利用する
 user_id, idとかで提供されるもので良い
 メールアドレスは変わるので注意
 新規登録時は属性情報を活用する
 プロフィール情報 APIを利用
デフォルト...
気をつけてほしいこと
 CSRFへの対策
 Webサービス
 Token置換攻撃への対策
 モバイルアプリ + バックエンドサービス
NDS in Niigata #1 2014/7/13
15
OAuth 2.0とCSRF
 参考
 OAuthのセキュリティ強化を目的とする拡張仕様
を導入しました
http://alpha.mixi.co.jp/2013/12020/
NDS in Niigata #1 2014/7/13
16
認可フロー
NDS in Niigata #1 2014/7/13
17
引用: http://alpha.mixi.co.jp/2013/12020/
OAuth 2.0の認可要求
 response_type(REQUIRED)
 client_id(REQUIRED)
 redirect_uri(OPTIONAL)
 scope(OPTIONAL)
 state(RECOMMEN...
CSRFが可能なケース
NDS in Niigata #1 2014/7/13
19
引用: http://alpha.mixi.co.jp/2013/12020/
stateパラメータを利用しよう
 response_type(REQUIRED)
 client_id(REQUIRED)
 redirect_uri(OPTIONAL)
 scope(OPTIONAL)
 state(RECOMM...
CSRF対策トークンとして検証
NDS in Niigata #1 2014/7/13
21
引用: http://alpha.mixi.co.jp/2013/12020/
NDS in Niigata #1 2014/7/13
22 CSRF対策トークンとして検証
引用: http://alpha.mixi.co.jp/2013/12020/
Token置換攻撃
 参考
 "なんちゃら iOS SDK" でありそうな被害例
http://oauth.jp/blog/2012/02/08/ios-sdk/
NDS in Niigata #1 2014/7/13
23
NDS in Niigata #1 2014/7/13
24
引用: http://www.slideshare.net/matake/ayaka
攻撃方法
 攻撃者
 他のOAuth Client向けに発行されたAccess
Tokenを所持している
○○占いとか
 攻撃手法
 バックエンドサーバーへのリクエストを把握
 Access Tokenを自らが所持している第3者の
...
NDS in Niigata #1 2014/7/13
26
参照 : http://www.slideshare.net/kura_lab/devsumi201413c5
NDS in Niigata #1 2014/7/13
27
参照 : http://www.slideshare.net/kura_lab/devsumi201413c5
対策
 バックエンドサーバーは受け取ったAccess
Tokenを検証
 正しいClient向けに発行されたものであることを
確認
 検証用のAPIはサービスごとに異なる…
 Access Tokenを送信しないしくみを利用
 And...
NDS in Niigata #1 2014/7/13
29
このあたりで検証!
引用: http://www.slideshare.net/matake/ayaka
おまけ : 連携キャンセル時の挙動
 エラー画面にすべき?
 正常系とみなす?
 パラメータを判断しよう
 error, error_description, error_reasonなど
ユーザーにそのまま見せるのは良くない感
ND...
キャンセル時の挙動例:timeticket.jp
NDS in Niigata #1 2014/7/13
31
パラメータをいじると…
NDS in Niigata #1 2014/7/13
32
まとめ
 “○○でログイン”で最近流行っているのは
OAuth 2.0ベースのもの
 Webサービス、モバイルアプリのそれぞれ
で気をつける点がある
NDS in Niigata #1 2014/7/13
33
ありがとうございました
NDS in Niigata #1 2014/7/13
34
宣伝: http://yapcasia.org/2014/talk/show/cc57f3ca-01b8-11e4-
b7e8-e4a96aeab6a4
Upcoming SlideShare
Loading in …5
×

安全な"○○でログイン"の作り方 @ NDS in Niigata #1

1,756 views

Published on

NDS in Niigata #1での発表資料です。
https://github.com/NagaokaDevelopersStudy/Studies/blob/master/NDSMeetUp%231.md

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

No Downloads
Views
Total views
1,756
On SlideShare
0
From Embeds
0
Number of Embeds
23
Actions
Shares
0
Downloads
7
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide

安全な"○○でログイン"の作り方 @ NDS in Niigata #1

  1. 1. 安全な"○○でログイン“の作り方 @ritou NDS in Niigata #1 2014/7/13 1
  2. 2. 自己紹介  @ritou “秋田の猫”  新潟市在住、渋谷区の会社にリモート勤務  Evangelist at OpenID Foundation Japan  #idcon 運営  CPAN Author  OAuth::Lite2,OIDC::Lite NDS in Niigata #1 2014/7/13 2
  3. 3. 今日の内容  “○○でログイン”とは  実装するときに考えること  気をつけてほしいこと NDS in Niigata #1 2014/7/13 3
  4. 4. “○○でログイン”とは  ソーシャルログイン  ID連携, Identity Federation  Twitter, Facebookなどの外部サービスのア カウントを自サービスのアカウントに連携 する  ログイン、新規登録のハードルを下げる  OpenIDとかOAuthとか NDS in Niigata #1 2014/7/13 4
  5. 5. NDS in Niigata #1 2014/7/13 5
  6. 6. ID連携を支える技術  独自仕様  OpenID 2.0  OAuth 1.0 : Twitter  OAuth 2.0 : Facebook, Github, …  署名なし、モバイルアプリからの利用も想定  OpenID Connect : Google, Salesforce  OAuth 2.0のIdentity層を拡張 各サービスは、これらの標準仕様に独自拡張を 入れたりしてなかりカオスな状態 NDS in Niigata #1 2014/7/13 6
  7. 7. NDS in Niigata #1 2014/7/13 7 引用 : http://www.atmarkit.co.jp/fsecurity/rensai/digid01/02.html
  8. 8. NDS in Niigata #1 2014/7/13 8 Webサービスの場合  Client Secretを安全に管理できる
  9. 9. NDS in Niigata #1 2014/7/13 9 引用: http://www.slideshare.net/matake/ayaka
  10. 10. NDS in Niigata #1 2014/7/13 10 モバイルアプリ、JSで動作するア プリケーションの場合  Client Secretを安全に管理できない
  11. 11. NDS in Niigata #1 2014/7/13 11 引用: http://www.slideshare.net/matake/ayaka
  12. 12. NDS in Niigata #1 2014/7/13 12 引用: http://www.slideshare.net/matake/ayaka
  13. 13. 実装方法  各SNSのSDK  ライブラリ  フレームワークのプラグイン  OAuth 2.0用  もっと汎用的なやつ  mBaaSを利用  Parse.com NDS in Niigata #1 2014/7/13 13
  14. 14. 実装するときに考えること  ユーザーの識別子は普遍のものを利用する  user_id, idとかで提供されるもので良い  メールアドレスは変わるので注意  新規登録時は属性情報を活用する  プロフィール情報 APIを利用 デフォルト値に利用 or フォーム補完  メールアドレスを有効活用する  登録時の確認機能スキップ  定期的に変更をチェックしても良いかも NDS in Niigata #1 2014/7/13 14
  15. 15. 気をつけてほしいこと  CSRFへの対策  Webサービス  Token置換攻撃への対策  モバイルアプリ + バックエンドサービス NDS in Niigata #1 2014/7/13 15
  16. 16. OAuth 2.0とCSRF  参考  OAuthのセキュリティ強化を目的とする拡張仕様 を導入しました http://alpha.mixi.co.jp/2013/12020/ NDS in Niigata #1 2014/7/13 16
  17. 17. 認可フロー NDS in Niigata #1 2014/7/13 17 引用: http://alpha.mixi.co.jp/2013/12020/
  18. 18. OAuth 2.0の認可要求  response_type(REQUIRED)  client_id(REQUIRED)  redirect_uri(OPTIONAL)  scope(OPTIONAL)  state(RECOMMENDED) NDS in Niigata #1 2014/7/13 18
  19. 19. CSRFが可能なケース NDS in Niigata #1 2014/7/13 19 引用: http://alpha.mixi.co.jp/2013/12020/
  20. 20. stateパラメータを利用しよう  response_type(REQUIRED)  client_id(REQUIRED)  redirect_uri(OPTIONAL)  scope(OPTIONAL)  state(RECOMMENDED) NDS in Niigata #1 2014/7/13 20
  21. 21. CSRF対策トークンとして検証 NDS in Niigata #1 2014/7/13 21 引用: http://alpha.mixi.co.jp/2013/12020/
  22. 22. NDS in Niigata #1 2014/7/13 22 CSRF対策トークンとして検証 引用: http://alpha.mixi.co.jp/2013/12020/
  23. 23. Token置換攻撃  参考  "なんちゃら iOS SDK" でありそうな被害例 http://oauth.jp/blog/2012/02/08/ios-sdk/ NDS in Niigata #1 2014/7/13 23
  24. 24. NDS in Niigata #1 2014/7/13 24 引用: http://www.slideshare.net/matake/ayaka
  25. 25. 攻撃方法  攻撃者  他のOAuth Client向けに発行されたAccess Tokenを所持している ○○占いとか  攻撃手法  バックエンドサーバーへのリクエストを把握  Access Tokenを自らが所持している第3者の Access Tokenに置き換える  得られるもの  第3者のログインセッションなど NDS in Niigata #1 2014/7/13 25
  26. 26. NDS in Niigata #1 2014/7/13 26 参照 : http://www.slideshare.net/kura_lab/devsumi201413c5
  27. 27. NDS in Niigata #1 2014/7/13 27 参照 : http://www.slideshare.net/kura_lab/devsumi201413c5
  28. 28. 対策  バックエンドサーバーは受け取ったAccess Tokenを検証  正しいClient向けに発行されたものであることを 確認  検証用のAPIはサービスごとに異なる…  Access Tokenを送信しないしくみを利用  Android + Googleではいろいろなしくみが用意 されている NDS in Niigata #1 2014/7/13 28
  29. 29. NDS in Niigata #1 2014/7/13 29 このあたりで検証! 引用: http://www.slideshare.net/matake/ayaka
  30. 30. おまけ : 連携キャンセル時の挙動  エラー画面にすべき?  正常系とみなす?  パラメータを判断しよう  error, error_description, error_reasonなど ユーザーにそのまま見せるのは良くない感 NDS in Niigata #1 2014/7/13 30
  31. 31. キャンセル時の挙動例:timeticket.jp NDS in Niigata #1 2014/7/13 31
  32. 32. パラメータをいじると… NDS in Niigata #1 2014/7/13 32
  33. 33. まとめ  “○○でログイン”で最近流行っているのは OAuth 2.0ベースのもの  Webサービス、モバイルアプリのそれぞれ で気をつける点がある NDS in Niigata #1 2014/7/13 33
  34. 34. ありがとうございました NDS in Niigata #1 2014/7/13 34 宣伝: http://yapcasia.org/2014/talk/show/cc57f3ca-01b8-11e4- b7e8-e4a96aeab6a4

×