「[[マイクロソフト系技術情報 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]]