漏洩認証情報のトラフィック検出は、受信リクエストをスキャンし、データ漏洩 ↗で以前に漏洩した認証情報(ユーザー名とパスワード)を探します。
漏洩認証情報の検出をオンにすると、Cloudflare は受信 HTTP リクエストをスキャンしてユーザー名とパスワードを探します。スキャンは、一般的な Web アプリケーション の認証パターンと、設定したカスタム検出場所 を確認します。
検出された認証情報は、既知の漏洩認証情報のデータベースと照合されます。このデータベースは次で構成されます。
- Have I Been Pwned (HIBP) ↗ の一致パスワードデータセット(パスワードのみ)
- Cloudflare が収集した認証情報(ユーザー名)
- 漏洩した認証情報のペア(ユーザー名とパスワード)
結果に基づき、Cloudflare はスキャンしたリクエストの漏洩認証情報フィールド を設定します。これらのフィールドは、次の 2 つの方法で使えます。
- トラフィックを分析する: Security Analytics ダッシュボードで検出結果を確認し、漏洩認証情報がトラフィックにどの程度現れるかを把握します。
- ルールを作成する: カスタムルール またはレート制限ルール でこれらのフィールドを使い、侵害された認証情報を含むリクエストにチャレンジまたはブロックします。
漏洩認証情報がトラフィックに現れる理由はさまざまです。攻撃者がクレデンシャルスタッフィング ↗ 攻撃を行っている場合もあれば、正当なユーザーが以前漏洩したパスワードを再利用している場合もあります。
漏洩認証情報の検出は、一致したリクエストに Exposed-Credential-Check リクエストヘッダーを追加するマネージド変換 を提供します。ヘッダー値は何が漏洩したかを示します。たとえば、ユーザー名とパスワードの両方が漏洩ペアなら 1、ユーザー名が漏洩していれば 2、パスワードのみが漏洩していれば 4 です。
オリジンサーバーでこのヘッダーを使い、ユーザーに警告し、パスワードのリセットを促せます。
プランごとの利用可能な機能については、トラフィック検出ページの提供状況 を参照してください。
漏洩認証情報の検出には、次のよく知られた Web アプリケーションの HTTP リクエストから認証情報を特定するルールが含まれます。
- Drupal
- Joomla
- Ghost
- Magento
- Plone
- WordPress
- Microsoft Exchange OWA
さらに、その他の一般的な Web 認証パターン向けの汎用ルールもスキャンに含まれます。
Web アプリケーションで使っている認証の仕組みに合わせて、カスタム検出場所 を設定することもできます。カスタム検出場所は、Web アプリケーションの HTTP リクエスト内のどこにユーザー名とパスワードがあるかを Cloudflare WAF に伝えます。
デフォルトのスキャンは一般的な Web アプリケーション を対象にしますが、アプリケーションは別の形式やフィールド名で認証情報を送る場合があります。カスタム検出場所を使うと、HTTP リクエスト内のユーザー名とパスワードの場所を Cloudflare に正確に伝えられます。
たとえば、ユーザーを認証する HTTP リクエストの JSON 本文が次のような場合です。
{ "user": "<username>", "secret": "<password>" }次の設定でカスタム検出場所を構成できます。
- ユーザー名の場所:
lookup_json_string(http.request.body.raw, "user") - パスワードの場所:
lookup_json_string(http.request.body.raw, "secret")
カスタム検出場所を指定するとき、必須なのはユーザー名フィールドの場所だけです。
次の表は、リクエスト種別ごとの検出場所の例です。
| リクエスト種別 | ユーザー名の場所 / パスワードの場所 |
|---|---|
| JSON 本文 | lookup_json_string(http.request.body.raw, "user")lookup_json_string(http.request.body.raw, "secret") |
| URL エンコードフォーム | url_decode(http.request.body.form["user"][0])url_decode(http.request.body.form["secret"][0]) |
| マルチパートフォーム | url_decode(http.request.body.multipart["user"][0])url_decode(http.request.body.multipart["secret"][0]) |
カスタム検出場所の指定に使う式には、次のフィールドと関数を含められます。
- フィールド:
- 関数:
カスタム検出場所の設定手順は、利用を開始する を参照してください。
次のフィールドは、Cloudflare が検出した漏洩認証情報の一致種別を示します。侵害された認証情報を含むリクエストに対処するには、カスタムルール またはレート制限ルール でこれらのフィールドを使います。
| フィールド | 説明 |
|---|---|
Password Leaked cf.waf.credential_check.password_leaked Boolean |
リクエストで検出したパスワードが以前に漏洩していたかどうかを示します。 すべてのプランで利用できます。 |
User and Password Leaked cf.waf.credential_check.username_and_password_leaked Boolean |
リクエストで検出したユーザー名とパスワードのペアが以前に漏洩していたかどうかを示します。 Pro プラン以上が必要です。 |
Username Leaked cf.waf.credential_check.username_leaked Boolean |
リクエストで検出したユーザー名が以前に漏洩していたかどうかを示します。 Enterprise プランが必要です。 |
Similar Password Leaked cf.waf.credential_check.username_password_similar Boolean |
リクエストで検出したユーザー名とパスワードに類似した認証情報が以前に漏洩していたかどうかを示します。 Enterprise プランが必要です。 |
Authentication detected cf.waf.auth_detected Boolean |
Cloudflare がリクエスト内で認証情報を検出したかどうかを示します。 Enterprise プランが必要です。 |