「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
OAuth 2.0 Threat Model and Security ConsiderationsのFlowに着目した脅威モデル。
主に、code漏洩にフォーカスした内容。
Implicit †
access_tokenは、
- Fragment identifierでClientに直接返される。
- HTTP refererを介して漏洩しない。
共通項 †
共通的な影響 †
access_tokenの漏洩により、
Resource Ownerの、そのscopeのリソースにアクセス可能になる。
攻撃区分での分類 †
Endpointからのaccess_token漏洩 †
影響 †
共通的な影響
攻撃 †
盗聴
対策 †
SSL/TLSの利用
ブラウザ履歴からのaccess_token漏洩 †
影響 †
共通的な影響
攻撃 †
ブラウザ履歴の参照
対策 †
悪意のあるClientを認可してしまう †
Implicitではクライアント認証が不可な点を除き、Authorization codeと同じ。
影響 †
-
攻撃 †
-
対策 †
- redirect_uri検証
- scope
- 認可画面の表示(通常の仕様では認可画面非表示)
- 若しくは、当該フロー(認可画面非表示)でのscope制限
スクリプトの実装を置換する †
影響 †
共通的な影響
攻撃 †
- DNSまたはARPスプーフィング
- 攻撃者のスクリプトをダウンロードする。
- access_tokenの盗難・漏洩
対策 †
- スクリプトを取得する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注入 †
攻撃方法・対策は、Authorization codeと同じ。
影響 †
攻撃 †
対策 †
access_token置換によるOAuthログイン †
攻撃方法・対策は、Authorization codeと同じ。
影響 †
攻撃 †
対策 †
Resource Owner Password Credentials †
OAuth 2.0ではIdPの仕様について言及されていないので、
ここでは唯一、サインイン・プロセスの問題を扱う(ただし非対話)。
共通項 †
共通的な影響 †
- クライアントにユーザID/パスワードが渡る。
- トークン取り消しが機能しない。
- 認可プロセスを制御できない。
攻撃区分での分類 †
ユーザID/パスワードの盗難 †
影響 †
共通的な影響
攻撃 †
悪意のあるクライアントによるユーザID/パスワード盗難
対策 †
- 限定的に利用する。
- 基本認証から移行する過渡期
- UserAgent?がAuthorization Serverに接続できない場合
- ClientとAuthorization Serverが同じ組織に利用されているケース
- ユーザに異なるサービスに同じ
ユーザID/パスワードを使用しないように促す。
- refresh_tokenとユーザIDの紐付けと検証(?
ユーザID/パスワードの盗聴 †
影響 †
共通的な影響
攻撃 †
エンドポイントに対するユーザID/パスワード盗聴
対策 †
- SSL/TLSを利用する。
- 平文認証を使用しない代替認証を使用する。
Client側でのパスワードの露見アクシデント †
影響 †
共通的な影響
攻撃 †
クライアントが十分な保護を提供していない場合、偶発的に起きる。
対策 †
- 他のフローを使用する。
- ダイジェスト認証を使用
- ログのパスワードを難読化
意図しない不要に大きなscope †
影響 †
悪意のあるClientが、不要に大きなscopeを持ったトークンを取得できる。
攻撃 †
悪意のあるClientが、不要に大きなscopeを持ったトークンを要求する。
対策 †
- scope
- 当該(非対話的)フローでのscope制限
- クライアントの信頼性よって緩和
- 任意の通知手段によって認可をResource Ownerに通知する。
refresh_tokenによる長期的認可の維持 †
影響 †
攻撃 †
対策 †
- 当該フローでrefresh_token
- 発行しない。
- クライアントの信頼性よって緩和
- 任意の通知手段によってリフレッシュをResource Ownerに通知する。
ユーザID/パスワードのオンライン推測 †
影響 †
単一のユーザー名とパスワードの組み合わせの啓示
攻撃 †
有効なユーザー名とパスワードの組み合わせを推測
対策 †
- サインイン
- 安全なパスワードポリシー設定する。
- ロックアウト、タールピット(一時的ロック)を使用する。
- CAPTCHAを使用する。
- 他のフローを使用する。
- クライアント認証を併用する。
Client Credentials †
Resource Owner Password Credentialsで説明したものと同様だが、
ユーザID/パスワードは使用しないため、非対話的問題を突いた攻撃の考慮事項に限定される。
参考 †
ネットでピックアップされていたもの。
全グラント種別共通 †
影響 †
Clientを用いた攻撃が可能になる。
- Clientなりすまし(偽装)
- 悪意のあるClientの登録
攻撃 †
- Clientなりすまし(偽装)
- client_idを盗んで、特定のClientになり済ますことができる。
- これにより、攻撃用のClientを使用した攻撃が可能になる。
- 悪意のあるClientの登録
- する場合、悪意のあるClientが登録できる。
- Clientを利用してcodeやtokenを盗むことができる。
対策 †
- Clientなりすまし(偽装)
クライアント認証、redirect_uri 検証
- 悪意のあるClientの登録
クライアントの登録機能をサポートしない。
Authorization Code, Implicitグラント種別共通 †
Open Redirect
影響 †
攻撃者のClientのRedirectエンドポイントに誘導できる。
攻撃 †
redirect_uriパラメタを用いたOpen Redirectの脆弱性を攻撃
対策 †
Authorization Serverの甘めの redirect_uri 検証処理に起因するので、
Authorization Serverは、client_id + redirect_uri の事前登録必須 + 完全一致にする。
Authorization Codeグラント種別 †
codeの置換・注入(CSFR)
影響 †
- 置換
他人のaccess_tokenを取得できる可能性がある。
- 注入(CSFR)
自分のaccess_tokenで他のユーザが操作を行える。
攻撃 †
codeを収集し、置換・注入(CSFR)の攻撃を行う。
- 置換
- 自分のClientを使用して、他人のcodeを収集する。
- 他人のcodeを収集して、自分のフロー中に埋め込む(置換)。
- 注入(CSFR)
- 攻撃対象のClientを使用して、自分のcodeを収集する。
- 自分のcodeを収集して、他人のフロー中に埋め込む(注入(CSFR))。
対策 †
- 置換
クライアント認証、redirect_uri 検証に対策を施す。
- 注入(CSFR)
ClientにCSFR対策を施す。
認可エンドポイントへ遷移する際にstateパラメタを付与する。
そして、Redirectエンドポイントでstateパラメタをチェックする。
Implicitグラント種別 †
Tokenの置き換え(不正利用)
影響 †
「OAuth 2.0 の implicit grant flow を認証に使うと、
車が通れる程どてかいセキュリティ・ホールが開く。」らしい。
攻撃 †
この、セキュリティ・ホールとは、
ザックリ言って、
と言うモノらしい。
対策 †
access_tokenのJWT化などによって、Resource Server側でもClient検証を行う。
Tags: :IT国際標準, :認証基盤, :クレームベース認証, :OAuth