Free プランでは、漏洩認証情報検出はデフォルトで有効であり、操作は不要です。有料プランでは、Cloudflare ダッシュボード、API、または Terraform で検出をオンにできます。
-
Cloudflare ダッシュボードで、セキュリティの Settings ページを開きます。
Settings を開く ↗ -
(任意)Detection tools で絞り込みます。
-
Leaked credential detection をオンにします。
次のような POST リクエストを使います。
Required API token permissions
At least one of the following token permissions is required:Zone WAF WriteAccount WAF Write
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/leaked-credential-checks" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"enabled": true
}'ゾーンで漏洩認証情報の検出を有効にするには、cloudflare_leaked_credential_check リソースを使います。次に例を示します。
resource "cloudflare_leaked_credential_check" "zone_lcc_example" {
zone_id = var.cloudflare_zone_id
enabled = true
}Security Analytics と HTTP ログを使い、受信リクエスト内の漏洩認証情報を Cloudflare が正しく検出していることを確認します。
設定の検証に使えるテスト用認証情報については、設定をテストする を参照してください。
または、次の手順で説明するようなカスタムルールを、Log アクション(Enterprise のお客様のみ)で作成します。このルールは Security Events を生成し、設定の検証に使えます。
Free プランの場合は、Security > Security rules にある推奨 レート制限ルール テンプレートをデプロイします。
このテンプレートでルールをデプロイすると、漏洩したパスワードでアプリケーションへ 10 秒あたり 5 回を超えてアクセスしようとする IP に対して、すぐに保護がかかります。このルールは、一定時間ブロックすることで攻撃を遅らせます。または、カスタムルールを作成することもできます。
有料プランでは、ルール作成時により細かい制御が使えます。有料プランの場合は、漏洩認証情報を含むリクエストにチャレンジする カスタムルールを作成 します。
| フィールド | 演算子 | 値 |
|---|---|---|
| User and Password Leaked | equals | True |
式エディターを使う場合は、次の式を入力します。
(cf.waf.credential_check.username_and_password_leaked)ルールアクション: Managed Challenge
このルールは、Cloudflare が以前に漏洩した認証情報の組(ユーザー名とパスワード)を検出したリクエストに一致します。漏洩認証情報の検出が提供するフィールドの一覧は、漏洩認証情報フィールド を参照してください。
Rules 言語の他のフィールドと組み合わせる
前の式を、Rules 言語の他の フィールド や 関数 と組み合わせることができます。ルールの適用範囲を調整したり、漏洩認証情報のチェックを他のセキュリティ機能と組み合わせたりできます。例:
-
次の式は、認証エンドポイント宛ての、漏洩認証情報を含むリクエストに一致します。
フィールド 演算子 値 論理 User and Password Leaked equals True And URI Path contains /admin/login.phpエディターを使う場合の式:
(cf.waf.credential_check.username_and_password_leaked and http.request.uri.path contains "/admin/login.php") -
次の式は、認証情報を含むボットからのリクエストに一致します。
フィールド 演算子 値 論理 Authentication detected equals True And Bot Score less than 10エディターを使う場合の式:
(cf.waf.auth_detected and cf.bot_management.score lt 10)
その他の例は、緩和ルールの例 を参照してください。
加えて、Cloudflare が検出した漏洩認証情報を オリジンサーバー 側で扱うこともできます。
-
Add Leaked Credentials Checks Header マネージド変換を オンにします。
-
オリジンサーバーで
Exposed-Credential-Checkヘッダー付きのリクエストを受け取った場合、以前に漏洩した認証情報を検出したら、エンドユーザーをパスワードリセットページへリダイレクトできます。
デフォルト設定ではカバーできない方法で漏洩認証情報をチェックするには、カスタム検出ロケーション を追加します。
-
Cloudflare ダッシュボードで、Security の Settings ページを開きます。
Settings を開く ↗ -
(任意)Detection tools で絞り込みます。
-
Leaked credential detection > Configurations で、編集アイコンを選択します。
-
Add custom username and password location を選択します。
-
Username location と Password location(任意)に、HTTP リクエストからユーザー名とパスワードを取得する式を入力します。例として、次の式を使えます。
- Username location:
lookup_json_string(http.request.body.raw, "user") - Password location:
lookup_json_string(http.request.body.raw, "secret")
この設定は、次のような構造の JSON 本文を含む受信 HTTP リクエストをスキャンします。
{"user": "<USERNAME>", "secret": "<PASSWORD>"}この関数の詳細は、
lookup_json_string()のドキュメントを参照してください。 - Username location:
-
Save を選択します。
次のような POST リクエストを使います。
Required API token permissions
At least one of the following token permissions is required:Zone WAF WriteAccount WAF Write
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/leaked-credential-checks/detections" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"username": "lookup_json_string(http.request.body.raw, \"user\")",
"password": "lookup_json_string(http.request.body.raw, \"secret\")"
}'この参照式の組(ユーザー名とパスワード)は、次のような構造の JSON 本文を含む受信 HTTP リクエストをスキャンします。
{"user": "<USERNAME>", "secret": "<PASSWORD>"}この関数の詳細は、lookup_json_string() のドキュメントを参照してください。
カスタム検出ロケーションを追加するには、cloudflare_leaked_credential_check_rule リソースを使います。例:
resource "cloudflare_leaked_credential_check_rule" "custom_location_example" {
zone_id = var.cloudflare_zone_id
username = "lookup_json_string(http.request.body.raw, \"user\")"
password = "lookup_json_string(http.request.body.raw, \"secret\")"
}この関数の詳細は、lookup_json_string() のドキュメントを参照してください。
カスタム検出ロケーションでは、ユーザー名の式だけ指定すれば十分です。
リクエスト種別ごとのカスタム検出ロケーションの例は、カスタム検出ロケーション を参照してください。
Cloudflare は、漏洩認証情報の検出の設定をテストするための、大文字小文字を区別する特別な認証情報を提供しています。
検出を有効にして設定したあと、このセクションの認証情報をテスト用 HTTP リクエストで使えます。
Free プラン向けのテスト用認証情報(有料プランでも動作します):
- ユーザー名:
CF_LEAKED_USERNAME_FREE - パスワード:
CF_LEAKED_PASSWORD
有料プラン向けのテスト用認証情報(Free プランでは動作しません):
- ユーザー名:
CF_EXPOSED_USERNAMEまたは[email protected] - パスワード:
CF_EXPOSED_PASSWORD
Cloudflare は、これらの特定の認証情報を、以前に漏洩したものとして扱います。テストで使い、現在の設定の動作を確認してください。