← Документация WAF / detections / leaked-credentials
Начало работы
1. Включите обнаружение
На тарифах Free обнаружение утёкших учётных данных включено по умолчанию, и никаких действий не требуется. На платных тарифах вы можете включить обнаружение в панели управления Cloudflare, через API или с помощью Terraform.
-
В панели управления Cloudflare перейдите в раздел Security Settings .
Перейдите в Settings ↗ -
(Необязательно) Отфильтруйте по Инструменты обнаружения.
-
Включите Обнаружение утёкших учётных данных.
Используйте POST запрос, аналогичный следующему:
Необходимые разрешения API-токена
Хотя бы одно из следующих разрешения токена обязательно: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
}2. Проверьте поведение обнаружения утёкших учётных данных
Используйте Security Analytics и HTTP-логи, чтобы убедиться, что Cloudflare корректно обнаруживает утёкшие учётные данные во входящих запросах.
См. Проверьте вашу конфигурацию — там приведена дополнительная информация о тестовых учётных данных, которые можно использовать для проверки конфигурации.
Либо создайте пользовательское правило, подобное описанному на следующем шаге, используя Log (действие доступно только клиентам Enterprise). Это правило будет генерировать события безопасности который позволит вам проверить вашу конфигурацию.
3. Митигируйте запросы с утёкшими учётными данными
Если вы на плане Free, разверните предложенный правило rate limiting, доступный в Security > Правила безопасности.
Развернув правило по этому шаблону, вы получаете мгновенную защиту от IP-адресов, пытающихся обратиться к вашему приложению с утёкшим паролем более пяти раз за 10 секунд. Это правило может замедлить атаки, блокируя их на определённый период. Либо вы можете создать пользовательское правило.
На платных планах при создании правила доступны более гранулярные настройки. Если вы на платном плане, создайте пользовательское правило , которое выдаёт челлендж запросам с утёкшими учётными данными:
| Поле | Оператор | Значение |
|---|---|---|
| User and Password Leaked | равно | True |
Если вы используете Expression Editor, введите следующее выражение:
(cf.waf.credential_check.username_and_password_leaked)Действие правила: Managed Challenge
Это правило будет совпадать с запросами, в которых Cloudflare обнаруживает ранее утёкшую пару учётных данных (имя пользователя и пароль). Список полей, предоставляемых обнаружением утёкших учётных данных, см. в Поля утёкших учётных данных.
Комбинация с другими полями языка Rules
Вы можете комбинировать предыдущее выражение с другими поля и функции языка Rules. Это позволяет настраивать область действия правила или сочетать проверку утёкших учётных данных с другими функциями безопасности. Например:
-
Следующее выражение будет соответствовать запросам с утёкшими учётными данными, адресованным эндпоинту аутентификации:
Поле Оператор Значение Логика User and Password Leaked равно 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") -
Следующее выражение будет соответствовать запросам от ботов, содержащим учётные данные аутентификации:
Поле Оператор Значение Логика Аутентификация обнаружена равно 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вы могли бы перенаправлять конечных пользователей на страницу сброса пароля при обнаружении ранее утёкших учётных данных.
4. (Необязательно) Настройте пользовательское расположение обнаружения
Чтобы проверять утёкшие учётные данные способом, не охваченным конфигурацией по умолчанию, добавьте пользовательское расположение обнаружения.
-
В панели управления Cloudflare перейдите в раздел Security Settings .
Перейдите в Settings ↗ -
(Необязательно) Отфильтруйте по Инструменты обнаружения.
-
В разделе Обнаружение утёкших учётных данных > Конфигурации, выберите значок редактирования.
-
Выберите Добавление пользовательского расположения имени пользователя и пароля.
-
В Расположение имени пользователя и Расположение пароля (необязательно) введите выражения для извлечения имени пользователя и пароля из HTTP-запроса. Например, можно использовать следующие выражения:
- Расположение имени пользователя:
lookup_json_string(http.request.body.raw, "user") - Расположение пароля:
lookup_json_string(http.request.body.raw, "secret")
Эта конфигурация будет сканировать входящие HTTP-запросы с JSON-телом, структура которого похожа на следующую:
{"user": "<USERNAME>", "secret": "<PASSWORD>"}См.
lookup_json_string()— в документации приведена дополнительная информация об этой функции. - Расположение имени пользователя:
-
Выберите Save.
Используйте POST запрос, аналогичный следующему:
Необходимые разрешения API-токена
Хотя бы одно из следующих разрешения токена обязательно: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\")"
}'Эта пара выражений поиска (для имени пользователя и пароля) будет сканировать входящие HTTP-запросы с JSON-телом со структурой, похожей на следующую:
{"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 считает эти конкретные учётные данные ранее утёкшими. Используйте их в тестах, чтобы проверить поведение вашей текущей конфигурации.