Slide 1

Slide 1 text

OpenID Connect活⽤時の なりすまし攻撃対策の検討 湯浅 潤樹 奈良先端科学技術⼤学院⼤学 サイバーレジリエンス構成学研究室 2024/01/19 OpenID Summit Tokyo 2024@渋⾕ストリームホール

Slide 2

Slide 2 text

2 湯浅 潤樹(Junki Yuasa) ⾃⼰紹介 l 奈良先端科学技術⼤学院⼤学 M2 l 趣味は散歩, ランニング, 温泉, コメダ l OpenID Connectのセキュリティに関する研究 l OIDC実装の脆弱性検証ツール OSBT[1] l OIDC利⽤時のなりすまし攻撃対策 l SECCON Beginners l セキュリティ教育活動 X : @melonattacker [1] https://github.com/oidc-scenario-based-tester/osbt

Slide 3

Slide 3 text

3 OpenID Connect活⽤時のなりすまし攻撃対策 本⽇の発表内容 [2] https://qiita.com/melonattacker/items/ba6718feb8864dbdd2bf 2023年の#iddance アド ベントカレンダーで記事 [2]を書きました 本⽇は記事の内容+αな話 をします

Slide 4

Slide 4 text

4 ソーシャルログインの⼿段として広く普及している ソーシャルログインにおけるOpenID Connectの活⽤ 通常のログイン ソーシャルログイン webサービスA webサービスB webサービスC 認証情報 認証情報 認証情報 webサービスA webサービスB webサービスC 認証情報 アカウント管理の負担⼤ アカウント管理の負担⼩ OpenID Connect

Slide 5

Slide 5 text

5 OpenID Connect利⽤時の対象ユースケース 「Googleでログイン」ボタンを押して認証開始

Slide 6

Slide 6 text

6 OpenID Connect利⽤時の対象ユースケース メールアドレス, パスワードを送信してIdPに認証

Slide 7

Slide 7 text

7 OpenID Connect利⽤時の対象ユースケース IDトークンをブラウザ経由で受け取り, RPに送信して認証 ユーザの属性情報 メールアドレス, ユーザ識別⼦など IdPによる署名 +署名を検証する ための情報 IDトークン RPにおけるユーザ認証で使⽤ response_type=id_token を想定

Slide 8

Slide 8 text

8 OpenID Connect利⽤時の対象ユースケース 認証が完了すると, セッショントークンが返送される ユーザの セッション識別⼦ セッショントークン RPにおけるユーザの 識別, 認可に使⽤

Slide 9

Slide 9 text

9 OpenID Connect利⽤時の対象ユースケース 認証後はセッショントークンを使⽤してリクエストを認可

Slide 10

Slide 10 text

10 攻撃者は窃取したIDトークンを⽤いてなりすましが可能 認証時のIDトークンのみを⽤いた検証の問題点 Webサイト (RP) 窃取したIDトークン ログイン 正規ユーザとして認証 ユーザ真正性が保証されない 攻撃者 正規のセッション トークン

Slide 11

Slide 11 text

11 攻撃者は窃取したセッショントークンを⽤いてなりすましが可能 認証後のセッショントークンのみを⽤いた検証の問題点 Webサイト (RP) 窃取したセッション トークン 認証後の操作 正規ユーザとしてWeb サイトを利⽤ ユーザ真正性が保証されない 攻撃者

Slide 12

Slide 12 text

12 なりすまし攻撃についての問題の原因分析 根本原因 : トークンの送信が本⼈によるものかどうかを 考慮しない なりすましを防御するためにはトークンに加えて追加の検証が必要 正規ユーザ 攻撃者 Webサイト (RP) トークン 窃取したトークン 許可 許可

Slide 13

Slide 13 text

13 研究⽬的 ID/セッショントークンを⽤いたなりすましを防ぐ機構 OIPM: OpenID Connect Impersonation Prevention Mechanism[3] 正規ユーザ 攻撃者 Webサイト (RP) トークン 窃取した トークン 許可 拒否 アクセス 制御機構 OIPM [3] https://github.com/melonattacker/oidc-access-control

Slide 14

Slide 14 text

14 IDトークンを⽤いたなりすまし: IDトークンの窃取・使⽤ RP 正規ユーザの ブラウザ IdP 攻撃者 XSS経由で窃取 端末を侵害して窃取 脆弱性 脆弱性 正規の IDトークン 正規の IDトークン 認証フロー経由で窃取 攻撃者は様々な⽅法で正規ユーザのIDトークンを窃取

