INTEGRITY Документация

Начало работы

1. Включите обнаружение

На тарифах Free обнаружение утёкших учётных данных включено по умолчанию, и никаких действий не требуется. На платных тарифах вы можете включить обнаружение в панели управления Cloudflare, через API или с помощью Terraform.

  1. В панели управления Cloudflare перейдите в раздел Security Settings .

    Перейдите в Settings ↗
  2. (Необязательно) Отфильтруйте по Инструменты обнаружения.

  3. Включите Обнаружение утёкших учётных данных.

Используйте POST запрос, аналогичный следующему:

Необходимые разрешения API-токена

Хотя бы одно из следующих разрешения токена обязательно:
  • Zone WAF Write
  • Account WAF Write
Обновление статуса Leaked Credential Checks для зоны.
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. Это позволяет настраивать область действия правила или сочетать проверку утёкших учётных данных с другими функциями безопасности. Например:

Дополнительные примеры см. в Примеры правил блокировки.

Обработка обнаруженных утёкших учётных данных на сервере-источнике

Кроме того, вы можете обрабатывать утёкшие учётные данные, обнаруженные Cloudflare, на вашем исходный сервер:

  1. Включить Add Leaked Credentials Checks Header (управляемое преобразование).

  2. Для запросов, поступающих на ваш сервер-источник и содержащих Exposed-Credential-Check вы могли бы перенаправлять конечных пользователей на страницу сброса пароля при обнаружении ранее утёкших учётных данных.

4. (Необязательно) Настройте пользовательское расположение обнаружения

Чтобы проверять утёкшие учётные данные способом, не охваченным конфигурацией по умолчанию, добавьте пользовательское расположение обнаружения.

  1. В панели управления Cloudflare перейдите в раздел Security Settings .

    Перейдите в Settings ↗
  2. (Необязательно) Отфильтруйте по Инструменты обнаружения.

  3. В разделе Обнаружение утёкших учётных данных > Конфигурации, выберите значок редактирования.

  4. Выберите Добавление пользовательского расположения имени пользователя и пароля.

  5. В Расположение имени пользователя и Расположение пароля (необязательно) введите выражения для извлечения имени пользователя и пароля из 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() — в документации приведена дополнительная информация об этой функции.

  6. Выберите Save.

Используйте POST запрос, аналогичный следующему:

Необходимые разрешения API-токена

Хотя бы одно из следующих разрешения токена обязательно:
  • Zone WAF Write
  • Account 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 (работают и на платных планах):

Тестовые учётные данные для пользователей на платных планах (не работают на планах Free):

Cloudflare считает эти конкретные учётные данные ранее утёкшими. Используйте их в тестах, чтобы проверить поведение вашей текущей конфигурации.