「[[マイクロソフト系技術情報 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]] * 目次 [#ff55f5a3] #contents *概要 [#i38da113] OAuth 2.0 Threat Model and Security ConsiderationsのFlowに着目したセキュリティに関する考慮事項。 * Authorization code [#v5721a5d] **共通項 [#ve864d0d] ***共通的な影響 [#v20d442b] -codeを用いたアクセストークン・リクエストが可能になる。~ (access_token, refresh_tokenの開示) -ただし、アクセストークン・リクエストには、client_secretも必要。 ***クライアントの信頼性 [#ue4d516b] Authorization codeでは、クライアントにcodeが渡る。~ このクライアントの信頼性は、クライアントのタイプによって異なる。 -Webアプリケーション~ グローバルに一意なネットワークエンドポイント -ネイティブクライアント~ デバイスローカルリソース(カスタムスキーム) ***攻撃区分での分類 [#tb52f62c] -パブリック・クライアント --[[悪意のあるClientを認可してしまう>#j8c50476]] --[[セッション・ハイジャック>#gb0b1185]] --[[漏洩した利用者のcode注入>#p8bd5a13]] -DNSまたはARPスプーフィング --[[codeフィッシング>#e11c5a29]] --[[セッション・ハイジャック>#gb0b1185]] -codeの置換・注入 --[[漏洩した利用者のcode置換>#p8bd5a13]] --[[CSRFによる攻撃者のcode注入>#z08fc60f]] --[[code置換によるOAuthログイン>#p007b55e]] -アクセストークンまで取得 --codeの置換・注入 --[[悪意のあるClientを認可してしまう>#j8c50476]] --[[認証に対するクリックジャッキング>#ifb8644d]] --[[Resource Owner偽装>#w700a02c]] -DOSによるサーバ機能のダウン --[[DOSによるリソース枯渇>#z4d95e73]] --[[生成codeによるDoS>#e95bc5f9]] **[[オープンリダイレクタ>OAuth 2.0 Threat Model and Security Considerations (Role)#mb0f0219]] [#l753af85] ***影響 [#z5a0d9c8] ***攻撃 [#q982ff37] ***対策 [#q2e01988] **codeの盗聴 [#u5dfaabe] ***影響 [#uea5e361] [[共通的な影響>#v20d442b]] ***攻撃 [#h7eab0fb] 盗聴 ***対策 [#xcaf95ff] -SSL/TLSの利用 -クライアント認証 -短い有効期限 -1回限りの使用制限 **codeの漏洩 [#u5dfaabe] ***影響 [#uea5e361] [[共通的な影響>#v20d442b]] ***攻撃 [#h7eab0fb] (記録から)漏洩 -HTTP referer~ Redirectエンドポイントからのリダイレクト。 -WWWサーバの要求ログ -WWWブラウザの履歴情報 ***対策 [#xcaf95ff] -SSL/TLSの利用 -クライアント認証 -短い有効期限 -1回限りの使用制限 -ブラウザキャッシュを自動的にクリーンアップするために、~ redirect_uriのターゲットページをリロードする。 **DBからcodeを盗難 [#a69b0a36] ***影響 [#uc8c688c] -[[共通的な影響>#v20d442b]] -すべてのcodeの開示 -合わせて、client_idやredirect_uriの漏洩 ***攻撃 [#s3c22cf9] -データベースへのアクセス権を取得 -SQLインジェクション攻撃 ***対策 [#v1fb9d8a] -システムのセキュリティ対策を実施 -標準のSQLインジェクション対策を実施 -codeハッシュのみを格納 **codeのオンライン推測 [#nf3c8c21] ***影響 [#y471fae0] [[共通的な影響>#v20d442b]] ***攻撃 [#hd7112de] codeのオンライン推測 ***対策 [#e7dc0993] -codeに高いエントロピーを使用 -強力なクライアント認証 -有効期間を短くする。 -トークンに署名する。 -codeをredirect_uriに紐付け検証する。 --redirect_uriは、スターターとアクセストークン・リクエストで必要とする。 --codeのオンライン推測に加え(client_id、client_secret、)redirect_uriが必要。 **悪意のあるClientを認可してしまう [#j8c50476] ***影響 [#j164b0c0] 悪意のあるClientが、アクセストークンを取得できる。 ※ [[共通的な影響>#v20d442b]]には合致しない(アクセストークンの取得が可能)。 ***攻撃 [#ze01a730] -パブリック・クライアントが登録される。 -フロー中のユーザ同意のシミュレートする(など)。 ***対策 [#t31ea4f0] -クライアント認証 -redirect_uri検証 -認可画面の表示 --目的(scope)の提示 --client_idに対応する名称 --access_tokenの期間 --自動再認証の抑止 --スクリーン・スクレイピングの防止(CAPTCHAs) **codeフィッシング [#e11c5a29] ***影響 [#n52986ab] [[共通的な影響>#v20d442b]] ***攻撃 [#v3499c66] -クライアントに対するDNSまたはARPスプーフィングが行われる。 -悪意のあるClientに誘導してcodeを入手する。 ***対策 [#gdfc03c4] -クライアント認証 -redirect_uriをSSL/TLS(サーバ証明)で保護 **セッション・ハイジャック [#gb0b1185] [[前述>#e11c5a29]]の、パブリック・クライアント版。 ***影響 [#h9d1b672] [[共通的な影響>#v20d442b]] ***攻撃 [#f681ed6a] -パブリック・クライアントが登録される。 -悪意のあるClientに対するDNSまたはARPスプーフィングが行われる。 -悪意のあるClientに誘導してcodeを入手する。 ***対策 [#jf102672] redirect_uriをSSL/TLS(サーバ証明)で保護 ※ パブリック・クライアントなのでクライアント認証は無効 **漏洩した利用者のcode置換 [#p8bd5a13] ***影響 [#a67d0e68] 攻撃者は、被害者のアカウントで正規のClientのリソースにアクセス可能。 ※ [[共通的な影響>#v20d442b]]には合致しない(アクセストークンの取得が可能)。 ***攻撃 [#mab43d26] -染着なAuthorization Serverの既存のパブリック・クライアントのredirect_uriを編集・追加する。 -悪意のあるClientに誘導してcode(state)を取得する。 -codeを他の正規のクライアントに向けてcode(state)を置換する。 ***対策 [#gd3bf925] -クライアント認証 -他のフローを使用する。 **CSRFによる攻撃者のcode注入 [#z08fc60f] ***影響 [#e45f294b] 脆弱なClientによって被害者は攻撃者のアカウントでリソースにアクセス可能。 ※ [[共通的な影響>#v20d442b]]には合致しない(アクセストークンの取得が可能)。 ***攻撃 [#a76152b7] -攻撃者は、脆弱なClientをターゲットとしたcodeを収集し、 -CSRFのリンクを踏ませるなどのCSRF攻撃を行う。 ***対策 [#seeda7ff] -"state"パラメタを使用し、CSRFを防止する。 -ユーザの教育(偽造サイトのCSRFのリンクの識別) **認証に対するクリックジャッキング [#ifb8644d] ***影響 [#i4595058] 攻撃者は、ユーザーの認証資格情報を盗み、リソースにアクセス ※ [[共通的な影響>#v20d442b]]には合致しない(アクセストークンの取得が可能)。 ***攻撃 [#r77cfba2] -ユーザを偽造サイトに誘導する。 -ダミーボタンのセットの上に、透明なiFrameでターゲットサイトを読み込む。 -ボタンをクリックすると、実際には隠しページのAuthorizeボタンなどをクリック。 ***対策 [#o63d98a7] -ユーザの教育(偽造サイトのクリックジャッキングの識別) -新しいブラウザ~ X-FRAME-OPTIONSヘッダーを使用し、サーバ側で許可中のiFramesの回避 -古いブラウザ~ JavaScriptのフレームバスト処理技術を使用(すべてのブラウザで効果的でない) **Resource Owner偽装 [#w700a02c] ***影響 [#ffa764c0] 攻撃者は、ユーザーの認証資格情報を盗み、リソースにアクセス ※ [[共通的な影響>#v20d442b]]には合致しない(アクセストークンの取得が可能)。 ***攻撃 [#u436bc0c] -パブリック・クライアントが登録される。 -既存ログイン・セッションを持っている。 -悪意のあるクライアントは、 --リソース所有者の同意なしに認可要求をプログラムで送信 ---HTML User Agentを組み込み、 ---Authorization Serverによって送信されたHTML Formを解釈し、 ---HTML Formに対応するHTTP POST要求を自動的に送信する。 --外部ブラウザで既存のセッションを乱用 --特定のデバイスでブラウザ間のクッキーを乱用 --別のスコープを静かに要求する。 ***対策 [#t537780c] -これは、CSRF対策を使用して防止することはできない。 -自動再認証、認可画面非表示を使用しない(行わない)。 -パスワード認証とユーザー同意を1つのフォームにまとめ、 --CAPTCHAを使用するか、 --ワンタイム秘密をリソース所有者に使用する。 -任意の通知手段によって認可をResource Ownerに通知する。 **DOSによるリソース枯渇 [#z4d95e73] ***影響 [#r3929e40] リソース枯渇によるサーバ機能のダウン ***攻撃 [#cd626c90] DOSにより、codeプールなどのリソースを枯渇させる。 ***対策 [#kcee7ebf] -ユーザ毎に付与されるアクセストークンの数を制限 -codeに重要な量のエントロピーを含める(ストアを使用しないということ?) **生成codeによるDoS [#e95bc5f9] ***影響 [#fff3f00c] リソース枯渇によるサーバ機能のダウン ***攻撃 [#h93f7d2a] 生成codeを使用して、redirect_uriにボットネットで攻撃する。 ***対策 [#ab2571d1] -"state"パラメタを使用し負荷軽減を行う。 -無効なcode要求の数がしきい値を超える --クライアントからの接続を制限/禁止する。 --ユーザ・アカウントからの接続を制限/禁止する(Client側で認証が必要)。 **code置換によるOAuthログイン [#p007b55e] ***影響 [#i064d25e] 外部ログイン・シナリオで、被害者の身元を使用してログインしてしまう。 ※ 外部ログイン・シナリオでは、userinfoエンドポイントに対するリクエストによってログインが完了する。 ***攻撃 [#qf191ada] -犠牲者の有効なcode(state)を収集する -正規のClientのログイン・プロセスを開始させ、てcode(state)置換を行う。 ※ [[漏洩した利用者のcode置換>#p8bd5a13]]を外部ログイン・シナリオで利用する。 ***対策 [#z8c7a636] -codeをaccess_tokenに交換する際、 --事前のユーザ認証 --ユーザIDとcodeの対応付け -[[OpenID]]/[[OpenID Connect]]や[[SAML]]を利用 *Implicit [#f86d5264] access_tokenは、 -Fragment identifierでClientに直接返される。 -HTTP refererを介して漏洩しない。 **共通項 [#x08ab3df] ***共通的な影響 [#x57472a2] access_tokenの漏洩により、~ Resource Ownerの、そのscopeのリソースにアクセス可能になる。 ***攻撃区分での分類 [#kee64f7a] -パブリック・クライアント --[[悪意のあるClientを認可してしまう>#iafa8527]] -DNSまたはARPスプーフィング --[[スクリプトの実装を置換する>#t8d8d189]] -codeの置換・注入 --[[CSRFによる攻撃者のaccess_token注入>#z004447e]] --[[access_token置換によるOAuthログイン>#a94eb141]] **Endpointからのaccess_token漏洩 [#c77be886] ***影響 [#y00961bc] [[共通的な影響>#x57472a2]] ***攻撃 [#m77ffac9] 盗聴 ***対策 [#r90440c1] SSL/TLSの利用 **ブラウザ履歴からのaccess_token漏洩 [#of10be77] ***影響 [#y26ff3d4] [[共通的な影響>#x57472a2]] ***攻撃 [#ae57a875] ブラウザ履歴の参照 ***対策 [#mf2daa3e] -有効期間を短くする。 -スコープを制限する。 -キャッシュを無効化する。 **悪意のあるClientを認可してしまう [#iafa8527] Implicitではクライアント認証が不可な点を除き、[[Authorization code>#j8c50476]]と同じ。 ***影響 [#z11b1483] - ***攻撃 [#edb73bc0] - ***対策 [#b7f83e94] -redirect_uri検証 -scope --認可画面の表示(通常の仕様では認可画面非表示) --若しくは、当該フロー(認可画面非表示)でのscope制限 **スクリプトの実装を置換する [#t8d8d189] ***影響 [#x2ad3d75] [[共通的な影響>#x57472a2]] ***攻撃 [#w6a08854] -DNSまたはARPスプーフィング -攻撃者のスクリプトをダウンロードする。 -access_tokenの盗難・漏洩 ***対策 [#ocade264] -スクリプトを取得するSDNを認証する。 -スクリプトの改竄の確認処理を実装する。 -Introduce one-time, per-use secrets (e.g., "client_secret") values that can only be used by scripts in a small time window once loaded from a server.~ The intention would be to reduce the effectiveness of copying client-side scripts for re-use in an attacker's modified code. **CSRFによる攻撃者のaccess_token注入 [#z004447e] 攻撃方法・対策は、[[Authorization code>#z08fc60f]]と同じ。 ***影響 [#e769022a] ***攻撃 [#tac7e64c] ***対策 [#i129916c] **access_token置換によるOAuthログイン [#a94eb141] 攻撃方法・対策は、[[Authorization code>#p007b55e]]と同じ。 ***影響 [#bc67e7c0] ***攻撃 [#b22f52b3] ***対策 [#r3ec6f36] *Resource Owner Password Credentials [#z7c59f6c] [[OAuth]] 2.0ではIdPの仕様について言及されていないので、~ ここでは唯一、サインイン・プロセスの問題を扱う(ただし非対話)。 **共通項 [#t3a417b9] ***共通的な影響 [#dffb5785] -クライアントにユーザ/パスワードが渡る。 -トークン取り消しが機能しない。 -認可プロセスを制御できない。 ***攻撃区分での分類 [#lcf01c6d] -ユーザ/パスワードの漏洩 --[[ユーザ/パスワードの盗難>#db447962]] --[[ユーザ/パスワードの盗聴>#g872ebc1]] --[[ユーザ/パスワードのオンライン推測>#s789d1f8]] --[[Client側でのパスワードの露見アクシデント>#v557e2e3]] -非対話的問題を突いた攻撃。 --[[意図しない不要に大きなscope>#w71cb4d0]] --[[refresh_tokenによる長期的認可の維持>#bafbe5ca]] **ユーザ/パスワードの盗難 [#db447962] ***影響 [#h002f857] [[共通的な影響>#dffb5785]] ***攻撃 [#ueae69f1] 悪意のあるクライアントによるユーザ/パスワード盗難 ***対策 [#b6dc1303] -限定的に利用する。 --基本認証から移行する過渡期 --UserAgentがAuthorization Serverに接続できない場合 --ClientとAuthorization Serverが同じ組織に利用されているケース -ユーザに異なるサービスに同じ~ ユーザ/パスワードを使用しないように促す。 -refresh_tokenとユーザIDの紐付けと検証(? **ユーザ/パスワードの盗聴 [#g872ebc1] ***影響 [#ubfda847] [[共通的な影響>#dffb5785]] ***攻撃 [#hf181037] エンドポイントに対するユーザ/パスワード盗聴 ***対策 [#k5d9ffbf] -SSL/TLSを利用する。 -平文認証を使用しない代替認証を使用する。 **Client側でのパスワードの露見アクシデント [#v557e2e3] ***影響 [#a85d7b1b] [[共通的な影響>#dffb5785]] ***攻撃 [#ma826c54] クライアントが十分な保護を提供していない場合、偶発的に起きる。 ***対策 [#adb2505d] -他のフローを使用する。 -ダイジェスト認証を使用 -ログのパスワードを難読化 **意図しない不要に大きなscope [#w71cb4d0] ***影響 [#v8648471] 悪意のあるClientが、不要に大きなscopeを持ったトークンを取得できる。 ***攻撃 [#j88ae5de] 悪意のあるClientが、不要に大きなscopeを持ったトークンを要求する。 ***対策 [#w094e5b5] -他の(対話的)フローを使用する。 -scope --当該(非対話的)フローでのscope制限 --クライアントの信頼性よって緩和 --任意の通知手段によって認可をResource Ownerに通知する。 **refresh_tokenによる長期的認可の維持 [#bafbe5ca] ***影響 [#f5f2399c] ***攻撃 [#xff0ef19] ***対策 [#ze601703] -他の(対話的)フローを使用する。 -当該フローでrefresh_token --発行しない。 --クライアントの信頼性よって緩和 --任意の通知手段によってリフレッシュをResource Ownerに通知する。 **ユーザ/パスワードのオンライン推測 [#s789d1f8] ***影響 [#k2df1fdd] 単一のユーザー名とパスワードの組み合わせの啓示 ***攻撃 [#p3f485b4] 有効なユーザー名とパスワードの組み合わせを推測 ***対策 [#se987155] -サインイン --安全なパスワードポリシー設定する。 --ロックアウト、タールピット(一時的ロック)を使用する。 --CAPTCHAを使用する。 -他のフローを使用する。 -クライアント認証を併用する。 *Client Credentials [#ibd7170f] [[Resource Owner Password Credentials>#z7c59f6c]]で説明したものと同様だが、~ ユーザ/パスワードは使用しないため、非対話的問題を突いた攻撃の考慮事項に限定される。 ---- Tags: [[:認証基盤]], [[:クレームベース認証]], [[:OAuth]]