Slide 15

Slide 15 text

15 IDトークンを⽤いたなりすまし: IDトークンの窃取・使⽤ 別のRP RP 攻撃者 正規の IDトークン IDトークンを窃取したRPに送信 窃取したIDトークンを2種類のRPで使⽤ 正規の IDトークン 同じRP識別⼦(aud)を持つ IDトークンを許可する別のRPに送信

Slide 16

Slide 16 text

16 IDトークンを⽤いたなりすまし: 認証情報の窃取・使⽤ RP IdP 攻撃者 正規ユーザの認証情報を⽤いてIDトークン取得・使⽤ 正規の 認証情報 攻撃者の ブラウザ 正規の IDトークン 取得したIDトークンを 送信して認証

Slide 17

Slide 17 text

17 IDトークンを⽤いたなりすまし: IdP署名鍵の窃取・使⽤ RP IdP 攻撃者 IdPの署名鍵を⽤いて正規ユーザのIDトークンを作成・使⽤ 脆弱性 IdP署名鍵 正規の IDトークン IdPを侵害して署名鍵を窃取 正規のIDトークンを作成 作成したIDトークンを 送信して認証

Slide 18

Slide 18 text

18 IDトークンを⽤いたなりすまし攻撃の既存対策⼿法とその課題 対策⼿法 概要 真正性の 保証 IDトークンの 窃取・使⽤へ の耐性 認証情報の 窃取・使⽤ への耐性 IdP署名鍵の 窃取・使⽤ への耐性 ユーザの 端末侵害 への耐性 OIDCのnonce値 による対策 nonce値を 使⽤して再送 を防ぐ なし あり ※仕様上は 防げる なし なし なし Openpubkey[4] (追加認証なし) 署名検証で なりすましを 防ぐ あり あり なし なし なし Openpubkey[4] (追加認証あり) 署名検証+ 他パーティに よる認証 あり あり あり あり なし ユーザの端末侵害がなされる場合になりすましを防げない [4] Ethan Heilman, Lucie Mugnier, Athanasios Filippidis, Sharon Goldberg et al, "OpenPubkey: Augmenting OpenID Connect with User held Signing Keys", Cryptology ePrint Archive, 2023.

Slide 19

Slide 19 text

19 IDトークンを⽤いたなりすまし攻撃への対策 ユーザ リライング パーティ (RP) メールアドレス所有確認 (本⼈確認) ユーザ登録 IDトークン 秘密鍵 永続的な秘密鍵を ユーザに付与 秘密鍵の所有を確認して本⼈確認 秘密鍵の 所有証明 ログイン IDトークン 原因 : IDトークンの送信が本⼈によるものかどうかを考慮しない 検証 : ユーザ登録時に与える情報のログイン時の所有検証

Slide 20

Slide 20 text

20 IDトークンを⽤いたなりすまし攻撃への対策 ユーザ Webサイト (RP) ユーザ登録時 メールアドレス所有確認 (本⼈確認) IDトークン ユーザ登録の際に秘密鍵と公開鍵を作成 公開鍵 公開鍵のみRPに送信 秘密鍵 公開鍵 秘密鍵, 公開鍵を作成 パスワードレス認証規格 のFIDOを利⽤ ※画像 : https://ftsafe.co.jp/products/fido/ 認証デバイス に秘密鍵を保存 (窃取は困難) ※

Slide 21

Slide 21 text

21 IDトークンを⽤いたなりすまし攻撃への対策 Webサイト (RP) 認証時(ログイン) 公開鍵 署名を検証 IDトークン 署名 署名を送信 ユーザ 秘密鍵を⽤いて 署名作成 秘密鍵 署名作成時 のジェスチャ (PIN, 指紋等) ユーザ登録の際に作成した秘密鍵の所有を署名で確認 署名の検証で 秘密鍵の所有を確認

Slide 22

Slide 22 text

22 セッショントークンを⽤いたなりすまし : XSSによる窃取・使⽤ RP 正規ユーザの ブラウザ 攻撃者 XSS経由で窃取 脆弱性 正規の セッション トークン XSS経由でセッショントークンを窃取 窃取したセッショントークンを 攻撃者のブラウザから送信

Slide 23

Slide 23 text

