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

Сохранение расшифрованных совпавших payload в журналах

Вы можете включить зашифрованный совпавший payload в ваши Logpush, добавив Общее > Метаданные из набора данных Firewall Events в ваше задание.

Payload в зашифрованном виде доступен в поле encrypted_matched_data (свойство) Metadata .

Однако вы можете захотеть расшифровать совпавший payload перед сохранением логов в вашем SIEM-система по вашему выбору. Cloudflare предоставляет пример проекта Worker на GitHub, который делает следующее:

  1. Ведёт себя как S3-совместимое хранилище для приёма логов из Logpush. Эти логи будут содержать зашифрованные данные совпавших payload.
  2. Расшифровывает данные совпавшего payload с помощью вашего приватного ключа.
  3. Отправляет журналы в конечную систему хранения журналов с расшифрованными данными payload.

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

Обратитесь к файлу проекта Worker README для получения дополнительной информации о настройке и развёртывании этого проекта Worker.

Структура encrypted_matched_data в Logpush

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

После расшифровки его значения encrypted_matched_data объекта Metadata в Logpush имеет структуру, подобную следующей:

{
	// for fields with only one match (such as URI or user agent fields):
	"<match_location>": {
		"before": "<text_before_match>",
		"content": "<matched_text>",
		"after": "<text_after_match>"
	},
	// for fields with possible multiple matches (such as form, header, or body fields):
	"<match_location>": [
		{
			"before": "<text_before_match_1>",
			"content": "<matched_text_1>",
			"after": "<text_after_match_1>"
		},
		{
			"before": "<text_before_match_2>",
			"content": "<matched_text_2>",
			"after": "<text_after_match_2>"
		}
	]
}

before и after свойства необязательны (содержимого до/после совпавшего текста может не быть) и содержат не более 15 байт содержимого до и после совпадения.

Ниже приведено несколько примеров совпадений payload:

Совпадение URI
{
	"http.request.uri": {
		"before": "/admin",
		"content": "/.git/",
		"after": "config"
	}
}
Совпадение значения заголовка
{
	"http.request.headers.values[3]": [
		{ "content": "phar://", "after": "example" }
	]
}
Совпадение по необработанному содержимому тела
{
	"http.request.body.raw": {
		"before": "NY>",
		"content": "<!ENTITY xxe SYSTEM \"file:///dev/random\">] > ",
		"after": "<foo>&xxe;</foo>"
	}
}