「[[マイクロソフト系技術情報 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>OAuth 2.0 Threat Model (Authorization code Flow)]] [#v5721a5d] 主に、code漏洩にフォーカスした内容。 *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] -キャッシュを無効化する。 -code --短い有効期限 --1回限りの使用制限 **悪意のある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] -クライアントにユーザID/パスワードが渡る。 -トークン取り消しが機能しない。 -認可プロセスを制御できない。 ***攻撃区分での分類 [#lcf01c6d] -ユーザID/パスワードの漏洩 --[[ユーザID/パスワードの盗難>#db447962]] --[[ユーザID/パスワードの盗聴>#g872ebc1]] --[[ユーザID/パスワードのオンライン推測>#s789d1f8]] --[[Client側でのパスワードの露見アクシデント>#v557e2e3]] -非対話的問題を突いた攻撃。 --[[意図しない不要に大きなscope>#w71cb4d0]] --[[refresh_tokenによる長期的認可の維持>#bafbe5ca]] **ユーザID/パスワードの盗難 [#db447962] ***影響 [#h002f857] [[共通的な影響>#dffb5785]] ***攻撃 [#ueae69f1] 悪意のあるクライアントによるユーザID/パスワード盗難 ***対策 [#b6dc1303] -限定的に利用する。 --基本認証から移行する過渡期 --UserAgentがAuthorization Serverに接続できない場合 --ClientとAuthorization Serverが同じ組織に利用されているケース -ユーザに異なるサービスに同じ~ ユーザID/パスワードを使用しないように促す。 -refresh_tokenとユーザIDの紐付けと検証(? **ユーザID/パスワードの盗聴 [#g872ebc1] ***影響 [#ubfda847] [[共通的な影響>#dffb5785]] ***攻撃 [#hf181037] エンドポイントに対するユーザID/パスワード盗聴 ***対策 [#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に通知する。 **ユーザID/パスワードのオンライン推測 [#s789d1f8] ***影響 [#k2df1fdd] 単一のユーザー名とパスワードの組み合わせの啓示 ***攻撃 [#p3f485b4] 有効なユーザー名とパスワードの組み合わせを推測 ***対策 [#se987155] -サインイン --安全なパスワードポリシー設定する。 --ロックアウト、タールピット(一時的ロック)を使用する。 --CAPTCHAを使用する。 -他のフローを使用する。 -クライアント認証を併用する。 *Client Credentials [#ibd7170f] [[Resource Owner Password Credentials>#z7c59f6c]]で説明したものと同様だが、~ ユーザID/パスワードは使用しないため、非対話的問題を突いた攻撃の考慮事項に限定される。 *参考 [#lc5dc6c9] ネットでピックアップされていたもの。 **全グラント種別共通 [#c3d7e21e] ***影響 [#lbec317f] Clientを用いた攻撃が可能になる。 -Clientなりすまし(偽装) -悪意のあるClientの登録 ***攻撃 [#gc415695] -Clientなりすまし(偽装) --client_idを盗んで、特定のClientになり済ますことができる。 --これにより、攻撃用のClientを使用した攻撃が可能になる。 -悪意のあるClientの登録 --する場合、悪意のあるClientが登録できる。 --Clientを利用してcodeやtokenを盗むことができる。 ***対策 [#cbb19bc5] -Clientなりすまし(偽装)~ クライアント認証、redirect_uri 検証 -悪意のあるClientの登録~ クライアントの登録機能をサポートしない。 **Authorization Code, Implicitグラント種別共通 [#hffc5d58] Open Redirect -参考 --OAuth 2.0 の脆弱性 (!?) "Covert Redirect" とは - OAuth.jp~ http://oauth.jp/blog/2014/05/07/covert-redirect/ ***影響 [#jf7b939c] 攻撃者のClientのRedirectエンドポイントに誘導できる。 ***攻撃 [#zc5470d3] redirect_uriパラメタを用いたOpen Redirectの脆弱性を攻撃 ***対策 [#y4c27338] Authorization Serverの甘めの redirect_uri 検証処理に起因するので、~ Authorization Serverは、client_id + redirect_uri の事前登録必須 + 完全一致にする。 **Authorization Codeグラント種別 [#f4d89342] codeの置換・注入(CSFR) ***影響 [#sc626f21] -置換~ 他人のaccess_tokenを取得できる可能性がある。 -注入(CSFR)~ 自分のaccess_tokenで他のユーザが操作を行える。 ***攻撃 [#n89ac6b8] codeを収集し、置換・注入(CSFR)の攻撃を行う。 -置換 --自分のClientを使用して、他人のcodeを収集する。 --他人のcodeを収集して、自分のフロー中に埋め込む(置換)。 -注入(CSFR) --攻撃対象のClientを使用して、自分のcodeを収集する。 --自分のcodeを収集して、他人のフロー中に埋め込む(注入(CSFR))。 ***対策 [#o155e4ee] -置換~ クライアント認証、redirect_uri 検証に対策を施す。 -注入(CSFR)~ ClientにCSFR対策を施す。 >認可エンドポイントへ遷移する際にstateパラメタを付与する。~ そして、Redirectエンドポイントでstateパラメタをチェックする。 **Implicitグラント種別 [#c9029c4e] Tokenの置き換え(不正利用) ***影響 [#o2a2f9ae] 「OAuth 2.0 の implicit grant flow を認証に使うと、~ 車が通れる程どてかいセキュリティ・ホールが開く。」らしい。 -単なる OAuth 2.0 を認証に使うと、車が通れるほどの~ どでかいセキュリティー・ホールができる | @_Nat Zone~ https://www.sakimura.org/2012/02/1487/ ***攻撃 [#v9ede1f6] この、セキュリティ・ホールとは、 ザックリ言って、 -攻撃者の構築したClient(A)は、[[Access Token>#jb722a87]]を収集する。 -攻撃者は、 [[Access Token>#jb722a87]]置き換え攻撃により、Client(B)経由でリソース・アクセスできる。 と言うモノらしい。 ***対策 [#k43f998a] access_tokenの[[JWT]]化などによって、Resource Server側でもClient検証を行う。 ---- Tags: [[:IT国際標準]], [[:認証基盤]], [[:クレームベース認証]], [[:OAuth]]