23 セッショントークンを⽤いたなりすまし : 端末侵害による窃取・使⽤ RP 正規ユーザの ブラウザ 攻撃者 マルウェアなどを介して 端末を侵害 正規の セッション トークン ユーザ端末の侵害によりセッショントークンを窃取 窃取したセッショントークンを 正規ユーザのブラウザから送信

Slide 24

Slide 24 text

24 セッショントークンを⽤いたなりすまし攻撃の既存対策⼿法とその課題 対策⼿法 概要 真正性の保証 XSSによる 窃取・使⽤ への耐性 ユーザの 端末侵害 への耐性 SessionShield[5] ホスト側の仕組みで 誤送信を防ぐ なし あり なし Cookiext[6] なし あり なし One-time cookies[7] 署名検証で なりすましを防ぐ あり あり なし SecSess[8] あり あり なし ユーザの端末侵害がなされる場合になりすましを防げない [5] Nick Nikiforakis, Wannes Meert, Yves Younan, Martin Johns, Wouter Joosen, "SessionShield: Lightweight Protection against Session Hijacking", In Proceedings of the 3rd International Symposium on Engineering Secure Software and Systems (ESSoS 2011), 2011. [6] Michele Bugliesi, Stefano Calzavara, Riccardo Focardi, Wilayat Khan, "CookiExt: Patching the browser against session hijacking attacks", Journal of Computer Security, vol. 23, no. 4, pp. 509-537, 2015. [7] Italo Dacosta, Saurabh Chakradeo, Mustaque Ahamad, Patrick Traynor, "One-time cookies: Preventing session hijacking attacks with stateless authentication tokens", ACM Transactions on Internet Technology, vol. 12, no. 1, pp. 1-24, 2012. [8] Philippe De Ryck, Lieven Desmet, Frank Piessens, Wouter Joosen, "SecSess: Keeping your Session Tucked Away in your Browser", In Proceedings of the 30th Annual ACM Symposium on Applied Computing (SAC 2015), 2015.

Slide 25

Slide 25 text

25 セッショントークンを⽤いたなりすまし攻撃への対策 原因 : セッショントークンの送信が本⼈によるものかどうかを考慮しない 検証 : 認証時に与える情報の認証後における所有検証 Webサイト (RP) 秘密鍵, 秘密情報の所有検証による 本⼈確認 ⼀時的な秘密情報をユーザに付与 認証時 秘密鍵の 所有証明 IDトークン ジェスチャ必須 認証後 機密性の⾼い操作 のみジェスチャ要求 秘密情報の 所有証明 セッション トークン 秘密鍵の 所有証明

Slide 26

Slide 26 text

26 セッショントークンを⽤いたなりすまし攻撃への対策 : 通常時 Ϣʔβ 31 IPアドレス, デバイス情報を保存 署名 IDトークン 公開鍵 秘密情報 セッショントークン セッショントークンと秘密情報を返送 ユーザ認証フェーズ nonce値を要求 nonce値を⽣成, 保存 認証後フェーズ セッショントークンとともにハッシュ値を送信 ハッシュ値 セッショントークン nonce値 nonce値 秘密情報とnonce値 からハッシュ値⽣成 ハッシュ値 を照合 IPアドレス, デバイス情報 の⼀致検証 メモリ上 に保存 秘密情報 ハッシュ値 の再使⽤を防ぐため 正規ユーザの端末 以外からのアクセス を拒否するため ハッシュ値の照合で 秘密情報の所有を検証

Slide 27

Slide 27 text

27 セッショントークンを⽤いたなりすまし攻撃への対策 : 機密性の⾼い操作 Ϣʔβ 31 認証後フェーズ (機密性の⾼い操作) nonce値を要求 nonce値 nonce値を⽣成, 保存 nonce値 ハッシュ値の再送攻撃を防ぐ 秘密情報とnonce値 からハッシュ値⽣成 ハッシュ値の照合 IPアドレス,デバイス情報 の⼀致検証 + 公開鍵を⽤いた署名検証 秘密鍵を⽤いて署名⽣成 秘密鍵 ジェスチャ (PIN, 指紋等) セッショントークンとともに ハッシュ値, 署名を送信 ハッシュ値 セッショントークン 署名 端末侵害による有効な ハッシュ値⽣成に対処

Slide 28

Slide 28 text

