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


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS