「[[マイクロソフト系技術情報 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]] * 目次 [#m202f7bf] #contents *概要 [#h8c47a31] OAuth 2.0 Threat Model and Security Considerationsの~ 各種役割に適用されるセキュリティ考慮事項。 *Authorization Server [#e55b2047] **code [#fdd9b505] ***対象 [#n20003b7] codeを使用したアクセストークン・リクエスト ***脅威 [#ec01e3cd] codeの不正使用(オンライン推測などによる) ***対策 [#af2ddda9] -不正使用が検出された場合、トークンを自動失効する。 -jtiで、トークンを識別して[[OAuth 2.0 Token Revocation]]で失効。 **refresh_token [#tf3e1153] ***対象 [#iae18d98] refresh_tokenを使用したアクセストークン・リクエスト ***脅威 [#db115a06] refresh_tokenの不正使用 -refresh_tokenの漏洩/盗難 -Deviceの盗難 -脆弱な、侵害されたClient -クリック・ジャッキング攻撃 -Resource Ownerの偽装 ***対策 [#t1aca042] -制限付き発行 --ポリシー ---クライアントのタイプ~ パブリック or コンフェデンシャル ---サービスのタイプ ---Resource Owner設定 --ポリシー+選好 -ローテーション処理の実装 --リフレッシュ要求ごとにrefresh_token値を変更する。 --これにより、以下の試みを自動的に検出して防止できる。 ---refresh_tokenを並行して使用 ---古いrefresh_tokenを使用 -バインド --Client識別(ClientID) --Device識別(DeviceID) -X-FRAME-OPTIONSヘッダ~ IFRAME防止によるクリックジャック攻撃の防止 -[[OAuth 2.0 Token Revocation]]で失効。 *Client [#t83200b3] **Client認証 [#u4b01da1] ***対象 [#i06a6f19] -Clientの認証 -Client ( ---> Authorization Server・Resource Serverの各Endpoint ) ***脅威 [#z01e8fcb] -脆弱なClient、~ パブリック・クライアント --client_secret漏洩 -悪意のあるClient、~ パブリック・クライアント偽装 --XSS攻撃 --codeフィッシング攻撃 --オープンリダイレクタ ***対策 [#ue0d953d] クライアント認証により、Authorization Server・Resource ServerがClientを識別する。 -脆弱なClientにclient_secretを発行しない。 -パブリック・クライアントの自動認可を許可すべきでない。 -client_id/(client_secret/)redirect_uriを要求。 --対象 ---認可リクエスト ---アクセストークン・リクエスト --要件 ---インストール固有のclient_secretを使用する。~ (DeviceにインストールするClientの場合、インストール毎に変える) ---redirect_uriのフルパス登録・検証 ---取り消し可能なclient_id/client_secret -[[強力なクライアント認証>JWT bearer token authorizationグラント種別]] **Clientセキュリティ [#eef988d2] ***対象 [#w709e12f] -Clientのセキュリティ -Client ( ---> Authorization Serverの各Endpoint ) ***脅威 [#jc7f8357] -脆弱なClientに対する攻撃 --リエンジ攻撃 --Clientの脆弱性に対する攻撃 ***対策 [#ga404253] -Clientパッケージ内にclient_secretを保存しない(デプロイごとに変更)。 -refresh_tokenストレージを信頼できるバックエンドにスワップ -サーバ:セキュリティ対策を実施 --システムのセキュリティ対策を実施 --標準のSQLインジェクション対策を実施 -モバイル: --Deviceロック(パスワード、PIN、指紋認証、顔認証) --安全なローカル・ストレージに保存 ---パーソナル分離ストレージ ---アプリケーション固有ストレージ -ClientはUserAgentセッションにstateパラメタを追加 **ClientとResource Owner間のやり取り [#vb22a0b4] ***対象 [#a29261fb] ユーザ操作 ***脅威 [#ec012fa2] -一般ユーザ(Resource Owner)にとって、認可画面の意味が不明 --認可画面で「はい」と回答した結果を理解する専門知識を持たない。 --要求の文言に微妙な違いを見ることができない。 -Device上でのソフトウェア脆弱性の脅威は強く、緩和も困難。 --WWWブラウザの脆弱性 --人気のあるClientの脆弱性 -インストールしたClientソフトウェアの使用を制限 ---一部の限定的な環境では実用的。 ---しかし、一般的な環境では実用的ではなく、~ 事実回復後のメカニズムが整備されているべき(? -自動再認証、認可画面非表示により、認証認可プロセスを隠す。 --攻撃者は、侵害されたまたは悪意のある役割上で資格情報を盗む可能性がある。 ***対策 [#i19fe730] -自動再認証、認可画面非表示の問題に解決策はなく、~ UXとセキュリティ間のトレード・オフを考慮して決定する必要がある。 -DeviceにインストールしたClientプロパティのアサート --検証できないプロパティを明示的に指摘 --特定のClientへのアクセス許可に関連するリスクをエンド・ユーザーに示す。 *Resource Server [#le69104f] Authorization: Bearer JWTで、大方、解決する。 **Authorization Headers [#la8902f2] ***対象 [#n0859146] [[Authenticated Requests>#g49766f4]] Authorization: Bearer XXXXX ***脅威 [#t85cacca] 未認証アクセス -漏洩 -または意図しない永続化 ***対策 [#ke79cc5b] Authorizationヘッダを利用し認証アクセス -HTTPプロキシとサーバによって認識され、特別に扱われる。 -これにより、漏洩または意図しない永続化の可能性が低減される。 **認証されたリクエスト [#g49766f4] ***対象 [#df0d3f91] トークン乱用 ***脅威 [#dafe4632] トークン乱用の防止。 ***対策 [#ra99d42c] 以下のような方法で、Client認証を行う。 -client_idにaccess_tokenをバインドする。 --Resource Serverはclient_idを[[クライアント証明書>OAuth 2.0 Security Considerations (General)#y533fd4f]]で検証する。~ オプションとして、リクエストを署名するケースもある。 --[[持参人切符ではなく、記名式切符>トークン#b38de47fを使用する。]]~ --[[持参人切符ではなく、記名式切符を使用する。>トークン#b38de47f]]~ この場合、トークン内の暗号化セクションにclient_secretを同梱することにより実現。 **署名されたリクエスト [#ab4b2f83] ***対象 [#o1977e50] ユーザーデータの変更/破棄 ***脅威 [#wdf8840b] キャプチャ&リプレイ ***対策 [#wa70e6ca] リクエストは -一意に識別可能にする。 -2回処理されないようにする。 *Resource Owner [#c9edb9bc] **End-User許可 [#z95f0c96] ***対象 [#p4cf22aa] -Resource OwnerによるClientの許可 -Client ( ---> Authorization Serverの各Endpoint ) ***脅威 [#w676b11a] -脆弱なClient -悪意のあるClient -オンライン推測 -オープンリダイレクタ ***対策 [#wfa63e53] -認証・認可の自動処理でクライアント認証を要求 --client_id/(client_secret/)redirect_uri --[[強力なクライアント認証>JWT bearer token authorizationグラント種別]] -インフォームド・デシジョン~ 認証・認可画面の表示 --Clientに何のscopeをどの期間許可するか? --Clientプロパティ検証 ---Webサイト名 ---アプリケーション名 -client_id/(client_secret/)redirect_uriへのバインディング --code ---- Tags: [[:IT国際標準]], [[:認証基盤]], [[:クレームベース認証]], [[:OAuth]]