28 IDトークンを⽤いたなりすまし攻撃の既存対策⼿法の⽐較 対策⼿法 概要 真正性の 保証 IDトークンの 窃取・使⽤へ の耐性 認証情報の 窃取・使⽤ への耐性 IdP署名鍵の 窃取・使⽤ への耐性 ユーザの 端末侵害 への耐性 OIDCのnonce値 による対策 nonce値を 使⽤して再送 を防ぐ なし あり ※別RPへ送 信は防げない なし なし なし Openpubkey[4] (追加認証なし) 署名検証で なりすましを 防ぐ あり あり なし なし なし Openpubkey[4] (追加認証あり) 署名検証+ 他パーティに よる認証 あり あり あり あり なし 本対策⼿法 OIPM FIDOを⽤いた 署名検証+ メールアドレ ス所有確認 あり あり あり あり あり OIPMはユーザの端末侵害時にもIDトークンを⽤いたなりすましを防ぐ

Slide 29

Slide 29 text

29 セッショントークンを⽤いたなりすまし攻撃の既存対策⼿法との⽐較 対策⼿法 概要 真正性の保証 XSSによる 窃取・使⽤ への耐性 ユーザの 端末侵害 への耐性 SessionShield[1] ホスト側の仕組みで 誤送信を防ぐ なし あり なし Cookiext[2] なし あり なし One-time cookies[3] 署名検証で なりすましを防ぐ あり あり なし SecSess[4] あり あり なし 本対策⼿法 OIPM ハッシュ値検証, FIDOを⽤いた 署名検証 あり あり あり ※再認証 要求時のみ OIPMはユーザの端末侵害時にもセッショントークンを⽤いたなりすましを防ぐ

Slide 30

Slide 30 text

30 今後の課題 l ユーザの利便性についての課題 l ソーシャルログインにおいてメールアドレス所有確認を⾏うことは, ユー ザの利便性を低下させる l ユーザの利便性を低下させずに, 本⼈確認を⾏うことが望ましい l IdP署名鍵が窃取された際のユーザ登録における課題 l IdP署名鍵を⽤いてRPに未登録のユーザになりすますことが可能 l 攻撃者のメールアドレス, 正規ユーザの識別⼦を設定したIDトークンを使⽤ l この攻撃への対策を検討する必要がある 利便性の向上と未登録ユーザへのなりすましが課題

Slide 31

Slide 31 text

31 OpenID Connect利⽤時のなりすまし攻撃対策を提案 l 問題 l RPにおける認証時に不正取得したIDトークンを⽤いたなりすましが可能 l 認証後に不正取得したセッショントークンを⽤いたなりすましが可能 l 既存の対策⼿法 l ユーザの端末侵害がなされる場合になりすましを防げない l 対策⼿法 l 認証時 : FIDO秘密鍵を⽤いた署名を検証 l 認証後 : ハッシュ値の検証, IPアドレスとデバイス情報の⼀致検証 l 認証後の機密性の⾼い操作 : FIDO秘密鍵を⽤いた署名検証を追加 まとめ

Slide 32

Slide 32 text

32 参考⽂献 • [1] https://github.com/oidc-scenario-based-tester/osbt • [2] https://qiita.com/melonattacker/items/ba6718feb8864dbdd2bf • [3] https://github.com/melonattacker/oidc-access-control • [4] Ethan Heilman, Lucie Mugnier, Athanasios Filippidis, Sharon Goldberg et al, "OpenPubkey: Augmenting OpenID Connect with User held Signing Keys", Cryptology ePrint Archive, 2023. • [5] Nick Nikiforakis, Wannes Meert, Yves Younan, Martin Johns, Wouter Joosen, "SessionShield: Lightweight Protection against Session Hijacking", In Proceedings of the 3rd International Symposium on Engineering Secure Software and Systems (ESSoS 2011), 2011. • [6] Michele Bugliesi, Stefano Calzavara, Riccardo Focardi, Wilayat Khan, "CookiExt: Patching the browser against session hijacking attacks", Journal of Computer Security, vol. 23, no. 4, pp. 509- 537, 2015. • [7] Italo Dacosta, Saurabh Chakradeo, Mustaque Ahamad, Patrick Traynor, "One-time cookies: Preventing session hijacking attacks with stateless authentication tokens", ACM Transactions on Internet Technology, vol. 12, no. 1, pp. 1-24, 2012. • [8] Philippe De Ryck, Lieven Desmet, Frank Piessens, Wouter Joosen, "SecSess: Keeping your Session Tucked Away in your Browser", In Proceedings of the 30th Annual ACM Symposium on Applied Computing (SAC 2015), 2015. • 画像 • https://flaticon.com • https://ftsafe.co.jp/products/fido/