Вопрос или проблема
Мне нужна помощь с логами ModSecurity в нашей среде Kubernetes. У нас есть контроллер входящего трафика, и весь трафик проходит через него. Я включил ModSecurity/OWASP с помощью конфигурационных карт, и конфигурация работает как положено. Я получаю логи с кодами состояния 200 и 403, где это применимо.
В настоящее время я установил ModSecurity в режиме DetectionOnly. Однако я пытаюсь выяснить, какие запросы будут блокироваться, когда я переключу SecRuleEngine на On (режим Enforce). После просмотра логов мне трудно определить разницу.
Например, предположим, что запрос к https://abc.myhost.com/xyz отмечен как тот, который должен быть заблокирован, когда SecRuleEngine включен, но не блокируется из-за режима DetectionOnly. Как я могу это различить, используя логи? Я привел пример ниже для DetectionOnly. Единственное различие, которое я вижу, когда DetectionOnly изменяется на ON, это “secrules_engine”:”Enabled”,
Находясь в режиме DetectionOnly, я хочу понять, какие запросы будут блокироваться, когда я переключу его на ON. Но логи не дают мне отличительных признаков.
{
"transaction":{
"client_ip":"103.x.x.x",
"time_stamp":"Wed Feb 19 13:48:56 2025",
"server_id":"97a0d4c73dd",
"client_port":62482,
"host_ip":"10.x.x.x",
"host_port":8444,
"unique_id":"17399729.475138",
"request":{
"method":"POST",
"http_version":2.0,
"uri":"/suite/JSON-RPC?appian_environment=tempo"
},
"response":{
"http_code":200
},
"producer":{
"modsecurity":"ModSecurity v3.0.12 (Linux)",
"connector":"ModSecurity-nginx v1.0.3",
"secrules_engine":"DetectionOnly",
"components":[
"OWASP_CRS/4.4.0\""
]
},
"messages":[
{
"message":"Тип содержимого запроса не разрешен политикой",
"details":{
"match":"Совпадение \"Operator `Within' с параметром `|application/x-www-form-urlencoded| |multipart/form-data| |multipart/related| |text/xml| |application/xml| |application/soap+xml| |application/json| |application/cloudevents+json| |application/cloudev (16 characters omitted)' against variable `TX:content_type' (Value: `|text/plain|' )",
"reference":"o0,10v383,10t:lowercase",
"ruleId":"920420",
"file":"/etc/nginx/owasp-modsecurity-crs/rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf",
"lineNumber":"993",
"data":"|text/plain|",
"severity":"2",
"ver":"OWASP_CRS/4.4.0",
"rev":"",
"tags":[
"application-multi",
"language-multi",
"platform-multi",
"attack-protocol",
"paranoia-level/1",
"OWASP_CRS",
"capec/1000/255/153",
"PCI/12.1"
],
"maturity":"0",
"accuracy":"0"
}
},
{
"message":"Превышен лимит входной аномалии (общий счёт: 5)",
"details":{
"match":"Совпадение \"Operator `Ge' с параметром `5' against variable `TX:BLOCKING_INBOUND_ANOMALY_SCORE' (Value: `5' )",
"reference":"",
"ruleId":"949110",
"file":"/etc/nginx/owasp-modsecurity-crs/rules/REQUEST-949-BLOCKING-EVALUATION.conf",
"lineNumber":"222",
"data":"",
"severity":"0",
"ver":"OWASP_CRS/4.4.0",
"rev":"",
"tags":[
"anomaly-evaluation",
"OWASP_CRS"
],
"maturity":"0",
"accuracy":"0"
}
}
]
}
}
configmap
modsecurity-snippet: >-
SecRule REQUEST_URI "@contains suite/JSON-RPC"
"id:100001,phase:1,pass,t:none,nolog,ctl:ruleRemoveById=920420,chain"
SecRule REQUEST_HEADERS:Host "@contains myhost.com" "t:none"
SecRequestBodyAccess On
SecAuditLogParts AHKZ
# Отклонять, если больше (мы также могли бы позволить пройти с ProcessPartial)
SecRequestBodyLimitAction Reject
# Отправлять аудиторские логи ModSecurity в stdout (только для отклоненных запросов)
SecAuditLog /dev/stdout
# формировать логи в JSON
SecAuditLogFormat JSON
# может быть On/Off/RelevantOnly
SecAuditEngine RelevantOnly
SecAction "id:900000,phase:1,nolog,pass,t:none,setvar:tx.paranoia_level=2"
SecAction "id:900200,phase:1,nolog,pass,t:none,setvar:tx.allowed_methods=GET HEAD POST OPTIONS PUT PATCH DELETE"
SecRule REQUEST_HEADERS:Content-Type "@rx application/vnd.appian.tv\+json" "id:100002,phase:1,allow,log"
# Правило имеет уровень серьёзности 4, поэтому не было заблокировано
SecRule REMOTE_ADDR "@ipMatch 127.0.0.1" "id:10000,phase:1,pass,nolog,chain"
# Не используем ipMatch, так как не поддерживает порты
SecRule REQUEST_HEADERS:Host "@streq 127.0.0.1:10246" "ctl:ruleRemoveById=920350"
SecRuleEngine DetectionOnly
Ответ или решение
Конфигурирование ModSecurity в режиме DetectionOnly представляет собой важный шаг в обеспечении безопасности среды Kubernetes, позволяя вам протестировать правила и логику работы без реального блокирования трафика. Однако в случаях, когда нужно переключиться на режим Enforce (включенный SecRuleEngine), необходимо четко понимать, какие именно запросы будут блокироваться на основе текущих правил.
Теория (Theory)
ModSecurity – это веб-аппликационный брандмауэр (WAF), который предоставляет средства для защиты веб-приложений от различных типов атак. Основные возможности ModSecurity включают контроль над входящими и исходящими запросами, мониторинг, ведение логов и блокировку подозрительных запросов на основе предустановленных правил, таких как OWASP CRS (Core Rule Set).
Когда ModSecurity находится в режиме DetectionOnly, он регистрирует все, что попадает под правила, но не блокирует эти запросы. Задача состоит в том, чтобы отфильтровать эти логи и определить, какие запросы приведут к блокировке при активации режима Enforce. Это важно для перехода, чтобы избежать ложных срабатываний или ненужных блокировок, которые могут повлиять на нормальную работу пользователей.
Пример (Example)
Ваше текущее окружение используется с контроллером ingress в Kubernetes, который обрабатывает весь поступающий трафик. ModSecurity настроен с использованием конфиг-мапа, где включены OWASP модуль и несколько специфических правил. Лог показывает, что запросы с различными HTTP статус кодами (например, 200 и 403) регистрируются, а режим SecRuleEngine установлен как DetectionOnly. Вы пытаетесь понять, какие из этих запросов будут заблокированы при включении режима Enforce. Фрагмент лога предоставляет информацию о транзакции, включая IP клиента, временную метку, уникальный идентификатор запроса, метод HTTP (например, POST) и другую сопутствующую информацию.
Применение (Application)
Чтобы лучше понять, какие запросы могут быть заблокированы в режиме Enforce, обратите внимание на поле ‘messages’ в логах. Каждая запись внутри ‘messages’ содержит информацию о правилах, которые были задействованы при обработке конкретного запроса. Например:
-
Сообщение: "Request content type is not allowed by policy"
- Details:
- Правило (ruleId): 920420
- Сопоставлено: ‘Matched "Operator
Within' with parameter ... against variable
TX:content_type’ - Это правило сигнализирует о неподходящем типе контента, который будет активирован в режима Enforce. Тут важно рассмотреть необходимость корректировки правил, если такие запросы являются допустимыми в вашей системе.
- Details:
-
Сообщение: "Inbound Anomaly Score Exceeded (Total Score: 5)"
- Details:
- Правило (ruleId): 949110
- Здесь указывается, что связанный аномальный балл превышает установленный порог, что может привести к блокировке при активации Enforce.
- Details:
Для принятия обоснованного решения о переходе на Enforce, важно не только рассматривать наличие сообщений о нарушении правил, но и контекст использования вашего приложения. Обратите внимание на логи за определенный период, чтобы выявить повторяющиеся нарушения, которые могут быть ложными срабатываниями. Поскольку в логах режим SecRuleEngine на DetectionOnly, его замена на On не изменит содержания существующих в DetectionOnly, но к ним добавится секция ‘SecRules_Engine’, указывающая на активацию режима Enforce.
Чтобы минимизировать возможные сбои при переключении на Enforce, рекомендуется:
- Идентификация и адаптация правил: Использовать конфигурацию и специфические правила блокировки для тех запросов, которые должны быть легитимно пропущены.
- Тестирование и мониторинг: Провести тестирование в контролируемой среде с целью отладки и мониторинга влияния на реальные запросы.
- Модерация баллов аномалии: Возможно, стоит пересмотреть критические пороги для правил, связанных с общей аномальной активностью или IP-адресом, чтобы избежать излишней блокировки.
Таким образом, переход на режим Enforce становится более управляемым процессом, который снижает риск нарушения работы веб-приложения. Используйте полученные логи для оптимизации ваших правил с учетом специфики вашего бизнеса и характера трафика.