「[[マイクロソフト系技術情報 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]]
-Authorization Server
--[[Authorization Endpoint>#eaff28b5]]
--[[Token Endpoint>#c71ce08a]]

*Client [#ef02f106]
Clientに対する攻撃

**client_secretの入手 [#he26ebe9]

***概要 [#kf820f8b]
client_secretの漏洩により、Authorization Serverに対して、~
[[クライアント認証をバイパスしたアクセストークン・リクエストが可能になる。>OAuth#s820b1ab]]

***影響 [#f31879b2]
-Client全体への影響

-アクセストークン・リクエストによるaccess_token, refresh_tokenの開示

--Client Credentialsグラント種別によるアクセストークン・リクエスト。

--リプレイ攻撃によるアクセストークン・リクエスト。
---codeによるaccess_tokenの取得
---refresh_tokenによるaccess_token取得

-access_tokenの漏洩により、~
Resource Ownerの、そのscopeのリソースにアクセス可能になる。

***攻撃 [#re7b0c76]
リバース・エンジニアリングによって、

-(難読化したとしても、)ソースコード(リポジトリ)またはバイナリから取得

-インストール(デプロイ済みClient)から取得
--web site (web server)
--device (native application)

***対策 [#h5cf70d2]
-インストール(デプロイ済みClient)から~
デプロイメント固有のclient_secretを取得(ただし、以下を考慮)

--Clientが「Webサーバ」の場合~
システムのセキュリティ対策を実施する。

--Clientが「ネイティブアプリ」の場合~
安全なローカル・ストレージに保存

-Client側の要件
--パブリック・クライアント、脆弱 or 悪意のあるClientに公開しない。
--Clientの自動認可を許可しない(ユーザの同意を要求する)。

-AuthZ側の要件
--client_secret取り消し処理の実装。

**refresh_tokenの入手 [#hf690590]

***概要 [#d0e55574]
refresh_tokenの漏洩により、Authorization Serverに対して、~
[[アクセストークン・リクエストが可能になる(クライアント認証にリプレイ攻撃)>OAuth#s820b1ab]]。

***影響 [#q32f5f26]
-単一のResource Ownerへの影響

-アクセストークン・リクエストによるaccess_token, refresh_tokenの開示

--入手したrefresh_tokenを用いる。

--クライアント認証に対するリプレイ攻撃を行う~
(若しくは[[漏洩したclient_secretを使用する。>#he26ebe9]])。

***攻撃 [#x0940232]
-Web applicationから
-device (native application)
--ファイルシステムから
--deviceを盗難してから
--deviceを複製してから

***対策 [#re6dbcc8]

-Client側の要件
--上記から取得されないようにする。

--device (native application)の場合、
---秘密を安全な記憶域に保管する。
---デバイスロックを使用する。

-AuthZ側の要件

--共通
---refresh_tokenのscope制限
---refresh_tokenのローテーション

--Webの場合
---強力なクライアント認証を使用
---標準的なWebサーバ保護対策

--device (native application)の場合、
---ユーザやデバイスを特定できるようにして、~
・client_idにトークンをバインド~
・トークンにデバイス識別子を同梱~

---以下の取り消し処理の実装する。~
・refresh_token~
・client_secret

**access_tokenの入手 [#a1503bb7]

***概要 [#sa3b793d]
単純な、access_tokenの漏洩は、そのまま、リソースにアクセスが可能になる。

***影響 [#p9ed9279]
-単一のResource Ownerへの影響
-そのスコープのリソースにアクセスが可能になる。

***攻撃 [#dd9400d4]
[[refresh_tokenの入手と同じ攻撃>#x0940232]]。

***対策 [#oaf650d4]
-Client側の要件
--一時メモリやプライベート・メモリに保持する。
--その他、[[refresh_tokenの入手と同じ対策>#re6dbcc8]]。

-AuthZ側の要件
--access_tokenのscope制限
--access_tokenの有効期間を短くする。

**WebViewなどの組込ブラウザによるフィッシング [#d3b27ac8]

***概要 [#d19f64cd]
OAuthではClientに認証情報を渡さないが、~
WebViewなどの組込ブラウザの場合、~
悪意のあるClientの場合、Clientが認証情報を取得し得る。

***影響 [#p3666314]
ユーザ・アカウントを含めたあらゆる情報が取得され、それが悪用される可能性がある。

***攻撃 [#v7eba959]
ブラウザによる、認証情報を中心にした、あらゆる情報のフィッシング

***対策 [#dacdd1ee]

-ResourceOwner側の要件
--Client(アプリケーション)の検証
--信頼できるシステム・コンポーネント(システム・ブラウザなど)に委任

-Client側の要件
--信頼できるシステム・コンポーネント(システム・ブラウザなど)に委任

-AuthZ側の要件
--Clientタイプの検証(例えば、GoogleはWebViewをブロックしている)

**オープン・リダイレクタ [#o8844619]
redirect_uriの登録は、Client側にも関係があるが、~
基本的には、[[Authorization ServerのAuthorization Endpoint>#mb0f0219]]側を参照。~
(フルパス要求 = 完全一致のため)

*Authorization Endpoint (Authorization Server) [#eaff28b5]
Authorization ServerのAuthorization Endpointに対する攻撃

**偽造Authorization Serverによるフィッシング [#e5716621]

***概要 [#q583c9b1]
単純、且つ古典的な、偽造Authorization Serverによるフィッシング。

***影響 [#v6a2fe62]
ユーザ・アカウントを含めたあらゆる情報が取得され、それが悪用される可能性がある。

***攻撃 [#i6228cf9]
ブラウザによる、認証情報を中心にした、あらゆる情報のフィッシング
-DNSまたはアドレス解決プロトコル(ARP)のなりすまし
-偽造Clientのスターターで、誤った、偽造Authorization Serverに飛ぶ。
-偽造Authorization Serverによりユーザ・アカウントがフィッシングされる。

***対策 [#pa0bb6ea]
-SSL/TLS(サーバ証明)の利用
-SSL/TLS([[サーバ証明>OAuth 2.0 Security Considerations (General)#rf5914dc]])の利用
-ユーザの教育(偽造Authorization Serverの識別)

**悪意のあるClientに大きなアクセス権を与えてしまう [#u4ee57c0]

***概要 [#mfe549d8]
認可画面の意味を理解していない場合に発生し得る。

***影響 [#l39ca2ca]
悪意のあるClientが、不要に大きなscopeを持ったトークンを取得できる。

***攻撃 [#lfd61396]
悪意のあるClientが、
-動的に登録される。
-不用意に大きなscopeの設定でスターターを起動。

***対策 [#s6dcb449]
-Resource Owner側の要件~
Resource Ownerは、認可画面を理解する。

-Resource Server側の要件
--scopeが広くても、Resource Serverがaudをチェックしていれば影響は絞られる。
--Resource ServerがClientに限定されない共用のリソースを開示するケースは問題。

-AuthZ側の要件

--client_idに対して
---認可画面を表示する(promptパラメタによらず)。
---許可するscopeをチェックする。

--ClientのTypeよって許可するscopeをチェックする。
---code : 認可画面を表示。
---token : (通常、)認可画面が表示しない。

**悪意のあるClientに既存ログイン・セッションで権限を与えてしまう [#t0fc9494]

***概要 [#gee2255a]
既存ログイン・セッション+認可画面=非表示の場合の問題。

***影響 [#o109fdf9]
-ログイン・セッションが生きている場合、ログイン画面が表示されない。
-また、認可画面が非表示の場合、なにも表示されずに権限を与えてしまう。

***攻撃 [#wa40aec0]
悪意のあるClientが、
-動的に登録される。
-Clientが認可画面=非表示の設定でスターターを起動。

***対策 [#xc1ef149]
-Resource Server側の要件
--漏れても、Resource Serverがaudをチェックしていれば影響は絞られる。
--Resource ServerがClientに限定されない共用のリソースを開示するケースは問題。

-AuthZ側の要件
--自動再認証の抑止
--認可画面=非表示の抑止
--上記の場合のscopeを制限する。

**オープン・リダイレクタ [#mb0f0219]

***概要 [#o6abaae6]
client_idさえ知っていれば、codeやaccess_tokenを盗める。

***影響 [#l0449bd3]
codeやaccess_tokenが漏洩する。

-code : Authorization Codeグラント種別
--codeからaccess_tokenに変換するには、[[client_secret>#he26ebe9]]も必要になる。
--code漏洩の状態は、[[refresh_token漏洩の状態>#hf690590]]に近い。

-access_token : Implicitグラント種別~
[[access_tokenは、そのまま利用可能なので影響度が大きい。>#a1503bb7]]

***攻撃 [#hbcafb5a]
client_idさえ知っていれば、redirect_uriのインジェクションで、~
攻撃者のサイトにcodeや、access_tokenを返却させることが出来る。

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

*Token Endpoint (Authorization Server) [#c71ce08a]
Authorization ServerのToken Endpointに対する攻撃

**access_tokenの盗聴 [#z740f86b]

***影響 [#ic513655]
影響は、[[コチラ>#a1503bb7]]と同じ。

***攻撃 [#oca8c65a]
盗聴

***対策 [#ff6fbc1d]
-SSL/TLSの利用

-SSL/TLSの利用できない場合。
--access_tokenのscope制限
--access_tokenの有効期間を短くする。

**client_secretのオンライン推測 [#w016901a]

***影響 [#i9e52064]
影響は、[[コチラ>#he26ebe9]]と同じ。

***攻撃 [#d451391d]
有効な client_id / client_secretのオンライン推測

***対策 [#v4adde7e]
-client_secretに高いエントロピーを使用
-[[強力なクライアント認証>JWT bearer token authorizationグラント種別]]
-(クライアント認証の)アカウント・ロック

**client_id, client_secretの盗聴 [#b6500536]

***影響 [#ic513655]
影響は、[[コチラ>#he26ebe9]]と同じ。

***攻撃 [#oca8c65a]
盗聴

***対策 [#ff6fbc1d]
-SSL/TLSを利用する。
-平文認証を使用しない[[代替認証>JWT bearer token authorizationグラント種別]]を使用する。

**DBからaccess_tokenを盗難 [#q4548fa9]

***影響 [#q1b21783]
すべての[[access_tokenが開示>#a1503bb7]]される。~
([[1人のResource Ownerのaccess_token漏洩>#a1503bb7]]より影響が大きい)

***攻撃 [#e1a0cd43]
-データベースへのアクセス権を取得
-SQLインジェクション攻撃

***対策 [#me5f0e23]
-システムのセキュリティ対策を実施

-標準のSQLインジェクション対策を実施

-access_tokenハッシュのみを格納~
([[JWT]]の場合、DBに保存しないので対策になる)

**DBからclient_secretを盗難 [#w147d517]

***影響 [#ub531f6c]
すべての[[client_id / client_secretが開示>#he26ebe9]]される。~
[[1つのClientのclient_id / client_secret漏洩>#he26ebe9]]より影響が大きい)

***攻撃 [#g6911933]
-データベースへのアクセス権を取得
-SQLインジェクション攻撃

***対策 [#k9db948e]
-システムのセキュリティ対策を実施
-標準のSQLインジェクション対策を実施

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

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS