← Документация WAF / managed-rules / payload-logging
Сохранение расшифрованных совпадающих полезных нагрузок в журналах
Зашифрованные данные совпадающего запроса можно включить в Logpush задания, добавив Общее > Метаданные поле из набора данных Firewall Events в свою задачу.
Полезные данные в зашифрованном виде доступны в encrypted_matched_data свойство из Metadata поле.
Однако вам может потребоваться расшифровать совпавшую полезную нагрузку перед сохранением журналов в Система SIEM по вашему выбору. Cloudflare предоставляет образец проекта Worker ↗ на GitHub, который выполняет следующее:
- Выступает в роли S3-совместимого хранилища для получения журналов от Logpush. Эти журналы будут содержать зашифрованные данные совпавшей полезной нагрузки.
- Расшифровывает данные совпавшей полезной нагрузки с помощью вашего закрытого ключа.
- Отправляет журналы в конечную систему хранения журналов с расшифрованными данными полезной нагрузки.
В образец проекта потребуется внести некоторые изменения, чтобы отправлять журналы с расшифрованными данными полезной нагрузки в вашу систему хранения журналов.
См. в проекте Worker README ↗ подробнее о настройке и развёртывании этого проекта Worker.
Структура encrypted_matched_data свойство в Logpush
Информация о совпавшей полезной нагрузке включает конкретную строку, которая активировала правило, а также фрагмент текста непосредственно до и после этой строки.
После расшифровки его значения 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 байт содержимого до и после совпадения.
Ниже приведено несколько примеров совпадений полезной нагрузки:
{
"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>"
}
}