「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
OAuth 2.0 Threat Model and Security Considerationsの
Flowに着目した脅威モデルのうち、主に、code漏洩にフォーカスした内容。
code漏洩 †
攻撃 †
(記録から)漏洩
- HTTP referer
Redirectエンドポイントからのリダイレクト。
対策 †
- ブラウザ・キャッシュを自動的にクリーンアップするために、
redirect_uriのターゲット・ページをリロードする。
共通項 †
共通的な影響 †
code漏洩により、
- codeを用いたアクセストークン・リクエストが可能になる。
(access_token, refresh_tokenの開示)
- ただし、アクセストークン・リクエストには、client_secretも必要。
Clientの信頼性 †
Authorization codeでは、Clientにcodeが渡る。
このClientの信頼性は、Clientのタイプによって異なる。
- Webアプリケーション
グローバルに一意なネットワークエンドポイント
- ネイティブクライアント
デバイスローカルリソース(カスタムスキーム)
単純な攻撃 †
codeの盗聴 †
影響 †
共通的な影響
攻撃 †
盗聴
対策 †
codeのオンライン推測 †
影響 †
共通的な影響
攻撃 †
codeのオンライン推測
対策 †
- code
- 短い有効期限
- 1回限りの使用制限
- 高いエントロピーを使用
- codeをredirect_uriに紐付け検証する。
- redirect_uriは、スターターとアクセストークン・リクエストで必要とする。
- codeのオンライン推測に加え(client_id、client_secret、)redirect_uriが必要。
DBからcodeを盗難 †
影響 †
- すべてのcodeの開示(共通的な影響)
- 合わせて、client_idやredirect_uriの漏洩
攻撃 †
- データベースへのアクセス権を取得
- SQLインジェクション攻撃
対策 †
- システムのセキュリティ対策を実施
- 標準のSQLインジェクション対策を実施
- codeハッシュのみを格納
Clientへの誘導による盗難 †
オープン・リダイレクタや、DNSまたはARPスプーフィングが用いられる。
影響 †
共通的な影響
攻撃 †
redirect_uriを使用して任意のURLに誘導
対策 †
redirect_uriのフルパス登録・検証
codeフィッシング †
影響 †
共通的な影響
攻撃 †
- Client(と言うより、ココでは任意のredirect_uri)
に対するDNSまたはARPスプーフィングが行われる。
- 悪意のあるClientに誘導してcodeを入手する。
対策 †
- クライアント認証
- redirect_uriをSSL/TLS(サーバ証明)で保護
セッション・ハイジャック †
前述のcodeフィッシングの考慮事項に、
「Client登録機能で登録された悪意のあるClient」を追加した版。
影響 †
共通的な影響
攻撃 †
- 悪意のあるClientが登録される。
- 悪意のあるClientに対するDNSまたはARPスプーフィングが行われる。
- 悪意のあるClientに誘導してcodeを入手する。
対策 †
redirect_uriをSSL/TLS(サーバ証明)で保護
悪意のあるClientの登録・誘導による盗難 †
- 登録機能で登録されたClientなので、クライアント認証は対策として無効。
- 従って、アクセストークン・リクエストをパスされる可能性が高まる。
- ただし、codeとclient(例えば、redirect_uriなど)を、
紐付ける仕組みを導入すれば、対策は可能と思われる。
WebView?などの組込ブラウザ(Resource Owner偽装) †
影響 †
攻撃者は、ユーザーの認証資格情報を盗み、リソースにアクセス
攻撃 †
- 既存ログイン・セッションを持っている。
- 外部ブラウザで既存のセッションを乱用
- 特定のデバイスでブラウザ間のクッキーを乱用
- 悪意のあるClientは、
- 以下の方法で認可画面のPOSTバックをプログラムで送信
- WebView?などの組込ブラウザを組み込み、
- Authorization Serverによって送信されたHTML Formを解釈し、
- HTML Formに対応するPOSTバックを自動的に送信。
- これにより、別のscopeのアクセストークンを同意なしで取得可能。
対策 †
- これは、CSRF対策を使用して防止することはできない。
- 自動再認証、認可画面非表示を使用しない(行わない)。
- パスワード認証とユーザー同意を1つのフォームにまとめ、
- CAPTCHAを使用するか、
- ワンタイム秘密をリソース所有者に使用する。
- 任意の通知手段によって認可をResource Ownerに通知する。
スクリーン・スクレイピング †
影響 †
悪意のあるClientが、アクセストークンを取得できる。
攻撃 †
- 悪意のあるClientが登録される。
- 悪意のあるClientは、フロー中のユーザ同意を、
スクリーン・スクレイピング技術を利用してシミュレートする(など)。
対策 †
- 画面の表示
- 自動再認証の抑止
- 認可画面の表示
- 目的(scope)の提示
- client_idに対応する名称
- access_tokenの期間
- スクリーン・スクレイピングの防止(CAPTCHAs)
codeの置換・注入 †
- 既存Clientを利用した攻撃なので、Client登録機能が無くても攻撃可能。
- codeの置換・注入があり、其々以下のような特徴がある。
- codeの置換:「被害者のアカウント」でリソースにアクセス
- codeの注入:「攻撃者のアカウント」でリソースにアクセス
※ 共通的な影響には合致しない(アクセストークンの取得が可能)。
漏洩した利用者のcode置換 †
影響 †
攻撃者は、「被害者のアカウント」でリソースにアクセス可能。
(被害者のアカウントに紐付いたリソースのCRUDが可能)
攻撃 †
- 被害者のcode(state)を入手する。
- 単純な攻撃では、stateを入手できない。
- 脆弱なAuthorization Serverの既存のクライアントのredirect_uriを編集・追加する。
(ココでは、redirect_uriパラメタではなく、登録されているデータそのものの編集・追加を言っている模様)
- code(state)を他の正規のクライアントに向けて置換する。
対策 †
- redirect_uriの改ざんなどがされないようにする。
CSRFによる攻撃者のcode注入 †
影響 †
脆弱なClientによって被害者は「攻撃者のアカウント」でリソースにアクセス可能。
(攻撃者のアカウントに紐付いたリソースのストアに被害者のデータを登録させることが出来る)
攻撃 †
攻撃者は、脆弱なClientをターゲットとして、
- Clientを対象としたcodeを収集する。
- そのcodeを含むClientへのCSRFリンクを踏ませる。
対策 †
- "state"パラメタを使用し、CSRFを防止する。
- ユーザの教育(偽造サイトのCSRFのリンクの識別)
code置換によるOAuthログイン †
影響 †
外部ログイン・シナリオで、攻撃者は、「被害者のアカウント」でログイン可能
(場合によっては、悪意のあるアプリケーションにログインさせることが出来る)
※ 外部ログイン・シナリオでは、userinfoエンドポイントに対するリクエストによってログインが完了する。
攻撃 †
漏洩した利用者のcode置換を外部ログイン・シナリオで利用する。
対策 †
codeをaccess_tokenに交換する際、
アクセストークンまで取得が可能な攻撃 †
クリック・ジャッキング †
影響 †
攻撃者は、ユーザーの認証資格情報を盗み、リソースにアクセス
※ 共通的な影響には合致しない(アクセストークンの取得が可能)。
攻撃 †
- 前述に近いが、
- 「悪意のあるClient」の
- 「POSTバックを自動的」や、
- 「スクリーン・スクレイピング技術」ではなく
- 「偽造サイト」の「クリック・ジャッキング」とする。
- 以下で認証済みアクセスする。
- ユーザを偽造サイトに誘導する。
- ダミーボタンのセットの上に、透明なiFrameでターゲットサイトを読み込む。
- ボタンをクリックすると、実際には隠しページのAuthorizeボタンなどをクリック。
対策 †
- ユーザの教育(偽造サイトのクリック・ジャッキングの識別)
- IFrameの回避
- 新しいブラウザ
X-FRAME-OPTIONSヘッダ
- 古いブラウザ
アンチフレーム、フレームバストのJavaScript(すべてのブラウザで効果的でない)
DoSによるサーバ機能のダウン †
DoSによるリソース枯渇 †
影響 †
リソース枯渇によるサーバ機能のダウン
攻撃 †
DoSにより、codeプールなどのリソースを枯渇させる。
対策 †
- ユーザ毎に付与されるアクセストークンの数を制限
- codeに重要な量のエントロピーを含める
生成codeによるDoS †
影響 †
リソース枯渇によるサーバ機能のダウン
攻撃 †
生成codeを使用して、redirect_uriにボットネットで攻撃する。
対策 †
- "state"パラメタを使用し負荷軽減を行う。
- 無効なcode要求の数がしきい値を超える
- クライアントからの接続を制限/禁止する。
- ユーザ・アカウントからの接続を制限/禁止する(Client側で認証が必要)。
Tags: :IT国際標準, :認証基盤, :クレームベース認証, :OAuth