マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

OAuth 2.0 Threat Model and Security Considerations
Flowに着目した脅威モデルのうち、主に、code漏洩にフォーカスした内容。

code漏洩

攻撃

(記録から)漏洩

  • HTTP referer
    Redirectエンドポイントからのリダイレクト。
  • WWWサーバの要求ログ
  • WWWブラウザの履歴情報

対策

  • SSL/TLSの利用
  • クライアント認証
  • ブラウザ・キャッシュを自動的にクリーンアップするために、
    redirect_uriのターゲット・ページをリロードする。
  • code
    • 短い有効期限
    • 1回限りの使用制限

共通項

共通的な影響

code漏洩により、

  • codeを用いたアクセストークン・リクエストが可能になる。
    (access_token, refresh_tokenの開示)
  • ただし、アクセストークン・リクエストには、client_secretも必要。

Clientの信頼性

Authorization codeでは、Clientにcodeが渡る。
このClientの信頼性は、Clientのタイプによって異なる。

  • Webアプリケーション
    グローバルに一意なネットワークエンドポイント
  • ネイティブクライアント
    デバイスローカルリソース(カスタムスキーム)

単純な攻撃

codeの盗聴

影響

共通的な影響

攻撃

盗聴

対策

  • SSL/TLSの利用
  • クライアント認証
  • code
    • 短い有効期限
    • 1回限りの使用制限

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偽装)

影響

攻撃者は、Resource Ownerの認証資格情報を盗み、リソースにアクセス

攻撃

  • 悪意のあるClientが登録される。
  • 既存ログイン・セッションを持っている。
    • 外部ブラウザで既存のセッションを乱用
    • 特定のデバイスでブラウザ間のクッキーを乱用
  • 悪意のあるClientは、
    • 以下の方法で認可画面のPOSTバックをプログラムで送信
      • WebView?などの組込ブラウザを組み込み、
      • Authorization Serverによって送信されたHTML Formを解釈し、
      • HTML Formに対応するPOSTバックを自動的に送信。
  • これにより、別のscopeのアクセストークンを同意なしで取得可能。

対策

  • これは、CSRF対策を使用して防止することはできない。
  • 自動再認証、認可画面非表示を使用しない(行わない)。
  • パスワード認証とユーザ同意を1つのフォームにまとめ、
    • CAPTCHAを使用するか、
    • ワンタイム秘密をリソース所有者に使用する。
  • 任意の通知手段によって認可をResource Ownerに通知する。

スクリーン・スクレイピング

影響

悪意のあるClientが、アクセストークンを取得できる。

攻撃

  • 悪意のあるClientが登録される。
  • 悪意のあるClientは、フロー中のユーザ同意を、
    スクリーン・スクレイピング技術を利用してシミュレートする(など)。

対策

  • redirect_uri検証
  • 画面の表示
    • 自動再認証の抑止
    • 認可画面の表示
      • 目的(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に交換する際、

  • 事前のユーザ認証
  • ユーザIDとcodeの対応付け
    OpenID / OpenID ConnectSAMLを利用
    (audによるClient制限を行うことが出来る)

アクセストークンまで取得が可能な攻撃

共通的な影響には合致しない(アクセストークンの取得が可能)。

WebViewなどの組込ブラウザ

スクリーン・スクレイピング

漏洩した利用者のcode置換

CSRFによる攻撃者のcode注入

code置換によるOAuthログイン

クリック・ジャッキング

影響

攻撃者は、Resource Ownerの認証資格情報を盗み、リソースにアクセス

攻撃

  • 前述に近いが、
    • 「悪意のあるClient」の
      • 「POSTバックを自動的」や、
      • 「スクリーン・スクレイピング技術」ではなく
    • 「偽造サイト」の「クリック・ジャッキング」とする。
  • 以下で認証済みアクセスする。
    • Resource Ownerを偽造サイトに誘導する。
    • ダミーボタンのセットの上に、透明なiFrameでターゲットサイトを読み込む。
    • ボタンをクリックすると、実際には隠しページのAuthorizeボタンなどをクリック。

対策

  • ユーザの教育(偽造サイトのクリック・ジャッキングの識別)
  • IFrameの回避
    • 新しいブラウザ
      X-FRAME-OPTIONSヘッダ
    • 古いブラウザ
      アンチフレーム、フレームバストのJavaScript(すべてのブラウザで効果的でない)

DoSによるサーバ機能のダウン

DoSによるリソース枯渇

影響

リソース枯渇によるサーバ機能のダウン

攻撃

DoSにより、codeプールなどのリソースを枯渇させる。

対策

  • Resource Owner毎に付与されるアクセストークンの数を制限
  • codeに些細ではない量のエントロピーを含める(?)

生成codeによるDoS

影響

リソース枯渇によるサーバ機能のダウン

攻撃

生成codeを使用して、redirect_uriにボットネットで攻撃する。

対策

  • "state"パラメタを使用し負荷軽減を行う。
  • 無効なcode要求の数がしきい値を超える
    • クライアントからの接続を制限/禁止する。
    • ユーザ・アカウントからの接続を制限/禁止する(Client側で認証が必要)。

Tags: :IT国際標準, :認証基盤, :クレームベース認証, :OAuth


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-10-26 (金) 18:32:54 (22d)