「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>OAuth 2.0 Threat Model and Security Considerations]] * 目次 [#g74fa095] #contents *概要 [#l9cda007] OAuth 2.0 Threat Model and Security ConsiderationsのRoleに着目した脅威モデル。 *Client [#ef02f106] Clientに対する攻撃 **client_secretの入手 [#he26ebe9] ***影響 [#f31879b2] -Authorization Serverのクライアント認証のバイパスによるアクセストークン・リクエストが可能になる。 --Client Credentialsグラント種別によるアクセストークン・リクエスト。 --リプレイ攻撃によるアクセストークン・リクエスト。 ---Authorization Codeグラント種別のcodeによるaccess_tokenの取得 ---refresh_tokenによるaccess_token取得 -access_tokenの漏洩により、~ Resource Ownerの、そのscopeのリソースにアクセス可能になる。 ***攻撃 [#re7b0c76] -ソースコード(リポジトリ)またはバイナリから取得 -インストールされた(デプロイ済み)クライアントから取得 --web site (web server) --device (native application) ***対策 [#h5cf70d2] -ソースコード(リポジトリ)またはバイナリから取得~ 下記のインストール固有のclient_secretを使用する。 -インストールされた(デプロイ済み)クライアントから取得 --Webサーバ~ システムのセキュリティ対策を実施する。 --ネイティブアプリ~ 安全なローカルストレージに保存 -パブリック・クライアント --脆弱 or 悪意のあるパブリック・クライアントに公開しない。 --パブリック・クライアントの自動認可を許可しない(ユーザの同意を要求する)。 -client_secret取り消し処理の実装。 **refresh_tokenの入手 [#hf690590] ***影響 [#q32f5f26] -refresh_tokenを用いたアクセストークン・リクエストが可能になる。~ (access_token, refresh_tokenの開示) -ただし、[[client_secret>#he26ebe9]]も必要。 ***攻撃 [#x0940232] -Web applicationから -device (native application) --ファイルシステムから --deviceを盗難してから --deviceを複製してから ***対策 [#re6dbcc8] -上記から取得されないようにする。 -refresh_tokenのローテーション -ユーザやデバイスを特定できる場合、 --refresh_token取り消し処理の実装。 --[[client_secret>#he26ebe9]]取り消し処理の実装。 -device (native application)の場合、 --秘密を安全な記憶域に保管する。 --デバイスロックを使用する。 --トークンにデバイス識別子を同梱 -client_idにトークンをバインド(取り消し処理) **access_tokenの入手 [#a1503bb7] ***影響 [#p9ed9279] そのスコープのリソースにアクセス可能になる。 ***攻撃 [#dd9400d4] [[refresh_tokenの入手と同じ攻撃>#x0940232]]。 ***対策 [#oaf650d4] -有効期間を短くする。 -スコープを制限する。 -一時メモリやプライベート・メモリに保持する。 -その他、[[refresh_tokenの入手と同じ対策>#re6dbcc8]]。 **組込ブラウザの利用によるフィッシング [#d3b27ac8] ***影響 [#p3666314] -ユーザ・アカウントを含めたあらゆる情報が取得され、 -それが悪用される可能性がある。 ***攻撃 [#v7eba959] ブラウザによるあらゆる情報のフィッシング ***対策 [#dacdd1ee] clientタイプの検証(例えば、GoogleはWebViewをブロックしている) **オープンリダイレクタ [#o8844619] 登録があるので、Client側にもあるが、~ [[Authorization ServerのAuthorization Endpoint>#mb0f0219]]側を参照。 *Authorization Endpoint (Authorization Server) [#eaff28b5] Authorization ServerのAuthorization Endpointに対する攻撃 **偽造Authorization Serverによるフィッシング [#e5716621] ***影響 [#v6a2fe62] -実装側ではなく、利用者側の問題だが、 -誘導されるとユーザ・アカウントのフィッシングされ、なんでもできるようになる。 ***攻撃 [#i6228cf9] -偽造Clientのスターターで、誤った、偽造Authorization Serverに飛ぶ。 -偽造Authorization Serverによりユーザ・アカウントがフィッシングされる。 ***対策 [#pa0bb6ea] -SSL/TLS(サーバ証明)の利用 -ユーザの教育(偽造Authorization Serverの識別) **悪意のあるClientに大きなアクセス権を与えてしまう [#u4ee57c0] ***影響 [#l39ca2ca] 悪意のあるClientが、不要に大きなscopeを持ったトークンを取得できる。 ***攻撃 [#lfd61396] -パブリック・クライアントが登録される。 -悪意のあるClientのスターターを起動させる。 -不用意に大きなscopeを要求する。 ***対策 [#s6dcb449] -client_idに対して --認可画面を表示する(promptパラメタによらず)。 --許可するscopeをチェックする。 -ClientのTypeよって許可するscopeをチェックする。 --code : 認可画面を表示。 --token : (通常、)認可画面が表示しない。 **悪意のあるClientに既存ログイン・セッションで権限を与えてしまう [#t0fc9494] ***影響 [#o109fdf9] ログイン・セッションが生きている場合、~ ログイン画面、認可画面、なにも表示されずに権限を与える。 ***攻撃 [#wa40aec0] -パブリック・クライアントが登録される。 -悪意のあるClientのスターターを起動させる。 ***対策 [#xc1ef149] -自動再認証の抑止。 -自動再認証によって得られたアクセストークンの範囲の制限。 **オープンリダイレクタ [#mb0f0219] ***影響 [#l0449bd3] codeや、access_tokenの入手に繋がる。 -code : Authorization Codeグラント種別~ codeは、実装によるが[[client_secret>#he26ebe9]]も必要。 -access_token : Implicitグラント種別~ [[access_tokenは、そのまま利用可能なので影響度が大きい。>#a1503bb7]] ***攻撃 [#hbcafb5a] redirect_uriのインジェクションで攻撃者のサイトに誘導。 ***対策 [#yc51a4f8] -redirect_uriのフルパス登録 -redirect_uriのフルパス検証 *Token Endpoint (Authorization Server) [#c71ce08a] Authorization ServerのToken Endpointに対する攻撃 **access_tokenの盗聴 [#z740f86b] ***影響 [#ic513655] 影響は、[[コチラ>#a1503bb7]]と同じ。 ***攻撃 [#oca8c65a] 盗聴 ***対策 [#ff6fbc1d] -SSL/TLSの利用 -SSL/TLSの利用できない場合。 --有効期間を短くする。 --スコープを制限する。 **DBからaccess_tokenを盗難 [#q4548fa9] ***影響 [#q1b21783] すべての[[access_tokenの開示>#a1503bb7]] ***攻撃 [#e1a0cd43] -データベースへのアクセス権を取得 -SQLインジェクション攻撃 ***対策 [#me5f0e23] -システムのセキュリティ対策を実施 -標準のSQLインジェクション対策を実施 -access_tokenハッシュのみを格納 **DBからclient_secretを盗難 [#w147d517] ***影響 [#ub531f6c] すべての[[client_id / client_secretの開示>#f31879b2]] ***攻撃 [#g6911933] -データベースへのアクセス権を取得 -SQLインジェクション攻撃 ***対策 [#k9db948e] -システムのセキュリティ対策を実施 -標準のSQLインジェクション対策を実施 **client_secretのオンライン推測 [#w016901a] ***影響 [#i9e52064] 単一の[[client_id / client_secretの開示>#f31879b2]] ***攻撃 [#d451391d] 有効な client_id / client_secretのオンライン推測 ***対策 [#v4adde7e] -client_secretに高いエントロピーを使用 -[[強力なクライアント認証>JWT bearer token authorizationグラント種別]] -(クライアント認証の)アカウント・ロック **client_id, client_secretの盗聴 [#b6500536] ***影響 [#ic513655] 影響は、[[コチラ>#f31879b2]]と同じ。 ***攻撃 [#oca8c65a] 盗聴 ***対策 [#ff6fbc1d] -SSL/TLSを利用する。 -平文認証を使用しない代替認証を使用する。 ---- Tags: [[:認証基盤]], [[:クレームベース認証]], [[:OAuth]]