「[[マイクロソフト系技術情報 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の各Endpointに適用されるセキュリティ考慮事項。
各種役割に適用されるセキュリティ考慮事項。

*code [#fdd9b505]
**対象 [#n20003b7]
*Authorization Server [#e55b2047]

**code [#fdd9b505]

***対象 [#n20003b7]
codeを使用したアクセストークン・リクエスト

**脅威 [#ec01e3cd]
codeの不正使用(オンライン推測)
***脅威 [#ec01e3cd]
codeの不正使用(オンライン推測などによる)

**対策 [#af2ddda9]
不正使用(オンライン推測)が検出された場合、トークンを自動失効する。
***対策 [#af2ddda9]
-不正使用が検出された場合、トークンを自動失効する。
-jtiで、トークンを識別して[[OAuth 2.0 Token Revocation]]で失効。

*refresh_token [#tf3e1153]
**対象 [#iae18d98]
**refresh_token [#tf3e1153]

***対象 [#iae18d98]
refresh_tokenを使用したアクセストークン・リクエスト

**脅威 [#db115a06]
***脅威 [#db115a06]
refresh_tokenの不正使用

-refresh_tokenの漏洩/盗難
-デバイスの盗難
-脆弱なクライアント
-Deviceの盗難
-脆弱な、侵害されたClient
-クリック・ジャッキング攻撃
-Resource Ownerの偽装

**対策 [#t1aca042]
***対策 [#t1aca042]
-制限付き発行
--認可タイプ
---対話型
---非対話型
--役割
---Client
---Resource Server
---Resource Owner
--ポリシー
---クライアントのタイプ~
パブリック or コンフェデンシャル
---サービスのタイプ
---Resource Owner設定
--ポリシー+選好

-ローテーション処理の実装
--refresh_tokenを並行して使用しようとする試みを自動的に検出して防止
--リフレッシュ要求ごとにrefresh_token値を変更する
--リフレッシュ要求ごとにrefresh_token値を変更する。
--これにより、以下の試みを自動的に検出して防止できる。
---refresh_tokenを並行して使用
---古いrefresh_tokenを使用

-[[失効処理の実装>OAuth 2.0 Token Revocation]]
-バインド
--Client識別(ClientID)
--Device識別(DeviceID)

-デバイス識別~
デバイスIDにバインド

-X-FRAME-OPTIONSヘッダ~
IFRAME防止によるクリックジャック攻撃の防止

*Client認証 [#u4b01da1]
**対象 [#i06a6f19]
-[[OAuth 2.0 Token Revocation]]で失効。

*Client [#t83200b3]

**Client認証 [#u4b01da1]

***対象 [#i06a6f19]
-Clientの認証
-Client ( ---> Authorization Serverの各Endpoint )
-Client ( ---> Authorization Server・Resource Serverの各Endpoint )

**脅威 [#z01e8fcb]
-脆弱なクライアント
--XSS攻撃
***脅威 [#z01e8fcb]
-脆弱なClient、~
パブリック・クライアント
--client_secret漏洩

-悪意のあるパブリック・クライアント
-悪意のあるClient、~
パブリック・クライアント偽装
--XSS攻撃
--codeフィッシング攻撃
--オープンリダイレクタ

**対策 [#ue0d953d]
***対策 [#ue0d953d]
クライアント認証により、Authorization Server・Resource ServerがClientを識別する。

-脆弱なClientに資格情報を発行しない。
-脆弱なClientにclient_secretを発行しない。
-パブリック・クライアントの自動認可を許可すべきでない。

-client_id/(client_secret/)redirect_uriを要求。

--対象
---認可リクエスト
---アクセストークン・リクエスト

--要件
---インストール固有のclient_secretを使用する。
---インストール固有のclient_secretを使用する。~
(DeviceにインストールするClientの場合、インストール毎に変える)

---redirect_uriのフルパス登録・検証
---取り消し可能なclient_id/client_secret

-[[強力なクライアント認証>JWT bearer token authorizationグラント種別]]

*End-User許可 [#z95f0c96]
**対象 [#p4cf22aa]
-End-UserによるClientの許可
-Client ( ---> Authorization Serverの各Endpoint )
**Clientセキュリティ [#eef988d2]

**脅威 [#w676b11a]
-脆弱なクライアント
-悪意のあるパブリック・クライアント

**対策 [#wfa63e53]
-認証・認可の自動処理でクライアント認証を要求
--client_id/(client_secret/)redirect_uri
--[[強力なクライアント認証>JWT bearer token authorizationグラント種別]]

-インフォームド・デシジョン
--認可画面の表示
--Clientに何のscopeをどの期間許可するか?

-クライアント・プロパティ検証
--Webサイト名
--アプリケーション名

-client_id/(client_secret/)redirect_uriへのバインディング
--code
--access_token
--refresh_token

*Clientセキュリティ [#eef988d2]
**対象 [#w709e12f]
***対象 [#w709e12f]
-Clientのセキュリティ
-Client ( ---> Authorization Serverの各Endpoint )

**脅威 [#jc7f8357]
-脆弱なクライアントに対する攻撃
***脅威 [#jc7f8357]
-脆弱なClientに対する攻撃
--リエンジ攻撃
--Clientの脆弱性に対する攻撃

**対策 [#ga404253]
-Clientパッケージ内に資格情報を保存しない(デプロイごとに変更)。
***対策 [#ga404253]
-Clientパッケージ内にclient_secretを保存しない(デプロイごとに変更)。
-refresh_tokenストレージを信頼できるバックエンドにスワップ

-サーバ:セキュリティ対策を実施
--システムのセキュリティ対策を実施
--標準のSQLインジェクション対策を実施

-モバイル:
--デバイスロック(パスワード、PIN、指紋認証、顔認証)
--Deviceロック(パスワード、PIN、指紋認証、顔認証)
--安全なローカル・ストレージに保存
---パーソナル分離ストレージ
---アプリケーション固有ストレージ

-ClientはUserAgentセッションにstateパラメタを追加

*Resource Server [#le69104f]
**対象 [#df0d3f91]
Resource Server ( ---> Authorization Serverの各Endpoint )
**ClientとResource Owner間のやり取り [#vb22a0b4]

**脅威 [#dafe4632]
-Resource Serverからの漏洩
-偽造Resource Serverによるトークン悪用

**対策 [#ra99d42c]
-Authorizationヘッダの利用
--HTTPプロキシとサーバによって認識され、特別に扱われる。
--これにより、漏洩または意図しない永続化の可能性が低減される。

-認証済みリクエストの利用~
アサーションのsubと認証済みリクエストのidを検証

-SSL/TLSを代替する署名されたリクエストの利用~
一意に識別可能で、1回だけ処理される。 

*ClientとResource Owner間のやり取り [#vb22a0b4]
**対象 [#a29261fb]
***対象 [#a29261fb]
ユーザ操作

**脅威 [#ec012fa2]
***脅威 [#ec012fa2]
-一般ユーザ(Resource Owner)にとって、認可画面の意味が不明
--認可画面で「はい」と回答した結果を理解する専門知識を持たない。
--要求の文言に微妙な違いを見ることができない。

-エンドユーザーデバイス上でのソフトウェア脆弱性の脅威は強く、緩和も困難。
-Device上でのソフトウェア脆弱性の脅威は強く、緩和も困難。
--WWWブラウザの脆弱性
--人気のあるクライアントの脆弱性
--人気のあるClientの脆弱性

-インストールしたクライアント・ソフトウェアの使用を制限
-インストールしたClientソフトウェアの使用を制限
---一部の限定的な環境では実用的。
---しかし、一般的な環境では実用的ではなく、~
事実回復後のメカニズムが整備されているべき(?

-自動再認証、認可画面非表示により、認証認可プロセスを隠す。
--攻撃者は、侵害されたまたは悪意のある役割上で資格情報を盗む可能性がある。

**対策 [#i19fe730]
***対策 [#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]]~
この場合、トークン内の暗号化セクションに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: [[:認証基盤]], [[:クレームベース認証]], [[:OAuth]]
Tags: [[:IT国際標準]], [[:認証基盤]], [[:クレームベース認証]], [[:OAuth]]


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS