「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>OAuth 2.0 Threat Model (Flow)]] * 目次 [#ff55f5a3] #contents *概要 [#i38da113] [[OAuth 2.0 Threat Model and Security Considerations]]の~ Flowに着目した脅威モデルのうち、主に、code漏洩にフォーカスした内容。 *code漏洩 [#ve864d0d] **攻撃 [#h7eab0fb] (記録から)漏洩 -HTTP referer~ Redirectエンドポイントからのリダイレクト。 -WWWサーバの要求ログ -WWWブラウザの履歴情報 -[[オープン・リダイレクタ>#l753af85]] **対策 [#xcaf95ff] -SSL/TLSの利用 -クライアント認証 -ブラウザ・キャッシュを自動的にクリーンアップするために、~ redirect_uriのターゲット・ページをリロードする。 -code --短い有効期限 --1回限りの使用制限 **共通項 [#d4d242db] ***共通的な影響 [#v20d442b] code漏洩により、 -codeを用いたアクセストークン・リクエストが可能になる。~ (access_token, refresh_tokenの開示) -ただし、アクセストークン・リクエストには、client_secretも必要。 ***Clientの信頼性 [#ue4d516b] Authorization codeでは、Clientにcodeが渡る。~ このClientの信頼性は、Clientのタイプによって異なる。 -Webアプリケーション~ グローバルに一意なネットワークエンドポイント -ネイティブクライアント~ デバイスローカルリソース(カスタムスキーム) *単純な攻撃 [#f5631b4d] **codeの盗聴 [#u5dfaabe] ***影響 [#uea5e361] [[共通的な影響>#v20d442b]] ***攻撃 [#h7eab0fb] 盗聴 ***対策 [#xcaf95ff] -SSL/TLSの利用 -クライアント認証 -code --短い有効期限 --1回限りの使用制限 **codeのオンライン推測 [#nf3c8c21] ***影響 [#y471fae0] [[共通的な影響>#v20d442b]] ***攻撃 [#hd7112de] codeのオンライン推測 ***対策 [#e7dc0993] -クライアント認証 -code --短い有効期限 --1回限りの使用制限 --高いエントロピーを使用 --codeをredirect_uriに紐付け検証する。 ---redirect_uriは、スターターとアクセストークン・リクエストで必要とする。 ---codeのオンライン推測に加え(client_id、client_secret、)redirect_uriが必要。 **DBからcodeを盗難 [#a69b0a36] ***影響 [#uc8c688c] -すべてのcodeの開示([[共通的な影響>#v20d442b]]) -合わせて、client_idやredirect_uriの漏洩 ***攻撃 [#s3c22cf9] -データベースへのアクセス権を取得 -SQLインジェクション攻撃 ***対策 [#v1fb9d8a] -システムのセキュリティ対策を実施 -標準のSQLインジェクション対策を実施 -codeハッシュのみを格納 *Clientへの誘導による盗難 [#b2575c6a] オープン・リダイレクタや、DNSまたはARPスプーフィングが用いられる。 -OAuth 2.0 の脆弱性 (!?) "Covert Redirect" とは - OAuth.jp~ http://oauth.jp/blog/2014/05/07/covert-redirect/ **[[オープン・リダイレクタ>OAuth 2.0 Threat Model (Role)#mb0f0219]] [#l753af85] ***影響 [#z5a0d9c8] [[共通的な影響>#v20d442b]] ***攻撃 [#q982ff37] redirect_uriを使用して任意のURLに誘導 ***対策 [#q2e01988] redirect_uriのフルパス登録・検証 **codeフィッシング [#e11c5a29] ***影響 [#n52986ab] [[共通的な影響>#v20d442b]] ***攻撃 [#v3499c66] -Client(と言うより、ココでは任意のredirect_uri)~ に対するDNSまたはARPスプーフィングが行われる。 -悪意のあるClientに誘導してcodeを入手する。 ***対策 [#gdfc03c4] -クライアント認証 -redirect_uriをSSL/TLS(サーバ証明)で保護 **セッション・ハイジャック [#ib5afa90] [[前述のcodeフィッシング>#e11c5a29]]の考慮事項に、~ 「Client登録機能で登録された悪意のあるClient」を追加した版。 ***影響 [#h9d1b672] [[共通的な影響>#v20d442b]] ***攻撃 [#f681ed6a] -悪意のあるClientが登録される。 -悪意のあるClientに対するDNSまたはARPスプーフィングが行われる。 -悪意のあるClientに誘導してcodeを入手する。 ***対策 [#jf102672] redirect_uriをSSL/TLS(サーバ証明)で保護 *悪意のあるClientの登録・誘導による盗難 [#z55cd486] -登録機能で登録されたClientなので、クライアント認証は対策として無効。 -従って、アクセストークン・リクエストをパスされる可能性が高まる。 -ただし、codeとclient(例えば、redirect_uriなど)を、~ 紐付ける仕組みを導入すれば、対策は可能と思われる。 **[[セッション・ハイジャック>#ib5afa90]] [#gb0b1185] **WebViewなどの組込ブラウザ(Resource Owner偽装) [#b75dbb3f] ***影響 [#ffa764c0] 攻撃者は、ユーザーの認証資格情報を盗み、リソースにアクセス ***攻撃 [#u436bc0c] -悪意のあるClientが登録される。 -既存ログイン・セッションを持っている。 --外部ブラウザで既存のセッションを乱用 --特定のデバイスでブラウザ間のクッキーを乱用 -悪意のあるClientは、 --以下の方法で認可画面のPOSTバックをプログラムで送信 ---WebViewなどの組込ブラウザを組み込み、 ---Authorization Serverによって送信されたHTML Formを解釈し、 ---HTML Formに対応するPOSTバックを自動的に送信。 --これにより、別のscopeのアクセストークンを同意なしで取得可能。 ***対策 [#t537780c] -これは、CSRF対策を使用して防止することはできない。 -自動再認証、認可画面非表示を使用しない(行わない)。 -パスワード認証とユーザー同意を1つのフォームにまとめ、 --CAPTCHAを使用するか、 --ワンタイム秘密をリソース所有者に使用する。 -任意の通知手段によって認可をResource Ownerに通知する。 **スクリーン・スクレイピング [#r5309faa] ***影響 [#j164b0c0] 悪意のあるClientが、アクセストークンを取得できる。 ***攻撃 [#ze01a730] -悪意のあるClientが登録される。 -悪意のあるClientは、フロー中のユーザ同意を、~ スクリーン・スクレイピング技術を利用してシミュレートする(など)。 ***対策 [#t31ea4f0] -redirect_uri検証 -画面の表示 --自動再認証の抑止 --認可画面の表示 ---目的(scope)の提示 ---client_idに対応する名称 ---access_tokenの期間 ---スクリーン・スクレイピングの防止(CAPTCHAs) *codeの置換・注入 [#zc24a1d0] -既存Clientを利用した攻撃なので、Client登録機能が無くても攻撃可能。 -codeの置換・注入があり、其々以下のような特徴がある。 --codeの置換:「被害者のアカウント」でリソースにアクセス --codeの注入:「攻撃者のアカウント」でリソースにアクセス ※ [[共通的な影響>#v20d442b]]には合致しない(アクセストークンの取得が可能)。 **漏洩した利用者のcode置換 [#p8bd5a13] ***影響 [#a67d0e68] 攻撃者は、「被害者のアカウント」でリソースにアクセス可能。~ (被害者のアカウントに紐付いたリソースのCRUDが可能) ***攻撃 [#mab43d26] -被害者のcode(state)を入手する。 --[[単純な攻撃>#f5631b4d]]では、stateを入手できない。 --脆弱なAuthorization Serverの既存のクライアントのredirect_uriを編集・追加する。~ (ココでは、redirect_uriパラメタではなく、登録されているデータそのものの編集・追加を言っている模様) -code(state)を他の正規のクライアントに向けて置換する。 ***対策 [#gd3bf925] -redirect_uriの改ざんなどがされないようにする。 -その他 --クライアント認証 --他のフローを使用する。 **CSRFによる攻撃者のcode注入 [#z08fc60f] ***影響 [#e45f294b] 脆弱なClientによって被害者は「攻撃者のアカウント」でリソースにアクセス可能。~ (攻撃者のアカウントに紐付いたリソースのストアに被害者のデータを登録させることが出来る) ***攻撃 [#a76152b7] 攻撃者は、脆弱なClientをターゲットとして、 -Clientを対象としたcodeを収集する。 -そのcodeを含むClientへのCSRFリンクを踏ませる。 ***対策 [#seeda7ff] -"state"パラメタを使用し、CSRFを防止する。 -ユーザの教育(偽造サイトのCSRFのリンクの識別) **code置換によるOAuthログイン [#g3e9db30] ***影響 [#i064d25e] 外部ログイン・シナリオで、攻撃者は、「被害者のアカウント」でログイン可能~ (場合によっては、悪意のあるアプリケーションにログインさせることが出来る) ※ 外部ログイン・シナリオでは、userinfoエンドポイントに対するリクエストによってログインが完了する。 ***攻撃 [#qf191ada] [[漏洩した利用者のcode置換>#p8bd5a13]]を外部ログイン・シナリオで利用する。 ***対策 [#z8c7a636] codeをaccess_tokenに交換する際、 -事前のユーザ認証 -ユーザIDとcodeの対応付け~ [[OpenID]] / [[OpenID Connect]]や[[SAML]]を利用~ (audによるClient制限を行うことが出来る) *アクセストークンまで取得が可能な攻撃 [#g190059b] ※ [[共通的な影響>#v20d442b]]には合致しない(アクセストークンの取得が可能)。 **[[WebViewなどの組込ブラウザ>#b75dbb3f]] [#w700a02c] **[[スクリーン・スクレイピング>#r5309faa]] [#j8c50476] **[[漏洩した利用者のcode置換>#p8bd5a13]] [#v5b5d549] **[[CSRFによる攻撃者のcode注入>#z08fc60f]] [#xb56c002] **[[code置換によるOAuthログイン>#g3e9db30]] [#p007b55e] **クリック・ジャッキング [#ifb8644d] ***影響 [#i4595058] 攻撃者は、ユーザーの認証資格情報を盗み、リソースにアクセス ***攻撃 [#r77cfba2] -[[前述>#j8c50476]]に近いが、 --「悪意のあるClient」の ---「POSTバックを自動的」や、 ---「スクリーン・スクレイピング技術」ではなく --「偽造サイト」の「クリック・ジャッキング」とする。 -以下で認証済みアクセスする。 --ユーザを偽造サイトに誘導する。 --ダミーボタンのセットの上に、透明なiFrameでターゲットサイトを読み込む。 --ボタンをクリックすると、実際には隠しページのAuthorizeボタンなどをクリック。 ***対策 [#o63d98a7] -ユーザの教育(偽造サイトのクリック・ジャッキングの識別) -IFrameの回避 --新しいブラウザ~ X-FRAME-OPTIONSヘッダ --古いブラウザ~ アンチフレーム、フレームバストのJavaScript(すべてのブラウザで効果的でない) *DoSによるサーバ機能のダウン [#l8bf1850] **DoSによるリソース枯渇 [#z4d95e73] ***影響 [#r3929e40] リソース枯渇によるサーバ機能のダウン ***攻撃 [#cd626c90] DoSにより、codeプールなどのリソースを枯渇させる。 ***対策 [#kcee7ebf] -ユーザ毎に付与されるアクセストークンの数を制限 -codeに些細ではない量のエントロピーを含める(?) **生成codeによるDoS [#e95bc5f9] ***影響 [#fff3f00c] リソース枯渇によるサーバ機能のダウン ***攻撃 [#h93f7d2a] 生成codeを使用して、redirect_uriにボットネットで攻撃する。 ***対策 [#ab2571d1] -"state"パラメタを使用し負荷軽減を行う。 -無効なcode要求の数がしきい値を超える --クライアントからの接続を制限/禁止する。 --ユーザ・アカウントからの接続を制限/禁止する(Client側で認証が必要)。 ---- Tags: [[:IT国際標準]], [[:認証基盤]], [[:クレームベース認証]], [[:OAuth]]