「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>OAuth#t8e931a5]]
-[[戻る>OAuth 2.0 セキュリティ関連トピック]]

* 目次 [#y9d6248c]
#contents

*概要 [#u2d822fd]
-OAuth 2.0 の脅威モデルとセキュリティの考慮事項 (RFC 6819)
-OAuth 2.0 の実装にあたり、特にセキュリティーに関して考慮すべき事項の列挙
-セクション4からの内容で、[[OAuth]] 2.0 の前提は飛ばしている。
OAuth 2.0 の脅威モデルとセキュリティ考慮事項 (RFC 6819)
-OAuth 2.0 の実装にあたり、脅威モデルとセキュリティ考慮事項を列挙
-セクション4以降からの内容で、[[OAuth]] 2.0 の前提は飛ばしている。

*Client [#ef02f106]
Clientに対する攻撃
*脅威モデル [#j97033f0]
OAuth 2.0の包括的なグループ化された脅威モデル。

**client_secretの入手 [#he26ebe9]
***影響(大) [#f31879b2]
Authorization Serverのクライアント認証のバイパスによる~
アクセストークン・リクエストが可能になる。
**[[Role毎>OAuth 2.0 Threat Model (Role)]] [#j86c8ad5]

-Client Credentialsグラント種別による。
**[[Flow毎>OAuth 2.0 Threat Model (Flow)]] [#if4ee696]

-リプレイ攻撃による。
--Authorization Codeグラント種別のcode
--refresh_token
**[[Access毎>OAuth 2.0 Threat Model (Access)]] [#if4ee696]

***攻撃 [#re7b0c76]
-ソースコードまたはバイナリから取得
-インストールされたクライアントから取得
--web site (web server)
--device (native application)
*セキュリティ考慮事項 [#j8507837]
脅威を緩和するために推奨される対策。

***対策 [#h5cf70d2]
-Section 5.2.3.1
-Section 5.2.3.2
-Section 5.2.3.4
-Section 5.2.3.6
**[[General>OAuth 2.0 Security Considerations (General)]] [#c355bcce]
**[[Role毎>OAuth 2.0 Security Considerations (Role)]] [#k88abe91]

**refresh_tokenの入手 [#he26ebe9]
*ざっくり [#x01ebfce]
**対策 [#we5285d7]
***漏洩対策 [#ad4d0c5e]
-SSL/TLS([[サーバ証明>OAuth 2.0 Security Considerations (General)#rf5914dc]])を利用する。
-正規のClientへ発行されたトークンの漏洩に注意。
--code(state):code置換攻撃が可能。
--access_token:access_tokenを利用可能。

***影響(小) [#q32f5f26]
-refresh_tokenを用いたアクセストークン・リクエストが可能になる。
-ただし、実装によるが[[client_secret>#he26ebe9]]も必要。
***エンドポイント防御 [#t5962331]
-stateを付与・検証する。
-redirect_uri 検証を行う。
-クライアント認証を行う。

***攻撃 [#x0940232]
-Web applicationから
-device (native application)
--ファイルシステムから
--deviceを盗難してから
--deviceを複製してから
***トークン堅牢化 [#gaa9854b]
-トークン
--refresh_token
--access_token
--code
--, etc.

***対策 [#re6dbcc8]
-上記から取得されないようにする。
-refresh_tokenのローテーション
-ユーザやデバイスを特定できる場合、
--refresh_token取り消し処理の実装。
--[[client_secret>#he26ebe9]]取り消し処理の実装。
-低いエントロピーの値を使用しない。

-device (native application)の場合、
--秘密を安全な記憶域に保管する。
--デバイスロックを使用する。
--Tokenにデバイス識別子を同梱
-バインドする。
--Client(aud: client_id)
--Resource Owner(sub: sub)
--Resource Server(aud: client_id or Endpoint)

**access_tokenの入手 [#a1503bb7]
***影響(大) [#p9ed9279]
そのスコープのリソースにアクセス可能になる。
-access_tokenを[[JWT]]化する。

***攻撃 [#dd9400d4]
[[refresh_tokenと同じ方法>#x0940232]]
***トークン検証 [#u8e4bfa7]
-([[JWT]]化した場合、)Client、Resource Serverでも、

***対策 [#oaf650d4]
-有効期間を短くする。
-スコープを制限する。
-一時メモリやプライベート・メモリに保持する。
-その他、[[refresh_tokenと同じ方法>#re6dbcc8]]。
--署名検証する。

**組込ブラウザの利用によるフィッシング [#d3b27ac8]
***影響(中) [#p3666314]
-ユーザ・アカウントを含めたあらゆる情報が取得され、
-それが悪用される可能性がある。
--クレームセット検証する。
---iss(issuer)~
issは署名検証があるので偽装困難
---aud(client_id)~
Resource Serverでもaudによるクライアント検証を行う。
---sub(ユーザID)~
ユーザへの明示に加え、~
Client、Resource Serverで認証済みリクエストでsub検証するなど。

***攻撃 [#v7eba959]
ブラウザによるあらゆる情報のフィッシング
-[[Authorization Serverを用いたaccess_token検証>OAuth 2.0 Token Introspection]] 
--署名検証する。

***対策 [#dacdd1ee]
clientの検証(例えば、GoogleはWebViewをブロックしている)
--クレームセット検証する。
---iss(issuer)
---aud(client_id)
---sub(ユーザID)
---jti([[無効化>OAuth 2.0 Token Revocation]]状況)

**オープンリダイレクタ [#o8844619]
登録があるので、Client側にもあるが、[[Authorization Server>#mb0f0219]]側を参照。
--クレームセットをJSONで返却~
Client、Resource Serverで検証を容易にする。

*Authorization Server [#eaff28b5]
Authorization Serverに対する攻撃
***ユーザの教育 [#fa58c508]
-偽造サーバの識別
-組み込みブラウザに注意

**偽造Authorization Serverによるフィッシング [#e5716621]
**注意 [#e5ec5286]
***オープン・リダイレクタ [#o43c7aa6]
-完全なredirect_uriの事前登録と検証
-スターターとアクセストークン・リクエストでのredirect_uriの要求

***影響(中) [#v6a2fe62]
-実装側ではなく、利用者側の問題だが、
-誘導されるとユーザ・アカウントのフィッシングされ、なんでもできるようになる。
***自動再認証、認可画面非表示 [#c55f9143]
-悪意のあるクライアントと組み合わさる。
-その際のscopeなど注意が必要。

***攻撃 [#i6228cf9]
-偽造Clientのスターターで、誤った、偽造Authorization Serverに飛ぶ。
-偽造Authorization Serverによりユーザ・アカウントがフィッシングされる。
***クライアント登録機能 [#z5a20e1b]
-悪意のあるクライアントが容易に登録可能。
-悪意のあるクライアント対策の実装が必要。

***対策 [#pa0bb6ea]
-SSL/TLS(サーバー証明)の利用
-ユーザの教育(偽造Client、偽造Authorization Serverの識別)
***パブリック・クライアント [#l2c8db1d]
ネイティブアプリやJSアプリのようにsecretを秘匿に保てないタイプ。

**悪意のあるClientに大きなアクセス権を与えてしまう [#u4ee57c0]
***影響(中) [#l39ca2ca]
-パブリック・クライアントの登録が可能なケースで、
-悪意のあるClientが、不要に大きなScopeを持ったTokenを取得できる。
-サーバより脅威が多い。
--盗難
--リエンジ
--ストレージ
--ウィルス
--脆弱性

***攻撃 [#lfd61396]
-パブリック・クライアントが登録される。
-悪意のあるClientのスターターを起動させる。
-不用意に大きなScopeを要求する。
-JSアプリ(SPA)の場合は、~
[[Implicit Flow>OAuth 2.0 Threat Model (Implicit Flow)]]を使用する。

***対策 [#s6dcb449]
Authorization Serverは
-ネイティブの場合は、~
[[OAuth PKCE]]を利用する。

-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は、そのまま利用可能なので影響度が大きい。

***攻撃 [#hbcafb5a]
redirect_uriのインジェクションで攻撃者のサイトに誘導。

***対策 [#yc51a4f8]
-redirect_uriのフルパス登録
-redirect_uriのフルパス検証

*参考 [#o592275c]
-RFC 6819 - OAuth 2.0 Threat Model and Security Considerations~
https://tools.ietf.org/html/rfc6819

-OAuth 2.0 Threat Model and Security Considerations~
http://openid-foundation-japan.github.io/rfc6819.ja.html

----
Tags: [[:認証基盤]], [[:クレームベース認証]], [[:OAuth]]
Tags: [[:IT国際標準]], [[:認証基盤]], [[:クレームベース認証]], [[:OAuth]]


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