Modsec ruleRemoveTargetById не удаляет правила - PullRequest
0 голосов
/ 10 мая 2019

Я пытаюсь написать исключения из правил modsecurity и, похоже, не могу заставить ctl:ruleRemoveTargetById работать согласно справочному руководству.

Мой сервер работает под управлением Debian 9 с apache2 2.4.25-3 + deb9 У меня естьпопытался следовать справочному руководству по github и попытался эмулировать примеры правил в файле> REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.Я написал простое правило для определенных аргументов, а затем попытался исключить его, но оно не исключает правило, основанное на аргументах.Я вижу и идентификатор правила, и идентификатор исключения из правил в журналах.

Я произвольно поместил приведенное ниже правило в файл REQUEST-905-COMMON-EXCEPTIONS.conf

SecRule ARGS "@rx propfind" "id:905999,phase:2,log,msg:'test msg delete rule'"

Это стреляет как надо.На моей странице настроек nextcloud есть аргумент с именем <?xml version, который содержит шаблон «propfind», который я использую для тестирования.

Я также написал исключение и поместил его в REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf

SecRule ARGS_NAMES "@rx <\?xml\sversion" "phase:2,log,id:1030,ctl:ruleRemoveTargetById=905999;ARGS:/<\?xml\sversion/"

Это правило срабатывает, как и ожидалось, но не мешает правилу 905999 запустить аргумент с именем <?xml version

Я упростил правила до двух нижеи это работает как ожидалось;при вводе example.com/?test=trigger я вижу в журнале правило 905999, но при отправке example.com/?testarg=trigger я вижу только то правило исключения 1030, которое ожидалось.

SecRule ARGS "@rx trigger" "id:905999,phase:2,log,msg:'test msg delete rule'"

SecRule ARGS_NAMES "@rx testarg" "phase:2,log,id:1030,ctl:ruleRemoveTargetById=905999;ARGS:testarg"

Когда я открываю вкладку настроек nextcloud, запрос HTTPсодержит

<?xml version="1.0"?><d:propfind xmlns:d="DAV:"><d:prop><d:resourcetype/></d:prop></d:propfind>

, который Modsec интерпретирует как имя аргумента <?xml version, содержащее значение "1.0"?><d:propfind xmlns:d="DAV:"><d:prop><d:resourcetype/></d:prop></d:propfind>

Я бы ожидал, что мое правило 1030 остановит запуск 905999, но я все еще вижу обаправила в журнале.Я предполагаю, что это из-за пробела между «xml» и «version», но не могу понять, как исключить цель.

1 Ответ

0 голосов
/ 14 мая 2019

Почему-то регулярное выражение в ctl:ruleRemoveTargetById=905999;ARGS:/<\?xml\sversion/ не работает. Использование SecRuleUpdateTargetById 905999 "!ARGS:/<\?xml\sversion" и размещение его в RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf для обновления целей правил после их загрузки работает как нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...